80-LIN_Master-Library (STM32F4)

Wer die UART vom STM32F4 als LIN-Bus (Master) benutzen will, kann diese Library hier benutzen. (es gibt noch eine andere Library für den Slave-Mode)

Der LIN-Bus ist eine Eindrahtverbindung mit einem Master und bis zu 16 Slaves.
Für die Hardware wird ein Lin-Transceiver IC benötigt. Ich habe ein MAX13020 benutzt (hier ein Dank an Armin für die ICs und Sockel)

Zur Software :

Ich habe mich an die LIN-Spezifikation gehalten was den Frame Aufbau und die Checksumme angeht. Damit die Slaves zeit zum reagieren haben, gibt es Pausenzeiten zwischen den Datenfields (die per For-n realisiert sind) und event. angepasst werden können.
Das ID-Field kann frei vom User definiert werden (enthält also weder eine Längeninformation noch Paritätsbits, wenn der User das nicht braucht)
Wichtig ist das der Master und der Slave mit den gleichen Längeninformationen arbeiten, also wenn der Master 3 Bytes sendet, muss der Slave auch 3 empfangen.

Bilder :

lin_master

LIN-Master per MAX13020

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, UART, MISC
Benutzte Librarys : keine

Enumerationen :

1
2
3
4
5
6
typedef enum {
  LIN_OK  = 0,   // kein Fehler
  LIN_WRONG_LEN, // falsche Datenanzahl
  LIN_RX_EMPTY,  // kein Frame empfangen
  LIN_WRONG_CRC  // Checksumme falsch
}LIN_ERR_t;

Funktionen :

1
2
3
void UB_LIN_Master_Init(void);                    // zum init der CPU als LIN-Master
LIN_ERR_t UB_LIN_SendData(LIN_FRAME_t *frame);    // zum senden von LIN-Daten
LIN_ERR_t UB_LIN_ReceiveData(LIN_FRAME_t *frame); // zum empfangen von LIN-Daten

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//--------------------------------------------------------------
// File     : main.c
// Datum    : 11.04.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der LIN-Master-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_lin_master.h"
#include "stm32_ub_led.h"
 
void pause(void)
{
  volatile uint32_t n;
  for(n=0;n<5000000;n++);
}
 
int main(void)
{
  LIN_FRAME_t myFrame;
  LIN_ERR_t check;
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // init der LEDs
  UB_Led_Init();
 
  // init der UART als LIN-Master
  UB_LIN_Master_Init();
 
  while(1)
  {
    // kleine Pause
    pause();
    UB_Led_Toggle(LED_BLUE);
 
    //---------------------------------------
    // 2Bytes per LIN an Slave senden
    //---------------------------------------
    myFrame.frame_id=0x01;
    myFrame.data_len=2;
    myFrame.data[0]=0xA1;
    myFrame.data[1]=0xB2;
    UB_LIN_SendData(&myFrame);
 
    // kleine Pause
    pause();
    UB_Led_Toggle(LED_BLUE);
 
    //---------------------------------------
    // 1Byte per LIN vom Slave lesen
    //---------------------------------------
    myFrame.frame_id=0x02;
    myFrame.data_len=1;
    check=UB_LIN_ReceiveData(&myFrame);
    // Daten pruefen
    if((check==LIN_OK) && (myFrame.data[0]==0xF9)) {
      UB_Led_Toggle(LED_GREEN);
    }
    else {
      UB_Led_Toggle(LED_RED);
    }
  }
}

Hier die Library zum Download :

ub_stm32f4_lin_master_v101

Hier der komplette CooCox-Projektordner zum Download :

Demo_80_LIN_Master


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (1 Bewertungen, Durchschnitt: 5,00 von 5)
Loading...

4 Kommentare zu 80-LIN_Master-Library (STM32F4)

  1. Hi Uwe,
    Can I use your idea to implement a LIN driver for NuttX ?

    https://bitbucket.org/nuttx/nuttx/src/master/

    It already supports some similar features like 1-Wire implemented over UART, then I think LIN support should be a great think to support.

    BR,

    Alan

    • admin_mb sagt:

      Hello Alan,
      we have released our sources for everyone. So you can use it – but please do not delete the copyright/licence messages in each file.
      Ciao,
      Manfred

  2. basel tahboub sagt:

    hi i want to ask if i can use stm32f407 as lin master for 12 slave sensors? to receive data

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.