Top.Mail.Ru

STM32 UART. Прием и передача данных по UART в STM32CubeMx.

Продолжаем последовательно настраивать все периферийные модули микроконтроллеров 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. У