mit dieser Library können die 8 UARTs der CPU benutzt werden
die UARTs die benutzt werden sollen, müssen im H-File deklariert und im C-File müssen in der Struktur “UART[]” alle benötigten Parameter eingetragen werden.
(also Pinzuordnung, Baudrate usw)
es gibt eine Sende-Funktion um einen String über die UARTs zu senden
und eine Receive-Funktion um zu testen ob ein String über eine UART empfangen wurde. (der Sender muss an den String ein Endekennungs-Zeichen anhängen z.B. CarriageReturn)
die Array-Funktion : “UB_Uart_SendArray” sendet ein beliebiges Daten-Array
mit “cnt” Bytes per UART
die Array-Funktion : “UB_Uart_ReceiveArray” empfängt ein beliebiges Daten-Array
und übergibt die Anzahl der bis jetzt empfangenen Bytes
(Hinweis : diese Funktion muss u.U. mehrmals aufgerufen werden um alle Daten
einzusammeln)
das eigentliche empfangen der einzelnen Character passiert per Interrupt im Hintergrund.
im Beispiel wurde eine UART definiert :
1 | COM1 per UART1 [TX=PA9], [RX=PA10] mit 115200 Baud |
Enumerationen :
1 2 3 4 5 6 7 | typedef enum { NONE = 0, // keine Endekennung LFCR, // LineFeed + CarriageReturn (0x0A,0x0D) CRLF, // CarriageReturn + LineFeed (0x0D,0x0A) LF, // nur LineFeed (0x0A) CR // nur CarriageReturn (0x0D) }UART_LASTBYTE_t; |
:
1 2 3 4 5 | typedef enum { RX_EMPTY = 0, // nichts empfangen RX_READY, // es steht was im Empfangspuffer RX_FULL // RX-Puffer ist voll }UART_RXSTATUS_t; |
Funktionen :
1 2 3 4 5 6 | void UB_Uart_Init(void); // zum init aller UARTs void UB_Uart_SendByte(UART_NAME_t uart, uint16_t wert); // zum senden eines Bytes void UB_Uart_SendString(UART_NAME_t uart, char *ptr, UART_LASTBYTE_t end_cmd); // zum senden eine String UART_RXSTATUS_t UB_Uart_ReceiveString(UART_NAME_t uart, char *ptr); // zum empfangen eines Strings void UB_Uart_SendArray(UART_NAME_t uart, uint8_t *data, uint16_t cnt); // zum senden eines arrays uint32_t UB_Uart_ReceiveArray(UART_NAME_t uart, uint8_t *data); // zum empfang eines arrays |
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 | //-------------------------------------------------------------- // File : main.c // Datum : 31.10.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F429 // IDE : CooCox CoIDE 1.7.4 // GCC : 4.7 2012q4 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der UART-Lib // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" // In Configuration diese Define hinzufügen : // "STM32F429_439xx" , "__ASSEMBLY__" , "USE_STDPERIPH_DRIVER" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_uart.h" int main(void) { UART_RXSTATUS_t check; char rx_buf[RX_BUF_SIZE]; SystemInit(); // Quarz Einstellungen aktivieren // init vom UART (COM1 : TX=PA9, RX=PA10) UB_Uart_Init(); // Text senden UB_Uart_SendString(COM1, "Hallo", CRLF); while(1) { // test ob etwas per COM1 empfangen wurde check=UB_Uart_ReceiveString(COM1,rx_buf); if(check==RX_READY) { // wenn ja, dann als Echo zurücksenden UB_Uart_SendString(COM1, rx_buf, CRLF); } } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :
Hier der Link zu dem PC-Programm :
I want to use simultaneously two UART unit. Examples of uart1 and uart2. second UART does not work like that just described me. How do I make.
I’m using the stm32f429 border.
hi, please check the uart example for the stm32f407. http://mikrocontroller.bplaced.net/wordpress/?page_id=609
The syntax is the same for the stm32f429. You must change the H-File (add the second uart define) and change the C-File (add the second uart parameter). And double check that the hardware pins not used for another function.
Hi,
This is very useful for me, but I have one dilema.
I’m using You library for RS232 tester but I have to change online baud speed.
How can I do that ?
you can call “USART_Deinit” and after that reinit the USART with the new settings.