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 :
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 :
Hier der komplette CooCox-Projektordner zum Download :
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
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
hi i want to ask if i can use stm32f407 as lin master for 12 slave sensors? to receive data
Hi basel tahboub,
LIN clusters consist of 1 master and up to 16 slave nodes.
You’ll find a simple intro to LIN BUS here:
https://www.csselectronics.com/screen/page/lin-bus-protocol-intro-basics/language/en
Hi I need your help.
I want to download the master/slave library, but the download link is not connected and the download does not work.
80-LIN_Master-Library (STM32F4)
81-LIN_Slave-Library (STM32F4)
sjkim
south korea
Hello sjkim,
there is a fix to solve your download problem. Please read my article:
Download links are blocked in Google Chrome
Hello, how can i port this library to STM32F1xx ?
there are several error with headers files.
Thank you
Sorry, but my libraries was written for the STM32F4, not STM32F1.
There is a pdf, you should be intereseted in: Migration of microcontroller applications from STM32F1 Seriesto STM32F4 Access lines.