STM Урок 181. CMSIS. STM32F1. USART. Передача данных



Продолжая изучать возможности библиотеки CMSIS, на данном уроке мы попытаемся поработать с помощью данной библиотеки с аппаратной реализацией шины USART (Universal synchronous asynchronous receiver transmitter) в контроллере STM32F1.

В уроке 161, работая с модулем UASART с использованием библиотеки LL, мы плотно познакомились с его аппаратной организацией в нашем контроллере, поэтому сегодня нам будет намного легче работать и с библиотекой CMSIS. Хоть при работе с библиотекой LL и не нужно писать инициализацию вручную, тем не менее мы данный процесс просмотрели и хорошенько изучили.

Также на протяжении всего курса занятий по контроллерам STM32 мы постоянно используем шину USART для реализации наших различных целей и, думаю, нам будет нет так сложно достичь и сегодняшней нашей цели.

Как видно из названия урока, работать с шиной USART мы будем только на передачу без использования прерываний и DMA.

Схема для нашего урока будет та же самая, что и в уроке 161 с единственной разницей — мы подключим и переходник и анализатор без макетной платы, так как у меня есть отладочная плата с двухсторонними штырьевыми линейками. Ножки для USART остаются те же. Также для лучшего контроля происходящего в программе процесса мы подключим светодиодный индикатор по шине SPI.

Вот так выглядит наша схема после подключения её к компьютеру

 

 

Теперь можно приступить и к проекту, который был сделан из проекта урока 175 с именем CMSIS_SPI_MASTER, а имя ему мы теперь дадим CMSIS_USART_TX.

Откроем наш проект в Keil и для начала удалим из файла main.c функцию SPI1_Init вместе с телом. Удалим также вот эти макросы

 

#define CS1_RESET() SET_BIT(GPIOA->ODR,GPIO_ODR_ODR4)

#define CS1_SET() CLEAR_BIT(GPIOA->ODR,GPIO_ODR_ODR4)

#define SPI1_ENABLE() SET_BIT(SPI1->CR1, SPI_CR1_SPE);

 

 

Подключим вот эту стандартную библиотеку

 

 

Объявим строковый массив

 

 

Из функции main() удалим вот эту переменную

 

uint16_t i, r;

 

А переменную i обнулим

 

uint16_t i=0;

 

Удалим вызов функции инициализации модуля SPI1

 

SPI1_Init();

 

Удалим его выбор

 

CS1_RESET();

 

Удалим также его старт

 

SPI1_ENABLE();

 

Из бесконечного цикла также пока всё удалим.

Выше функции main() добавим функцию инициализации модуля USART1

 

 

Теперь напишем тело данной функции.

Для начала мы включим тактирование модуля USART1

 

 

Затем настроим ножки для USART, не забыв первым делом также про тактирование порта

 

 

 

Проверив, не запущен ли модуль, произведём настройки нужных битов (а какие из них нужные, мы знаем из урока 161)

 

 

Настроим асинхронный режим

 

 

Настроим скорость 115200. Как настраивается скорость передачи данных по USART, мы также знаем

 

 

Включим модуль

 

 

Вызовем эту функцию в main()

 

 

Очистим показания индикатора

 

 

Выше функции USART1_Init добавим функцию передачи данных по USART с указанием адреса их расположения и количества

 

 

В данной функции мы отправляем очередной байт в регистр DR, дожидаясь перед этим того момента, когда буфер передачи будет пустым.

В бесконечном цикле мы будем передавать те же строки, что и в уроке 161, оканчивающиеся инкрементирующимся числом, также отображаемом на светодиодном индикаторе

 

 

Вот и весь код.

Соберём проект, прошьём контроллер.

Индикатор начнёт осчёт

 

 

Синхронно с индикатором в терминальной программе побегут строчки

 

 

Также посмотрим, как они выглядят в программе логического анализа. Как настроить данную программу для распознавания данных при передаче по шине USART, мы также знаем

 

 

Итак, данный урок нас научил пользоваться возможностями библиотеки CMSIS при программировании модуля USART микроконтроллера STM32F1. Пока мы использовали данный модуль только для передачи данных из контроллера, также мы не использовали механизм прерываний, периферию DMA, но главное начало. Всё остальное будет в следующих уроках.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

Индикатор светодиодный семиразрядный с драйвером MAX7219

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM CMSIS. STM32F1. USART. Передача данных

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*