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 :
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 :
Hier der komplette CooCox-Projektordner zum Download :
Hello, I am unable to download the slave zip even after trying the registry edit. Is this available still?
Hello Rraheem Perkins,
thank you very much for the advice.
The download URL was still an http address. I have now changed it to an https address. Now the download works again.
I will probably have to change other download urls in the same way.
Thank you for looking into this. I was able at a later date to download it using my mobile phone strangely enough.
I will try to implement this LIN bus into a personal project and be sure to leave feedback.
Thank you once again