Продолжаем последовательно настраивать все периферийные модули микроконтроллеров STM32 при помощи STM32CubeMx. Вот ссылка на все статьи курса - ссылка - а сегодня у нас на очереди инициализация модуля USART в STM32, а также прием и передача данных при помощи вышеупомянутого протокола UART. Начнем с небольшого экскурса в теоретические аспекты.
Теоретическая часть.
Обзор модуля UART.
Что такое UART в целом, и зачем он нужен думаю объяснять не надо 🙂 Так что перейдем сразу к реализации в STM32. Предлагаю сначала посмотреть, какие регистры за что отвечают, а потом уже набросать какой-нибудь проект для наглядности.
Небольшое лирическое отступление... Как вы уже догадываетесь, модуль USART в STM32, как и все остальное в этих контроллерах, имеет множество настроек и режимов. Тут тебе и обычный прием/передача и поддержка LIN (об этом протоколе как-нибудь поговорим отдельно). И если в AVR частенько приходилось реализовывать программные UART’ы, поскольку аппаратных просто не хватало, то, к примеру, в STM32F103CB их как минимум три штуки! А это уже немало. Итак, начинаем копаться в даташите.
Регистр USART_SR.
Статусный регистр. Тут содержатся флаги, отражающие текущее состояние дел, то есть текущее состояние модуля USART. Поглядим на некоторые из них поближе:
- LBD - Lin Break Detection flag. Выставляется при обнаружении брейка при использовании LIN (о том, что это такое обязательно расскажу в статье про LIN).
- TXE - Transmit data register empty. Регистр данных пуст, пора его заполнить.
- TC - Transmission complete. Передача завершена.
- RXNE - Read data register not empty. Приемный регистр не пуст, надо срочно прочитать данные.
Есть там еще 4 флага для классификации ошибок – ошибка кадра, наличие шума, ошибка переполнения и т. д.
Регистр USART_DR.
Регистр данных. Именно тут мы будем забирать ценнейшую информацию, которая к нам пришла извне, сюда же будем записывать свои данные.
Регистр USART_BRR.
Здесь настраивается скорость обмена, которую мы хотим получить.
Регистр USART_CR1.
Регистр контроля – контролирует весь процесс. Биты по порядку:
- UE - разрешение работы USART
- M - длина посылки: 0 – 8 бит данных, 1 – 9 бит данных
- Wake - будильник для USART’a – то есть метод его пробуждения
- PCE - контроль паритета – ВКЛ или ВЫКЛ
- PS - тип четности: 0 – четный, 1 – нечетный
- PEIE - разрешение прерывания при обнаружении ошибки четности
- TXEIE - прерывание от TXE
- RXNEIE - прерывание от RXNE
Ну и там еще парочка битов, разрешающих/запрещающих прием/передачу, а также бит для отправки брейка. В общем, это все есть в даташите, все наглядно, красиво и понятно. Поэтому подробно углубляться не буду, нет в этом смысла.
Регистр USART_CR2 - в этом регистре такие биты как включение/выключение режима работы по LIN, установка количества стоп-битов, настройки clock’а, установка параметров LIN брейка и некоторые другие.
Регистр USART_CR3 - а здесь биты для использования DMA и SmartCard.
Регистр USART_GTPR - биты, отвечающие за предделитель.
В общем, вот они, 7 регистров, которые контролируют весь модуль USART в STM32. У