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
Приклад використання:
//-------------------------------------------------------------- // Файл : main.c // Дата : 24.02.2013 // Версія : 1.0 // Автор : UB // EMail : mc-4u(@)t-online.de // Веб : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Модуль : CMSIS_BOOT, M4_CMSIS_CORE // Функція : Демонстрація бібліотеки UART // Примітка : Ці два файли повинні бути на 8MHz // "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,"Тут UART2 [PA2,PA3]",LFCR); UB_Uart_SendString(COM3,"Тут 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 і окрема бібліотека для використання в інших проектах, а також програма - термінал. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.
Прикріплені файли:
- ub_stm32f4_uart_v104_rus.rar (5 Кб)
- Demo_12_UART_rus.rar (188 Кб)
- Discovery_Terminal_UB_v106.zip (279 Кб)