STM32F4. Урок 12 — UART

Данная библиотека позволяет использовать до 6 UART микроконтроллера.
UART, которые будут использоваться, должны быть объявлены в Н- и C-файлах. В структуре «UART []» должны быть указанны все необходимые параметры (то есть расположение выводов, скорость передачи данных и т.д.).

Библиотека содержит функции передачи данных по UART и функцию проверки, пришла ли строка (передатчик должен поддерживать функцию тегов, например возврат указателя к началу строки).
Прием данных происходит в фоновом режиме с использованием прерывания.
В примере используется 2 UART:

  • COM2 по UART2 [TX=PA2], [RX=PA3] с 115200 Baud
  • COM3 по UART3 [TX=PD8], [RX=PD9] с 115200 Baud

Требования:

   Подключаемые модули CooCox-IDE: GPIO, USART, MISC.
   Поддерживаемые библиотеки: отсутствуют.

Перечисления:

 typedef enum {   NONE = 0,  // нет идентификатора в конце   LFCR,      // новая строка + перевод каретки (0x0A,0x0D)   CRLF,      // перевод каретки + новая строка (0x0D,0x0A)   LF,        // только новая строка (0x0A)   CR         // только перевод каретки (0x0D) }UART_LASTBYTE_t;  typedef enum {   RX_EMPTY = 0,  // Ничего не принято   RX_READY,      // Содержание приемного буфера   RX_FULL        // Приемный буфер заполнен }UART_RXSTATUS_t;

Функции:

 void UB_Uart_Init(void);                                                        // инициализация UARTов void UB_Uart_SendByte(UART_NAME_t uart, uint16_t wert);                         // Отправить байт через UART void UB_Uart_SendString(UART_NAME_t uart, char *ptr, UART_LASTBYTE_t end_cmd);  // отправить строку через UART UART_RXSTATUS_t UB_Uart_ReceiveString(UART_NAME_t uart, char *ptr);             // прием строки через UART

Пример использования:

 //-------------------------------------------------------------- // File     : main.c // Datum    : 24.02.2013 // Version  : 1.0 // Autor    : UB // EMail    : mc-4u(@)t-online.de // Web      : www.mikrocontroller-4u.de // CPU      : STM32F4 // IDE      : CooCox CoIDE 1.7.0 // Module   : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der UART-Library // Hinweis  : Diese zwei Files muessen auf 8MHz stehen //              "cmsis_boot/stm32f4xx.h" //              "cmsis_boot/system_stm32f4xx.c" //--------------------------------------------------------------  #include "main.h" #include "stm32_ub_uart.h"  int main(void) {   char buf[RX_BUF_SIZE]; // буфер для приема данных   UART_RXSTATUS_t check;    SystemInit(); // инициализация настроек кварца    // инициализация UART   // Com2 и Com3 работают со скоростью 115200 бод   UB_Uart_Init();    // Отправка двух строк через UART (с переходом к началу строки и возврат каретки)   UB_Uart_SendString(COM2,"Hier ist UART2 [PA2,PA3]",LFCR);   UB_Uart_SendString(COM3,"Hier ist UART3 [PD8,PD9]",LFCR);    while(1)   { 	  // проверка, приняты ли данные на UART2 	  check=UB_Uart_ReceiveString(COM2,buf); 	  if(check==RX_READY) { 		  // Если данные были получены 		  // вернуть в Echo 		  UB_Uart_SendString(COM2,buf,LFCR); 	  }   } } 

В приложении проект CooCox и отдельная библиотека для использования в других проектах, а также программа — терминал. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.