четвер, 24 травня 2018 р.

STM32: Бібліотека для зручного надсилання інформації налагодження в порт UART

Передмова

В проектах на мікроконтролерах часто-густо потрібно десь виводити інформацію для налагодження (debug). Найпростіше і зручніше це зробити в порт UART. Тоді, коли в цьому є потреба, в певних ділянках коду, вставляємо надсилання потрібних повідомлень в порт UART, а на ПК в будь-якій термінальній програмі читаємо повідомлення, що надсилає нам мікроконтролер. Це можуть бути повідомлення про помилку, або данні телеметрії з сенсорів і датчиків, або якась службова інформація, тощо. 
Для зручного надсилання в порт UART текстової, числової інформації зручно використовувати бібліотеку "uart". За її допомоги можна надсилати як поодинокі символи, так і числа типу INT, або числа представлені в шістнадцятковому форматі HEX8, HEX16, HEX32, або ж цілий текстовий рядок, або передати цілий буфер даних. 
Всі функції бібліотеки вгледів тут. Функцію ініціалізації порту UART не перейняв, тому що я всі налаштування периферії виконую в програмі CubeMX for STM32.

CubeMX

  • Створіть новий проект, або відкрийте проект з яким вже працюєте і вам потрібна інформація налагодження в COM PORT
  • Увімкніть потрібний порт UART
  • Налаштуйте по необхідності цей порт. За замовчуванням швидкість порту 115200
  • Згенеруйте або оновіть проект, з увімкненим UART

Бібліотека UART

Скопіюйте файли бібліотеки до вашого проекту. Бібліотека містить два файли:
Файл uart.h до теки inc проекту, а файл uart.c до теки src вашого проекту.
В файлі uart.h пропишіть ім'я структури порту UART, що надав CubeMX. Наприклад, huart1, huart2, тощо. Та файл HAL драйверу відповідно до вашого мікроконтролера, наприклад, stm32f1xx_hal.h якщо використовуєте stm32f1 серії: 
#include "stm32f1xx_hal.h"
#define UART_PORT  huart1
Все інше залиште без змін.

Перейдемо до файлу main.c проекту, та підключимо бібліотеку UART:
/* USER CODE BEGIN Includes */
#include "uart.h"
/* USER CODE END Includes */

Ну і щось надрукуємо для прикладу. Рядок тексту, оголосимо змінну INT та надрукуємо її як в десятковому так і шістнадцятковому представленні:
/* USER CODE BEGIN 2 */
UART_SendStr("UART is OK!\n\r");
  int var = 12345;
  UART_SendInt(var);
  UART_SendStr("\n\r");
  UART_SendHex16(var);
  UART_SendStr("\n\r");
/* USER CODE END 2 */

Компілюємо, заливаємо і в термінальній програмі споглядаємо на результат. Звісно що порт UART мікроконтролеру має бути з'єднаний з ПК за допомоги UART to USB TTL конвертеру. Або якщо, наприклад, у вас плата розробника STM32F103RB Nucleo, то достатньо використовувати USART2 на мікроконтролері, данні будуть надсилатись в USB порт програматора ST-LINK що на борту плати. І додаткових дротів і конверторів не потрібно.

Архів з бібліотекою та джерело

2 коментарі: