пятница, 7 января 2022 г.

Прием по UART на stm32f103c8, Си и CMSIS

Освоив прием данных по UART на микроконтроллере stm32f103c8 уже можно пытаться собирать например контроллер ЧПУ станка управляемого с компьютера через USB-UART переходник, а также другие устройства управление которыми возможно при использовании такого переходника. Рассмотрим например управление трехцветным светодиодом. Для этого можно собрать схему например как на рисунке:

Рисунок 1 - Подключение RGB светодиода с общим анодом и USB-UART переходника к отладочной плате с микроконтроллером stm32f103c8

О том как сделать передачу по UART см. предыдущий урок- https://electe.blogspot.com/2022/01/uart-stm32f103c8-cmsis.html

Далее в коде. Для начала, как всегда, надо включить тактирование периферийных устройств которые будут использоваться. В данном случае это USART1 и порт A:

Пин UARTа1 RX (A10) надо настроить на вход с подтяжкой:

А пины к которым подключен светодиод можно настроить на выход с открытым стоком, если он подключен также как на схеме на рисунке 1.


Для настройки скорости используется регистр USART1-BRR:
В данный регистр заноситься число на которое делиться частота шины от которой тактируется USART чтобы получилась нужная скорость. Т.е. если например нужна скорость 9600 бод а частота шины 72 000 000 Гц (по умолчанию) то в регистр нужно занести = 72 000 000 / 9600 = 7500. Для основной настройки UARTа есть первый управляющий регистр USART1->CR1:

Для приема по UART с прерыванием нужно установить биты 2, 5 и 13 данного регистра. А также надо указать вектор прерывания. Для данной задачи основной цикл можно оставить пустым. Функция которая вызовется при возникновении прерывания от USART1 называется USART1_IRQHandler().
В эту функцию надо поместить код обработки прерывания. Чтобы отреагировать именно на прием, в эту функцию следует поместить проверку флага приема который является битом 5 статус-регистра:

После данной проверки можно принять байт данных пришедший по UART:

и выполнить с ним какие нибудь операции. Например можно включить нужный свет светодиода в зависимости от пришедшего байта данных. Полный код программы:
Видео:


Комментариев нет:

Отправить комментарий