STM Урок 182. CMSIS. STM32F1. USART. Приём данных



Продолжая освоение возможностей библиотеки CMSIS, немного усложним задачу по работе с шиной USART контроллера STM32F1. На данном уроке мы помимо передачи данных из контроллера в ПК попробуем также и принять данные из ПК. Причём, прерываниями и DMA мы пока также пользоваться не будем. Будем прорабатывать шину постепенно.

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

Схема с прошлого занятия у нас также не изменилась

 

 

Принимать мы данные будем также из ПК, как и в уроке 162 с использованием библиотеки LL. Мы также воспользуемся для этого программой Terminal v1.9b, а также тем макросом, который мы написали в этом уроке.

Проект был сделан из проекта прошлого урока с именем CMSIS_USART_TX и получил новое имя CMSIS_USART_RX.

Откроем наш проект в Keil и для начала в файле main.c добавим ещё парочку стандартных библиотек, так как нам придётся из строки извлекать число в символьном виде и преобразовывать его в числовой, чтобы показать затем на индикаторе, а также чтобы ответить на него другим числом компьютеру

 

 

Удалим объявление строкового массива

 

char str1[30];

 

 

Вместо него добавим целых три

 

 

Добавим функцию, которая будет одновременно принимать строку и передавать другую. Этим мы обеспечим полный дуплекс передачи данных

 

 

Код функции почти такой же, как и в уроке 162, только несколько переработан под библиотеку CMSIS.

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

 

delay_ms(2000);

Clear_7219();

 

В бесконечном цикле удалим пока весь пользовательский код и подготовим строку для передачи её в ПК. В данную строку мы включим символьное значение величины принятого счётчика из ПК, вычтенного из 1023. В самый первый раз это будет 0, так как мы ещё ничего не приняли

 

 

 

Примем строку из шины и передадим свою при помощи написанной нами функции

 

 

Извлечём из принятой строки 4 последних символа, это и будет значение счётчика ПК

 

 

Преобразуем строковое значение счётчика в числовое

 

 

Отобразим оба значения (и принятое и отправляемое) на индикаторе

 

Вот и весь код. Задержки никакие не нужны, так как всё равно ждём наполнения приёмного буфера в функции. Соберём наш код, прошьём контроллер, запустим сначала приём данных в терминальной программе с помощью кнопки Connect, а затем уже и скрипт с помощью кнопки Run. Для запуска приём данных закрывать окно со скриптом не обязательно, так как он немодальное.

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

 

 

А на светодиодном индикаторе справа значения будут наращиваться, а слева — убывать на один

 

 

Также поподробнее посмотрим обмен данных на шине с помощью логического анализатора

 

 

Данные передаются одновременно и без пауз. Также мы видим что первый байт принят раньше всех остальных, а последний переданный ушёл позже всех остальных. Надеюсь, понятно, почему. А потому, что мы сначала мы ждём наполнения приёмного буфера. В это время мы ничего не можем записывать в регистр DR, иначе данные сразу же начнут отправляться.

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

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

 

 

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

 

Исходный код

 

 

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

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

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

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

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

 

 

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

 

STM CMSIS. STM32F1. USART. Приём данных

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

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

*