STM32 Без HAL и SPL. Часть 2. Регистры USART.

Автор: | 18.02.2019

Всем доброго времени суток!

Сегодня я хотел бы продолжить рубрику работы с микроконтроллерами STM32 без библиотек HAL и  SPL. И в данном уроке рассмотрим регистры UART контроллера. О том как работает UART, я рассказывал здесь.  Перейдем к рассмотрению каждого из регистров микроконтроллера STM32 отвечающих за работу с данным модулем.

Первым на очереди у нас оказывается регистр статуса USART_SR. Посмотрим на его содержимое.

Каждый из битов данного регистра отражает текущий статус примо-передатчика.

Рассмотрим подробнее каждый бит данного регистра.

CTSЭтот бит показывает что произошло изменение уровня на линии CTS.

LBDДанный бит означает возникновение UART Break на линии (13 нулевых бит подряд) при оперировании UART при помощи протокола LIN.

TXEРегистр передачи данных пуст. Данный бит устанавливается автоматически, после того как содержимое регистра передачи данных, полностью перемещено в сдвиговый регистр.

TC Бит окончания передачи данных. Данный бит устанавливается автоматически по окончанию передачи данных и TXE = 1.

RXNEРегистр приемника не пуст. Данный бит устанавливается когда содержимое регистра USART_DR заполнено данными сдвигового регистра. Сбросить данный бит нужно либо вручную, либо он сбросится автоматически при взаимодействии с регистром USART_DR.

IDLEБит устанавливается при возникновении ожидания на линиях передачи. То есть данные не передаются и не принимаются.

OREДанный бит устанавливается когда случается прием данных до сброса бита RXNE. Установка данного бита означает что происходит потеря данных передаваемых по линиям.

NEДанный бит устанавливается при возникновении помех на линии.

FEБит устанавливается когда возникает ошибка при передаче данных.

PEОшибка контроля четности.

Следующим регистром является регистр USART_DR, он же регистр данных USART.

Данный регистр является виртуальным. При записи данных в данный регистр, происходит запись в регистр USART_TDR, а при чтении, считываются данные  из регистра USART_RDR.

Читайте также  COM порт Windows. SerialPort. C#.Продолжение.

DR0..DR8 — Данные биты содержат информацию принятую или отправляемую модулем USART. Так, с регистром данных разобрались, перейдем к регистру USART_BRR

Данный регистр позволяет настроить предделитель частоты тактирования модуля USART контроллера.

Представление числа в регистре происходит в виде мантиссы (4..15 биты) и порядка (0..3 биты)


Регистр USART_CR1 содержит в себе биты управления приемо-передатчиком.

UEДанный бит включает или выключает модуль UART.

MБит выбора длины посылки.

         0: Передача ведется посылками по 8 бит.

         1: Передача ведется посылками по 9 бит.

WAKEВыбор метода пробуждения модуля UART.

         0: Пробуждение по освобождению линии.

         1: Пробуждение по совпадению адресной маски.

PCEВключение или выключения режима аппаратной проверки четности. Если режим проверки четности включен, то подсчитанная контрольная сумма передается 8 или 9 битом соответственно.

         0: Проверка четности отключена.

         1: Проверка четности включена.

PSТип контроля четности. Данный бит имеет значение лишь при PCE = 1.

         0: Проверка четности.

         1: Проверка нечетности.

PEIE —  Включение или выключение прерывания при ошибке контроля четности.

         0: Прерывание выключено.

         1: Прерывание генерируется при PE = 1(USART_SR).

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

         0: Прерывание выключено.

         1: Прерывание генерируется при TXE = 1(USART_SR).

TCIEВключение или выключение прерывания по окончанию передачи данных.

         0: Прерывание не генерируется.

         1: Прерывание генерируется при TC = 1(USART_SR).

RXNIEВключение или выключения прерывания по окончанию приема байта.

         0: Прерывание не генерируется.

         1: Прерывание генерируется при ORE = 1 или RXNE = 1 (USART_SR).

IDLEIEВключение или выключение прерывания по возникновению ожидания на линиях передачи.

Читайте также  STM32 Без HAL и SPL. Часть 1. GPIO

0: Прерывание не генерируется.

         1: Прерывание генерируется при IDLE = 1 (USART_SR).

TEДанный бит включает или выключает передатчик модуля USART.

         0: Передатчик выключен.

         1: Передатчик включен.

REДанный бит включает или выключает приемник модуля USART.

         0: Приемник выключен.

         1: Приемник включен.

RWU Данный бит выбирает режим пробуждения приемника модуля.

         0: Активный режим.

         1: Спящий режим.

SBKБит передачи BREAK на линию.

         0: Ничего не делать.

         1: Передать последовательность BREAK на линию.

Следующий регистр USART_CR2. Рассмотрим каждый из его бит.

LINENВключение или выключение протокола LIN.

         0: Протокол выключен,прием и передача данных в обычно режиме.

         1: Протокол LIN включен.

STOP[1:0] — Данные два бита позволяют выбрать количество стоп-бит каждой посылки.

         00: 1 стоп бит.

         01: 0.5 стоп бит.

         10: 2 стоп бита.

         11: 1.5 стоп бита.

CLKENДанный бит позволяет включить или выключить вывод CK модуля USART. Данный вывод используется при передаче данных в синхронном режиме.

         0: Вывод отключен.

         1: Вывод включен.

CPOL —  Бит выбора полярности сигнала CK.

         0: Готовность по низкому уровню.

         1: Готовность по высокому уровню.

CPHA — Бит выбора фазы сигнала CK.

         0: Передача данных по первому переключению линии.

         1: Передача данных по второму переключению линии.

LBCLБит выбора передачи сигнала CK при передаче последнего бита.

         0: Не передавать.

         1: Передавать.

LBDIEБит включения или выключения прерывания передачи формата LIN.

         0:Прерывание не генерируется

         1: Прерывание генерируется при LBD = 1 (USART_SR)

LBDLДанный бит позволяет выбрать длину посылки при которой произойдет установка флага LBD = 1(USART_SR).

Читайте также  STM32.Bluetooth и Android.

         0: При 10 переданных бит.

         1: При 11 переданных бит.

ADD[3:0] — Данные 4 бита позволяют присвоить адрес модулю UART. Используется при мультипроцессорной передаче, для пробуждения приемника по совпадению адреса в спящем режиме.

Перейдем к следующему регистру USART_CR3.

Аналогично предыдущим регистрам, остановимся на каждом бите данного регистра.

CTSIEБит включения прерывания по изменению линии CTS.

         0: Прерывание не генерируется.

         1: Прерывание генерируется при CTS = 1 (USART_SR).

CTSE —  Данный бит позволяет включить режим аппаратного управления передачей данных. То есть, при установке данного бита, данные будут передаваться только тогда, когда вывод CTS будет установлен в состояние логического 0.

RTSEБит включения сигнала RTS для управления передачи данных.

         0: RTS выключен.

         1: RTS включен, включено соответствующее прерывание.

DMAT Включение DMA передатчика.

         0: Выключен.

         1: Включен.

DMARВключение DMA приемника.

         0: Выключен.

         1: Включен.

SCENВключение режима SmartCard.

      0: Выключен.

         1: Включен.

NACKВключение контроля четности режима SmartCard.

      0: Выключен.

         1: Включен.

HDSELВыбор режима полудуплексного обмена, при передаче в однопроводном режиме.

         0: Выключен.

         1: Включен режим полудуплексного обмена.

IRLPВыбор режима работы IrDA.

         0: Нормальный режим.

         1: Режим пониженного энергопотребления.

IRENБит включения или выключения IrDA.

         0: Выключен.

         1: Включен.

EIE — Бит разрешения прерывания по возникновению ошибки.

0: Прерывание не генерируется

1: Прерывание генерируется при FE=1 NE=1 или ORE=1 регистра USART_SR.

Последний регистр USART_GTPR содержит в себе биты настройки предделителя IrDA и настройки режима SmartCard.

В следующей части,посчитаем значение USART_BRR и настроим USART на реальном микроконтроллере STM32F103C8T6.

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

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

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