81-LIN_Slave-Library (STM32F4)

Wer die UART vom STM32F4 als LIN-Bus (Slave) benutzen will, kann diese Library hier benutzen. (es gibt noch eine andere Library für den Master-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 :

Der Slave muss die Funktion “UB_LIN_checkID” pollen um zu erkennen ob ein LIN-Frame vom Master gesendet wurde. Mit der empfangenen ID muss entschieden werden ob der Slave Daten senden/empfangen muss oder ob ihn die ID nicht betrifft.

Bilder :

lin_slave

LIN-Slave per MAX13020

Voraussetzungen :

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

Enumerationen :

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

Funktionen :

1
2
3
4
void UB_LIN_Slave_Init(void);                     // zum init der CPU als LIN-Slave
LIN_ERR_t UB_LIN_checkID(LIN_FRAME_t *frame);     // check ob LIN-ID empfangen wurde
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
//--------------------------------------------------------------
// File     : main.c
// Datum    : 11.04.2014
// 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-Slave 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_slave.h"
#include "stm32_ub_led.h"
 
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-Slave
  UB_LIN_Slave_Init();
 
  while(1)
  {
    // check ob ID per LIN empfangen
    check=UB_LIN_checkID(&myFrame);
    if(check==LIN_OK) {
      UB_Led_Toggle(LED_ORANGE);
      if(myFrame.frame_id==0x01) {
        //---------------------------------------
        // 2Bytes per LIN vom Master empfangen
        //---------------------------------------
        myFrame.data_len=2;
        check=UB_LIN_ReceiveData(&myFrame);
        if(check==LIN_OK) {
          // Daten pruefen
          if((myFrame.data[0]==0xA1) && (myFrame.data[1]==0xB2)) {
            UB_Led_Toggle(LED_GREEN);
          }
          else {
            UB_Led_Toggle(LED_RED);
          }
        }
      }
      else if(myFrame.frame_id==0x02) {
        //---------------------------------------
        // 1Byte per LIN zum Master senden
        //---------------------------------------
        myFrame.data_len=1;
        myFrame.data[0]=0xF9;
        check=UB_LIN_SendData(&myFrame);
        if(check==LIN_OK) UB_Led_Toggle(LED_BLUE);
      }
    }
  }
}

Hier die Library zum Download :

ub_stm32f4_lin_slave_v101

Hier der komplette CooCox-Projektordner zum Download :

Demo_81_LIN_Slave


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

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