Программирование ARM STM32F4xx: порты UART и USART Tue, November 05 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


STM32F4xx: порты UART и USART Печать
Добавил(а) microsin   

Универсальный синхронный/асинхронный трансивер (universal synchronous asynchronous receiver transmitter, USART) предоставляет гибкий способ полнодуплексного обмена с внешним оборудованием, что требуют промышленные стандарты последовательной асинхронной передачи данных в формате NRZ. USART можно настроить на скорость обмена в широком диапазоне благодаря использования дробного генератора скорости (fractional baud rate generator).

Поддерживается однонаправленный обмен в любую сторону и полудуплексный обмен в обе стороны по одному проводу (half-duplex single wire). Также поддерживаются протоколы LIN (local interconnection network), Smartcard Protocol и IrDA (infrared data association) спецификаций SIR ENDEC и операции модема (CTS/RTS). Это позволяет реализовать мультипроцессорный обмен данными. Высокая скорость обмена поддерживается конфигурацией DMA для нескольких буферов.

• Полный дуплекс, асинхронный обмен данными.

• Стандартный формат NRZ (Mark/Space).

• Конфигурируемый метод передискретизации (oversampling) на 16 или на 8 для гибкого компромисса между скоростью и допуском на частоту тактов.

• Дробный генератор скорости (Fractional baud rate generator) реализует общую программируемую скорость передачи и приема, максимальная скорость зависит от максимальной частоты APB (см. даташит).

• Программируемая длина слова данных (8 или 9 бит).

• Конфигурируется количество stop-битов - поддерживается 1 или 2 стоп-бита.

• Возможность отправки LIN Master Synchronous Break и детектирования LIN slave break. Генерация 13-битного break и детектирование break 10/11 бит, когда USART аппаратно сконфигурирован для LIN.

• Тактовый выход передатчика для синхронной передачи.

• Кодер/декодер IrDA SIR. Для нормального режима поддерживается длительность 3/16 бит.

• Возможность эмуляции смарт-карты:

   – Интерфейс Smartcard поддерживает асинхронный протокол смарт-карт, как это определено в стандартах ISO 7816-3.
   – Для работы Smartcard конфигурируются 0.5, 1.5 stop-бит.

• Полудуплексный обмен по одному сигнальному проводу (Single-wire half-duplex).

• Конфигурируемый multibuffer-обмен для DMA. Байты передачи и приема помещаются в зарезервированные буферы SRAM.

• Отдельные биты разрешения для передатчика и приемника.

• Флаги детектирования обмена:

– Буфер приема заполнен
– Буфер передачи пуст
– Флаги завершения передачи

• Управление контролем четности:

– Передача parity-бита
– Проверка четности в принятом байте

• 4 флага детектирования ошибки:

– Overrun error (ошибка переполнения)
– Noise detection (детектирование шума)
– Frame error (ошибка фрейма)
– Parity error (ошибка четности)

• 10 источников прерывания с флагами:

– Изменение CTS
– Детектирование LIN break
– Пуст регистр данных передачи
– Завершение передачи
– Регистр данных приема заполнен
– Принят сигнал ожидания линии (idle line)
– Ошибка переполнения (Overrun error)
– Ошибка фрейма (Framing error)
– Ошибка из-за шума (Noise error)
– Ошибка четности (Parity error)

• Мультипроцессорный обмен - вход в режим молчания (mute mode), если не было совпадения адреса.

• Пробуждение из режима молчания (Wake up from mute mode) - из-за детектирования idle line или address mark.

• Два режима пробуждения приемника: бит адреса (MSB, 9-й бит), сигнал idle line.

[Функциональное описание USART]

Интерфейс обычно подключается к внешним системам тремя ножками (см. рис. 296). Любой двунаправленный обмен USART требует как минимум двух сигнальных выводов: входные принимаемые данные (Receive Data In, RX) и выходные передаваемые данные (Transmit Data Out, TX):

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

TX: выход передаваемых данных. Когда передатчик запрещен, ножка выхода возвратит свою конфигурацию порта ввода/вывода (GPIO). Когда передатчик разрешен и ничего не передается, уровень выхода ножки TX находится в лог. 1. В режимах single-wire и smartcard, этот вывод I/O используется и для передачи, и для приема данных (на уровне USART данные затем принимаются на SW_RX).

Через эти выводы последовательные данные принимаются и передаются в нормальном режиме USART как фреймы. В этом процессе используется следующее:

• Состояние ожидания линии (Idle Line) до передачи или приема.
• Start-бит.
• Слово данных (8 или 9 бит), самый младший бит слова (LSB) идет первым.
• 0.5,1, 1.5, 2 Stop-стоп-бит, показывающих завершение фрейма.
• Используется дробный генератор скорости - с 12-разрядной мантиссой и 4-битной дробной частью.
• Регистр статуса (USART_SR).
• Регистр данных (USART_DR).
• Регистр генератора скорости (USART_BRR) с 12-разрядной мантиссой и 4-битной дробной частью.
• Регистр защитного времени, Guardtime Register (USART_GTPR) в случае использования режима Smartcard.

Описание регистров и их бит см. далее во врезках раздела "Регистры USART".

Для работы в синхронном режиме требуется дополнительный вывод тактов:

• CK: выход тактов передатчика. На этот вывод выдаются такты данных для синхронной передачи, соответствующей режиму SPI master (нет тактовых импульсов на битах start и stop, и программно выбираемая опция отправки тактового импульса на последнем бите данных). Параллельно и синхронно могут приниматься данные через ножку RX. Это можно использовать для управления внешними периферийными устройствами, у которых есть регистры сдвига (например драйверы LCD). Фаза и полярность тактов выбирается программно. В режиме smartcard CK может предоставлять такты для смарт-карты.

В режиме аппаратного управления потоком требуются еще 2 вывода:

• CTS: сигнал Clear To Send, блокирующий передачу данных по окончании текущей передачи (когда CTS = 1).

• RTS: сигнал Request To Send, показывающий, что USART готов принимать данные (когда RTS = 0).

STM32F4xx USART block diagram fig296

Рис. 296. Блок-схема USART.

Символ USART. Для передачи можно выбрать длину слова 8 или 9 бит путем программирования бита M в регистре USART_CR1 (см. рис. 297).

Ножка TX находится в лог. 0, когда передается start-бит, и в лог. 1, когда передается stop-бит.

Idle. Символ Idle интерпретируется как фрейм (идущий после start-бита), где все биты равны 1 (все биты данных в лог. 1, это состояние сохраняется и во время передачи stop-битов).

Break. Символ Break интерпретируется, когда принимаются все 0 в течение всего периода фрейма. По окончании данных фрейма передатчик вставляет 1 или 2 stop-бита (лог. 1), чтобы подтвердить start-бит.

Передача и прием управляются общим генератором скорости (baud rate generator). Такты для передатчика и приемника генерируются, когда установлен соответствующий бит разрешения.

STM32F4xx USART word length programming fig297

Рис. 297. Программирование длины слова (фрейма).

Передатчик может отправлять слова данных по 8 или 9 бит, в зависимости от состояния бита M. Когда установлен бит разрешения передачи (transmit enable, TE), данные из регистра сдвига передачи выводится на вывод TX, и соответствующие тактовые импульсы на вывод CK.

Передача символа. Во время передачи USART данные выдвигаются наружу на вывод TX, младший бит (LSB) идет первым. В этом режиме регистр USART_DR состоит из буфера (TDR) между внутренней шиной и регистром сдвига передачи (см. рис. 296).

Каждому символу предшествует start-бит с лог. 0 в течение длительности одного бита. Символ завершается конфигурируемым количеством stop-бит. Поддерживаются следующие варианты выбора stop-битов: 0.5, 1, 1.5 и 2 stop-бита.

Примечание: бит TE не должен сбрасываться во время передачи данных. Сброс бита TE во время передачи повредит данные на выводе TX, потому что внутренние счетчики генератора скорости остановятся, и текущие передаваемые данные будут потеряны. После разрешения бита TE будет отправлен фрейм idle.

Конфигурация stop-битов. Количество передаваемых с каждым символом stop-битов может быть запрограммировано в регистре управления 2 (USART_CR2), битами 13:12.

• 1 stop-бит: это значение по умолчанию для количества stop-битов.
• 2 stop-бита: это значение будет поддерживаться в режимах обычного USART, single-wire и режиме модема.
• 0.5 stop-бита: для использования при приеме данных в режиме Smartcard.
• 1.5 stop-бита: используется при передаче и приеме данных в режиме Smartcard.

Фрейм idle также будет включать в себя и stop-биты.

Передача break будет состоять из 10 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 0) и 11 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 1). Нельзя передавать длинные символы break (когда длительность нулей больше 10/11 бит).

STM32F4xx USART configurable stop bits fig298

Рис. 298. Конфигурируемые stop-биты.

Процедура программирования передатчика:

1. Разрешите USART записью в 1 бита UE регистра USART_CR1.
2. Запрограммируйте бит M в регистре USART_CR1, чтобы определить длину слова данных.
3. Запрограммируйте количество stop-бит в регистре USART_CR2.
4. Выберите разрешение DMA передачи (DMAT) в регистре USART_CR3, если имеют место коммуникации с несколькими буферами (Multibuffer Communication). Сконфигурируйте регистр DMA, как указано в описании multibuffer communication.
5. Выберите желаемую скорость (baud rate), используя регистр USART_BRR.
6. Установите бит TE в USART_CR1, чтобы отправить idle frame в качестве первой передачи.
7. Запишите данные для отправки в регистр USART_DR (это очистит бит TXE). В случае использования одиночного буфера повторяйте эту операцию для каждого передаваемого символа.
8. После записи последних данные в регистр USART_DR подождите, когда TC станет равным 1. Это покажет, что была завершена передача последнего фрейма. Например, это требуется, когда USART запрещается или вводится в режим Halt, чтобы избежать повреждения последней передачи.

Однобайтный обмен. Бит TXE всегда очищается путем записи в регистр данных. TXE устанавливается аппаратно, и это показывает:

• Данные были перемещены из TDR в регистр сдвига, и началась передача данных.
• Регистр TDR пуст.
• Можно записать следующие данные в регистр USART_DR без риска перезаписи предыдущих данных.

Этот флаг генерирует прерывание, если установлен бит TXEIE.

Когда происходит передача, инструкция записи в регистр USART_DR сохраняет данные в регистр TDR, и эти данные оттуда затем копируются в регистр сдвига, когда закончится текущая передача.

Когда передача не осуществляется, инструкция записи в регистр USART_DR сразу помещает данные в регистр сдвига, начинается передача данных, и немедленно установится бит TXE.

Если передается фрейм (после stop-бита), и установился бит TXE, бит TC переходит в 1. Будет сгенерировано прерывание, если установлен бит TCIE в регистре USART_CR1.

После записи последних данных в регистр USART_DR важно подождать момента, когда TC=1 перед запретом USART, или когда микроконтроллер переводится в режим пониженного энергопотребления low-power mode (см. рис. 299, где показано поведение TC/TXE при передаче).

STM32F4xx USART TC TXE behavior when transmitting fig299

Рис. 299. Как ведут себя при передаче биты TC и TXE.

Бит TC очищается следующими программными операциями:

1. Чтение из регистра USART_SR.
2. Запись в регистр USART_DR.

Символ Break. Установка бита SBK передает символ break (сигнал остановки потока данных). Длина фрейма break (как и длина фрейма всех передаваемых символов) зависит от бита M (см. рис. 297).

Если установлен в 1 бит SBK, символ break посылается через вывод TX после текущей передачи символа. Этот бит сбросится аппаратно, когда передача символа break завершится (во время stop-бита символа break). USART вставляет бит лог. 1 по окончанию последнего фрейма break, чтобы гарантировать распознавание start-бита следующего фрейма.

Примечание: если программа сбросит бит SBK перед началом передачи break, то символ break не будет передан. Для двух следующих друг за другом break бит SBK должен быть установлен после stop-бита предыдущего break.

Символ Idle. Установка бита TE побуждает USART отправить фрейм idle перед первым фреймом данных.

USART может принимать слова данных разрядностью 8 или 9 бит, в зависимости от бита M в регистре USART_CR1.

Детектирование start-бита. Последовательность детектирования старт-бита одинаковая, когда делается передискретизация сигнала (oversampling) с кратностью 16 или 8.

В USART start-бит детектируется, когда распознана определенная последовательность выборок сигнала: 1 1 1 0 X 0 X 0 X 0 0 0 0.

STM32F4xx USART start bit detection when oversampling by 16 or 8 fig300

Рис. 300. Детектирование start-бита при передискретизации 16 или 8.

Примечание: если последовательность не завершена, то детектирование start-бита прекращается, и приемник возвращается в состояние ожидания idle state (никакой флаг не установится), когда он ожидает спада уровня сигнала.

Подтверждено появление start-бита (установился флаг RXNE, генерируется прерывание, если RXNEIE=1), если 3 выборки бита равны 0 (первая выборка на 3-ем, 5-ом и 7-ом битах находит 3 бита в лог. 0, и вторая выборка на 8-ом, 9-ом и 10-ом битах также находит 3 бита в лог. 0).

Start-бит считается достоверным (установится флаг RXNE, генерируется прерывание, если RXNEIE=1), однако установится бит NE (noise error, флаг шума), если для обоих выборок как минимум 2 из 3 выборок бит это 0 (выборка на 3-ем, 5-ом и 7-ом битах, и выборка на 8-ом, 9-ом и 10-ом битах). Если условие не выполняется, детектирование старта обрывается, и приемник возвращается в состояние ожидания idle state (никакой флаг не установится).

Если для одной из выборок (выборка на 3, 5 и 7 битах, или выборка на 8, 9 и 10 битах), 2 из 3 битов найдены в 0, то start-бит подтверждается, но установится бит шума NE.

Прием символа. На приеме данные вдвигаются в вывод RX, начиная с бита LSB. В этом режиме регистр USART_DR состоит из буфера (RDR) между внутренней шиной и регистром сдвига приема.

Процедура программирования приемника:

1. Разрешите USART записью в 1 бита UE регистра USART_CR1.
2. Запрограммируйте бит M в регистре USART_CR1, чтобы определить длину слова данных.
3. Запрограммируйте количество stop-бит в регистре USART_CR2.
4. Выберите разрешение DMA приема (DMAR) в регистре USART_CR3, если имеют место коммуникации с несколькими буферами (Multibuffer Communication). Сконфигурируйте регистр DMA, как указано в описании multibuffer communication.
5. Выберите желаемую скорость (baud rate), используя регистр USART_BRR.
6. Установите бит RE в регистре USART_CR1. Это разрешит приемник, который начнет искать start-бит.

Когда принят символ:

• Установится бит RXNE. Это показывает, что содержимое регистра сдвига передано в RDR. Другими словами, данные были приняты, и могут быть прочитаны (а также связанные с ним флаги ошибок).
• Генерируется прерывание, если был установлен бит RXNEIE.
• Могут быть установлены флаги ошибки, если имели место (были детектированы) события ошибки фрейма (frame error), шума (noise error) или переполнения (overrun error).
• В режиме multibuffer бит RXNE устанавливается после каждого принятого байта, и очищается чтением DMA в регистре данных.
• В режиме одиночного буфера очистка бита RXNE осуществляется программно, путем чтения регистра USART_DR. Флаг RXNE также можно очистить записью в него нуля. Бит RXNE должен быть очищен перед окончанием приема следующего символа, чтобы избежать ошибки переполнения (overrun error).

Примечание: бит RE не должен сбрасываться при приеме данных. Если бит RE запрещен во время приема, то прием текущего слова данных будет оборван.

Символ Break. Когда был принят символ break, USART обрабатывает это как ошибку фрейма (framing error).

Символ Idle. Когда был детектирован фрейм ожидания (idle frame), то происходит та же процедура, что и при приеме символа, плюс произойдет прерывание, если установлен бит IDLEIE.

Ошибка переполнения. Overrun error происходит, когда принят новый символ, но флаг RXNE не был очищен. Данные не могут быть перемещены из регистра сдвига в регистр RDR, пока не будет очищен бит RXNE.

Флаг RXNE устанавливается после каждого принятого слова данных. Ошибка переполнения происходит, если флаг RXNE установлен, когда приняты следующие данные, или когда не был обработан предыдущий запрос DMA. Когда произойдет overrun error:

• Установится бит ORE.
• Текущее содержимое RDR не теряется. Предыдущие данные доступны, когда произойдет чтение регистра USART_DR.
• Регистр сдвига будет перезаписан. В этот момент любые принятые при переполнении данные будут потеряны.
• Сгенерируется прерывание, если либо установлен бит RXNEIE, либо установлены оба бита EIE и DMAR.
• Бит ORE сбрасывается чтением регистра USART_SR, за которым следует операция чтения регистра USART_DR.

Примечание: бит ORE, когда установлен, показывает, что как минимум один элемент данных на приеме был потерян. Есть 2 возможности:

• Если RXNE=1, то последние достоверные принятые данные сохранены в регистре приема RDR, и они могут быть прочитаны.
• Если RXNE=0, то это значит, что последние достоверные данные уже были прочитаны, и поэтому в RDR нечего считывать. Этот случай может произойти, когда последние достоверные данные прочитаны из RDR в тот момент, как новые (и уже потерянные) данные были приняты. Это также может произойти, когда новые данные приняты в последовательности чтения (между доступом на чтение регистра USART_SR и доступом на чтение регистра USART_DR).

Выбор правильного метода передискретизации. Приемник использует разные, конфигурируемые пользователем техники передискретизации (кроме синхронного режима) для восстановления данных, путем отделения друг от друга достоверных приходящих данных и шума.

Метод передискретизации может быть выбран программированием бита OVER8 в регистре USART_CR1, и передискретизация может быть 16 или 8 кратная к тактам скорости (см. рис. 301 и 302).

В зависимости от приложения:

• Выберите передискретизацию на 8 (OVER8=1), чтобы достичь увеличенной скорости (до fPCLK/8). В этом случае максимальный допуск на девиацию тактов для приемника снижается (см. далее секцию "Допуск ухода тактовой частоты для приемника USART").
• Выберите передискретизацию на 16 (OVER8=0), чтобы увеличить допуск приемника к девиации тактов. В этом случае максимальная скорость ограничена fPCLK/16.

Программирование бита ONEBIT в регистре USART_CR3 выбирает метод, используемый для оценки логического уровня сигнала. Есть 2 опции:

• Мажоритарная выборка из 3 образцов сигнала, взятых по центру принимаемого бита. В этом случае, когда 3 эти выборки не одинаковые, установится бит NF.
• Одна выборка в центре принимаемого бита.

В зависимости от приложения:

– Выберите метод мажоритарности из 3 выборок (ONEBIT=0) когда работа происходит в зашумленном окружении, и отбрасывайте данные, когда был определен шум (см. таблицу 133), потому что это показывает, что во время выборки произошел паразитный выброс помехи.
– Выберите метод одиночной выборки (ONEBIT=1) когда на линии чистый сигнал, чтобы увеличить допуск на девиацию тактов приемника (см. далее секцию "Допуск ухода тактовой частоты для приемника USART"). В этом случае бит NF никогда не установится.

Когда во фрейме был детектирован шум:

• Бит NF установится по фронту нарастания бита RXNE.
• Неправильные данные переместятся из регистра сдвига в регистр USART_DR.
• Не будет сгенерировано прерывание в случае обмена по одному байту. Однако этот бит установится одновременно с битом RXNE, который сам по себе генерирует прерывание. В случае multibuffer-обмена прерывание будет выдано, если установлен бит EIE в регистре USART_CR3.

Бит NF сбросится операцией чтения регистра USART_SR, за которой идет операция чтения регистра USART_DR.

Примечание: передискретизация на 8 недоступна в режимах Smartcard, IrDA и LIN. В этих режимах бит OVER8 аппаратно сбрасывается в 0.

STM32F4xx USART data sampling when oversampling by 16 fig301

Рис. 301. Выборка данных при передискретизации 16.

STM32F4xx USART data sampling when oversampling by 8 fig302

Рис. 302. Выборка данных при передискретизации 8.

Таблица 133. Детектирование шума для считываемых данных.

Оцифр. значение Статус NE Принятое значение бита
000 0 0
001 1 0
010 1 0
011 1 1
100 1 0
101 1 1
110 1 1
111 0 1

Ошибка фрейма. Framing error детектируется, когда не был распознан stop-бит во время приема в ожидаемом промежутке времени - либо из-за рассинхронизации, либо из-за чрезмерного шума.

Когда детектирована ошибка фрейма:

• Бит FE устанавливается аппаратно.
• Неправильные данные передаются из регистра сдвига в регистр USART_DR.
• В случае однобайтового обмена никакое прерывание не генерируется. Однако этот бит устанавливается одновременно с битом RXNE, который сам по себе генерирует прерывание. В случае многобайтной коммуникации будет выдано прерывание, если установлен бит EIE в регистре USART_CR3.

Бит FE сбрасывается чтением регистра USART_SR, за которым идет операция чтения USART_DR.

Конфигурируемые stop-биты во время приема. Количество принимаемых stop-бит можно конфигурировать битами USART_CR2. Это может быть 1 или 2 бита в нормальном режиме, и 0.5 или 1.5 в режиме Smartcard.

0.5 stop-бита (прием в режиме Smartcard): для этого режима не делаются выборки. Как следствие, при выборе 0,5 стоп-бита не может быть обнаружена ошибка поврежденного фрейма, и сигнал break не детектируется.

1 stop-бит: анализ сигнала для 1 stop-бита осуществляется на 8-ой, 9-ой и 10-ой выборках.

1.5 stop-бита (режим Smartcard): когда идет передача в режиме smartcard, устройство должно проверить, какие данные отправляются в настоящий момент. Таким образом, блок приемника должен быть разрешен (бит RE=1 в USART_CR1 в регистре), и stop-бит проверяется на наличие ошибки четности на смарт-карте. Если было событие ошибки четности, то смарт-карта подтягивает сигнал данных в лог. 0 во время выборки (сигнал NACK), который опознается как ошибка фрейма. Затем установится флаг FE вместе с RXNE по окончанию 1.5 stop-бита. Анализ уровня для 1.5 stop-бита осуществляется на 16-ой, 17-ой и 18-ой выборках (1 период скорости после начала stop-бита). Для 1.5 stop-бита может выполнена декомпозиция на 2 части: одна из 0.5 периода скорости, когда ничего не происходит, за которой идет время 1 нормального stop-бита, в течение которого посередине идет анализ сигнала. См. секцию 30.3.11: Smartcard даташита [1].

2 stop-бита: анализ для 2 стоп-бит осуществляется на 8-ой, 9-ой и 10-ой выборках первого стоп-бита. Если была определена ошибка фрейма во время первого стоп-бита, установится флаг ошибки фрейма. Второй стоп-бит не проверяется на предмет ошибки фрейма. Установится флаг RXNE по окончанию первого stop-бита.

Дробный генератор скорости. Скорость обмена (baud rate) для приемника и передатчика (обоих сигналов RX и TX) устанавливается в одинаковое значение, программируемое коэффициентами Mantissa и Fraction делителя USARTDIV.

Формула 1. скорость для стандартного USART (включая режим SPI):

                       fCK
Tx/Rx baud = --------------------------
             8 x (2 – OVER8) x USARTDIV

Формула 2. скорость для режимов Smartcard, LIN и IrDA:

                  fCK
Tx/Rx baud = -------------
             16 x USARTDIV

USARTDIV это число с фиксированной запятой без знака, закодированное в регистре USART_BRR.

• Когда OVER8=0, дробная часть кодируется 4 битами, и программируется битами DIV_fraction[3:0] регистра USART_BRR.
• Когда OVER8=1, дробная часть кодируется 3 битами, и программируется битами DIV_fraction[2:0] регистра USART_BRR, и бит DIV_fraction[3] должен сохраняться сброшенным в 0.

Примечание: счетчики скорости обновляются новым значением в регистрах скорости после операции записи в USART_BRR. Следовательно, регистра скорости не должно изменяться во время активного обмена.

[Пример 1]

Если DIV_Mantissa = 0d27 и DIV_Fraction = 0d12 (USART_BRR = 0x1BC), тогда
Mantissa (USARTDIV) = 0d27
Fraction (USARTDIV) = 12/16 = 0d0.75
Therefore USARTDIV = 0d27.75

[Пример 2]

Для программирования USARTDIV = 0d25.62 получается:

DIV_Fraction = 16*0d0.62 = 0d9.92
Ближайшее реальное число 0d10 = 0xA
DIV_Mantissa = mantissa (0d25.620) = 0d25 = 0x19
Тогда USART_BRR = 0x19A следовательно USARTDIV = 0d25.625

[Пример 3]

Для программирования USARTDIV = 0d50.99 получается:

DIV_Fraction = 16*0d0.99 = 0d15.84
Ближайшее реальное число 0d16 = 0x10 => переполнение DIV_frac[3:0] => должен быть добавлен перенос к мантиссе.

DIV_Mantissa = mantissa (0d50.990 + carry) = 0d51 = 0x33
Тогда USART_BRR = 0x330 hence USARTDIV = 0d51.000

[Пример 1]

Если DIV_Mantissa = 0x27 и DIV_Fraction[2:0]= 0d6 (USART_BRR = 0x1B6), тогда
Mantissa (USARTDIV) = 0d27
Fraction (USARTDIV) = 6/8 = 0d0.75
Отсюда USARTDIV = 0d27.75.

[Пример 2]

Для программирования USARTDIV = 0d25.62. Это приведет к следующему:

DIV_Fraction = 8*0d0.62 = 0d4.96
Ближайшее реальное число 0d5 = 0x5
DIV_Mantissa = mantissa (0d25.620) = 0d25 = 0x19
Тогда USART_BRR = 0x195 => USARTDIV = 0d25.625.

[Пример 3]

Для программирования USARTDIV = 0d50.99. Это приведет к следующему:

DIV_Fraction = 8*0d0.99 = 0d7.92
Ближайшее реальное число 0d8 = 0x8 => переполнение DIV_frac[2:0] => к мантиссе должен быть добавлен перенос.

DIV_Mantissa = mantissa (0d50.990 + перенос) = 0d51 = 0x33.
Тогда USART_BRR = 0x0330 => USARTDIV = 0d51.000.

В таблицах 134 .. 143 даташита [1] приведены рассчитанные практические погрешности заданных стандартных скоростей для различных условий (частоты шины PCLK, варианты передискретизации).

Допуск ухода тактовой частоты для приемника USART. Асинхронный приемник USART корректно работает только если общая девиация тактовой частоты системы меньше, чем допуск приемника USART. Причины, которые способствуют общему отклонению:

• DTRA: девиация из-за ошибки передатчика (что также включает девиацию локального тактового генератора передатчика).
• DQUANT: ошибка квантования скорости приемника.
• DREC: девиация частоты локального генератора тактов приемника.
• DTCL: девиация из-за линии передачи (обычно из-за того, что передатчики могут давать несимметричные перепады 0 -> 1 по сравнению с перепадами 1 -> 0)

DTRA + DQUANT + DREC + DTCL < допуск приемника USART

Допуск приемника USART для правильного приема данных равен максимально допустимой девиации и зависит от следующих выбранных параметров:

• Длина фрейма символа 10 или 11 бит, что определяется битом M в регистре USART_CR1.
• Передискретизация 8 или 16, что определяется битом OVER8 в регистре USART_CR1.
• Используется или нет дробная установка скорости.
• Используются 1 или 3 бита для оцифровки данных, в зависимости от бита ONEBIT регистра USART_CR3.

Таблица 144. Допуск приемника USART, когда DIV fraction = 0.

Бит M
OVER8 = 0 OVER8 = 1
ONEBIT = 0 ONEBIT = 1 ONEBIT = 0 ONEBIT = 1
0 3.75% 4.375% 2.50% 3.75%
1 3.41% 3.97% 2.27% 3.41%

Таблица 145. Допуск приемника USART, когда DIV fraction отличается от 0.

Бит M
OVER8 = 0 OVER8 = 1
ONEBIT = 0 ONEBIT = 1 ONEBIT = 0 ONEBIT = 1
0 3.33% 3.88% 2% 3%
1 3.03% 3.53% 1.82% 2.73%

Примечание: информация, указанная в таблицах 144 и 145, может незначительно отличаться в специальном случае, когда принимаемые фреймы точно 10-битные при M=0 (11-битные при M=1).

Есть возможность выполнять многопроцессорный обмен через USART (несколько USART, объединенных в сеть). Например, один USART может быть главный (master), его выход TX подключается ко входу RX других USART. Другие USART работают как подчиненные (slave), их соответствующие выходы логически объединены по И (AND), и все вместе подключены ко входу RX устройства master.

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

Не адресованные устройства могут быть помещены в режим молчания (mute mode) с помощью соответствующей функции (muting). В режиме молчания:

• Никакой из битов статуса приема не может быть установлен.
• Все прерывания приема запрещены.
• Бит RWU в регистре USART_CR1 установлен в 1. RWU может управляться автоматически, аппаратно, или может быть записан программой в определенных ситуациях.

USART может либо войти в mute mode, либо выйти из mute mode, используя один из двух методов, в зависимости от бита WAKE в регистре USART_CR1:

• Детектирование ожидания линии (Idle Line), если сбо бит WAKE.
• Детектирование сигнала метки адреса (Address Mark), если установлен бит WAKE.

Детектирование Idle Line (WAKE=0). USART войдет в режим молчания, когда в бит RWU записана 1. Он проснется, когда будет детектирован фрейм Idle. Тогда бит RWU очистится программно, но бит IDLE в регистре USART_SR не установится. Бит RWU также можно записать в 0 программно.

Пример поведения в режиме молчания с использованием детектирования Idle линии показан на рис. 303.

STM32F4xx USART Mute mode using Idle line detection fig303

Рис. 303. Режим Mute с использованием детектирования состояния ожидания (Idle) линии.

Детектирование метки адреса (WAKE=1). В этом режиме байты распознаются как адреса, если старший бит (MSB) равен 1, иначе они считаются данными. В байте адреса адрес целевого приемника помещается в 4 младших бита (LSB). Это 4-битное слово сравнивается приемником со своим собственным адресом, который запрограммирован в биты ADD регистра USART_CR2.

USART входит в режим молчания, когда принят символ адреса, который не соотвветствует запрограммированному адресу. В этом случае бит RWU установится аппаратно. Для этого байта адреса флаг RXNE не установится, и не будет сгенерировано ни прерывание, ни запрос передачи DMA, поскольку USART перейдет в режим молчания.

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

Бит RWU также может быть записан в 0 или 1, когда буфер приемника не содержит данных (RXNE=0 в регистре USART_SR). Иначе попытка записи будет проигнорирована.

Пример поведения в режиме молчания с использованием детектирования метки адреса показан на рис. 304.

STM32F4xx USART Mute mode using address mark detection fig304

Рис. 304. Режим Mute с использованием детектирования метки адреса.

Проверка четности бит (генерация parity-бита при передаче и проверка четности на приеме) могут быть разрешены установкой бита PCE (Parity Control Enable) в регистре USART_CR1. В зависимости от длины фрейма, определяемой битом M, возможные форматы фрейма USART перечислены в таблице 146. Вид проверки на четность выбирается битом PS (Parity Select) регистра USART_CR1.

Таблица 146. Форматы фрейма.

Бит M Бит PCE Фрейм USART(1)
0 0 | SB | 8 бит данных | STB |
0 1 | SB | 7 бит данных | PB | STB |
1 0 | SB | 9 бит данных | STB |
1 1 | SB | 8 бит данных PB | STB |

Примечание (1): легенда следующая: SB старт-бит, STB стоп-бит, PB: parity-бит.

Проверка на четность. Parity-бит вычисляется так, чтобы получить четную сумму всех единичек во фрейме из 7 или 8 бит (в зависимости от значения бита M) и parity-бита.

Например: data=00110101; здесь установлено 4 бита, поэтому бит четности будет 0, если выбрана проверка на четность (бит PS в USART_CR1 равен 0).

Проверка на нечетность. Здесь все наоборот - parity-бит вычисляется так, чтобы получить нечетную сумму.

Например: data=00110101; установлено 4 бита => бит четности будет 1, если выбрана проверка на нечетность (бит PS в USART_CR1 равен 1).

Проверка четности на приеме. Если проверка на четность/нечетность показала ошибку в данных, то в регистре USART_SR установится флаг PE (Parity Error), и сгенерируется прерывание, если усnановлен бит PEIE (Parity Error Interrupt Enable) в регистре USART_CR1. Флаг PE очистится последовательностью действий в программе (чтение из регистра статуса, за которым идет доступ на чтение или запись регистра USART_DR).

Примечание: в случае пробуждения по метке адреса (wakeup address mark): бит MSB учитывается для идентификации адреса, но не бит четности. И приемник не проверяет четность данных адреса (PE не установится в случае ошибки четности).

Генерация бита parity при передаче. Если в регистре USART_CR1 установлен бит PCE, то бит MSB данных, записанных в регистр данных, передается, но он изменяется parity-битом (для четности количества единичек в данных, если PS=0, или для нечетности количества единичек, если PS=1).

Примечание: подпрограмма, которая обслуживает передачу, может активировать последовательность действий, которая очистит флаг PE (чтение из регистра статуса USART, за которым идет операция чтения или записи над регистром данных USART). Когда работа осуществляется в режиме полудуплекса, в зависимости от программы, это может привести к тому, что флаг PE будет неожиданно очищен.

Режим LIN выбирается установкой бита LINEN в регистре USART_CR2. В режиме LIN должны держаться сброшенными следующие биты:

• STOP[1:0] и CLKEN в регистре USART_CR2.
• SCEN, HDSEL и IREN в регистре USART_CR3.

Передача LIN. Та же процедура, которая была описана выше во врезке "Передатчик", применима к передаче LIN Master, которая работает так же, как и обычная передача USART, со следующими отличиями:

• Бит M очищается, чтобы сконфигурировать длину слова 8 бит.
• Останавливается бит LINEN для входа в режим LIN. В этом случае установка бита SBK (Send BReak) отправит 13 нулевых бит в качестве символа break. После этого будет отправлен бит 1, чтобы было возможно детектировать следующий start.

Прием LIN. Схема детектирования break реализована на интерфейсе USART, но её поведение в режиме LIN не зависит от обычного приемника USART. Break может быть детектирован независимо от того, где он появился - в состоянии ожидания (Idle) или во время фрейма.

Когда приемник разрешен (RE=1 in USART_CR1), схема опрашивает вход RX в ожидании сигнала start. Метод детектирования бит сигнала start такой же, как используется при анализе символов break или данных. После того, как был детектирован бит start, схема оцифровывает следующие биты так же, как и для данных (на 8-ой, 9-ой и 10-ой выборках). Если 10 (когда LBDL = 0 в регистре USART_CR2) или 11 (когда LBDL=1 в регистре USART_CR2) последующие биты детектированы как 0, и за которыми следует символ разделителя, то установится бит LBD в регистре USART_SR. Если установлен бит LBDIE, то будет сгенерировано прерывание. Перед проверкой корректности break проверяется разделитель, так как он означает, что сигнал RX вернулся на уровень лог. 1.

Если была обнаружена 1 перед возникновением 10 или 11 бита, схема детектирования break отменяет текущее детектирование, и снова ищет бит start.

Если режим LIN запрещен (LINEN=0), приемник продолжает работу как обычный USART, без учета детектирования break.

Если режим LIN разрешен (LINEN=1), как только произойдет ошибка фрейма (например stop-бит был детектирован как 0, что будет в случае любого обрыва фрейма, break), приемник останавливается до тех пор, когда схема детектирования break примет либо 1, если слово break было не завершено, или символ разделителя, если был детектирован break.

STM32F4xx USART Break detection in LIN mode fig305

Рис. 305. Детектирование Break в режиме LIN (длина break 11 бит - установлен бит LBDL).

STM32F4xx USART Break detection in LIN mode vs Framing error detection fig306

Рис. 306. Детектирование break в режиме LIN, отличие от детектирования ошибки фрейма.

Синхронный режим выбирается записью в 1 бита CLKEN регистра USART_CR2. В синхронном режиме должны быть очищены следующие биты:

• Бит LINEN в регистре USART_CR2.
• Биты SCEN, HDSEL и IREN в регистре USART_CR3.

USART дает возможность пользователю управлять двунаправленным синхронным последовательным обменом данных в режиме master. Вывод CK работает как выход тактов передатчика USART. Никакие тактовые импульсы не посылаются через вывод CK во время бита start и бита stop. В зависимости от состояния бита LBCL в регистре USART_CR2 тактовые импульсы будут или не будут генерироваться во время последнего достоверного бита данных (маркер адреса, address mark). Бит CPOL в регистре USART_CR2 дает возможность выбрать полярность тактов, и бит CPHA в регистре USART_CR2 позволяет выбрать фазу внешних тактов (см. рис. 307, 308 и 309).

STM32F4xx USART synchronous transmission fig307

Рис. 307. Пример синхронной передачи USART.

STM32F4xx USART data clock timing M0 fig308

Рис. 308. Диаграммы времени тактов USART (M=0).

* Бит LBCL управляет последним импульсом данных.

STM32F4xx USART data clock timing M1 fig309

Рис. 309. Диаграммы времени тактов USART (M=1).

* Бит LBCL управляет последним импульсом данных.

STM32F4xx USART RX data setup hold time fig310

Рис. 310. Время setup/hold данных RX. tSETUP = tHOLD = 1/16 времени бита.

Во время состояния Idle, преамбулы и отправки break внешний сигнал тактов CK не активируется.

В синхронном режиме передатчик USART работает точно так же, как в асинхронном режиме. Однако бит CK засинхронизирован с TX (в соответствии с настройками CPOL и CPHA), данные на TX синхронные.

В синхронном режиме приемник USART работает не так, как в асинхронном режиме. Если RE=1, то данные анализируются синхронно с сигналом CK (по фронту или спаду уровня, в зависимости от CPOL и CPHA), без какой-либо передискретизации. Время установки (setup time) и удержания (hold time) должно соблюдаться (зависит от baud rate: 1/16 от времени бита).

Примечание: вывод CK работает вместе с выводом TX. Таким образом, такты предоставляются только если разрешен передатчик (TE=1), и данные передаются (записан регистр данных USART_DR). Это означает, что невозможно принимать синхронные данные без передачи данных.

Конфигурация бит LBCL, CPOL и CPHA должна быть выбрана, когда и передатчик, и приемник запрещены (TE=RE=0), чтобы гарантировать корректную работу импульсов тактов. Эти биты не должны изменяться, когда разрешен передатчик или приемник.

Рекомендуется устанавливать биты TE и RE одной инструкцией, чтобы минимизировать время установки (setup time) и удержания (hold time) приемника.

USART поддерживает только режим master: он не может принимать или отправлять данные, связанные со входом тактов (CK всегда работает как выход).

Примечание: функция CK отличается в режиме Smartcard (см. далее описание этого режима).

Этот режим (single-wire, half-duplex) выбирается установкой в 1 бита HDSEL в регистре USART_CR3. В этом режиме должны быть очищены следующие биты:

• Биты LINEN и CLKEN в регистре USART_CR2.
• Биты SCEN и IREN в регистре USART_CR3.

USART может быть сконфигурирован для соответствия однопроводному полудуплексному протоколу, где линии сигналов TX и RX соединены внутри кристалла микроконтроллера (установкой бита HDSEL в регистре USART_CR3).

Как только HDSEL записан в 1:

• Сигналы TX и RX соединяются внутри.
• Внешний вывод RX больше не используется.
• Вывод TX всегда освобождается, когда данные не передаются. Таким образом, он работает как ввод/вывод (GPIO) в состоянии ожидания или приема. Это означает, что ввод/вывод TX должен быть сконфигурирован так, чтобы он был высокоомным входом (или выходом с открытым стоком), когда он не управляется от USART.

Кроме этой особенности, обмен данными такой же, как в обычном режиме USART. Конфликты на линии связи должны разрешаться программно (например, с использованием централизованного арбитра шины). В частности, передача никогда не блокируется аппаратно, и будет продолжаться, пока данные записываются в регистр данных при установленном бите TE.

Режим смарт-карты выбирается установкой бита SCEN в регистре USART_CR3. В режиме смарт-карты должны удерживаться очищенными следующие биты:

• Бит LINEN в регистре USART_CR2.
• Биты HDSEL и IREN в регистре USART_CR3.

Кроме того, должен быть установлен бит CLKEN, чтобы предоставить такты для смарт-карты.

Интерфейс Smartcard разработан для поддержки асинхронного протокола смарт-карт, как определено стандартом ISO 7816-3. USART должен быть сконфигурирован следующим образом:

• 8 бит плюс parity: M=1 и PCE=1 в регистре USART_CR1.
• 1.5 stop-бита при передаче и приеме: STOP=11 в регистре USART_CR2.

Примечание: также можно выбрать 0.5 stop-бита для приема, но рекомендуется использовать 1.5 stop-бита и для передачи, и для приема, чтобы избежать переключения между двумя конфигурациями.

Рис. 311 показывает примеры, как выглядит сигнал данных с ошибкой четности и без ошибки четности.

STM32F4xx USART ISO 7816 3 asynchronous protocol fig311

Рис. 311. Асинхронный протокол ISO 7816-3.

Когда USART подключен к смарт-карте, выход TX управляет двунаправленной линией, которая также управляется выходом смарт-карты. Ножка TX должна быть сконфигурирована как открытый сток. Smartcard это однопроводный, полудуплексный протокол обмена.

• Передача данных из регистра сдвига передачи осуществляется с гарантированной задержкой 1/2 такта скорости. При нормальном функционировании полная передача из регистра сдвига начнется сдвигом на следующем перепаде тактов скорости. В режиме Smartcard эта передача дополнительно задерживается на 1/2 такта скорости.

• Если была детектирована ошибка четности на приеме фрейма, запрограммированного с 0.5 или 1.5 периодом stop-бита, линия передачи подтягивается а лог. 0 на период тактов скорости после завершения приема фрейма. Это служит индикацией, что данные смарт-карты, переданные в USART не были корректно приняты. Этот сигнал NACK (подтягивание к лог. 0 линии передачи на 1 такт скорости) приведет к появлению ошибки фрейма на стороне передатчика (сконфигурированного с 1.5 stop-битом). Приложение должно обработать эту ситуацию повторной отправкой данных в соответствии с протоколом. Ошибка четности сигнализируется приемником для передатчика как NACK (No ACKnowledge), если установлен управляющий бит NACK, иначе NACK не передается.

• Установка флага TC может быть задержана путем программирования регистра защитного времени (Guard Time). При нормальном функционировании TC устанавливается, когда регистр сдвига передачи опустошается, и больше нет ожидающих передачи запросов. В режиме Smartcard пустой регистр сдвига передачи запускает счетчик защитного времени для счета до запрограммированного значения в регистре Guard Time. В течение защитного времени TC принудительно находится в лог. 0. Когда счетчик защитного времени достигнет запрограммированного значения, TC переводится в 1.

• На снятие флага TC режим смарт-карты не влияет.

• Если детектирована ошибка фрейма на стороне передатчика (по сигналу NACK от приемника), NACK не будет детектирован как start-бит блоком приема передатчика. В соответствии с протоколом ISO, длительность принятого NACK может быть 1 или 2 периода тактов скорости.

• На стороне приемника, если была детектирована ошибка четности, и был передан сигнал NACK, то он не будет детектирован как start-бит.

Примечание: символ break не имеет значения в режиме Smartcard. Данные 0x00 с ошибкой фрейма будут обработаны как данные, не как break.

Фрейм Idle передается, когда переключается бит TE. Фрейм Idle (как определено для других конфигураций) в протоколе ISO не определен.

Рис. 312 показывает, как сигнал NACK оцифровывается USART. В этом примере USART передает данные, и сконфигурирован с 1.5 stop-битом. Блок приемника USART разрешен, чтобы проверять целостность данных и сигнал NACK.

STM32F4xx USART parity error detection using 1 5 stop bits fig312

Рис. 312. Детектирование ошибки четности с использованием 1.5 stop-битов.

USART может предоставить такты для смарт-карты через выход CK. В режиме смарткарты CK не связан с обменом данными, он просто генерирует тактовую частоту, полученную из внутреннего входа тактов периферии через 5-разрядный прескалер. Коэффициент деления конфигурируется в регистре прескалера USART_GTPR. Частота CK может быть запрограммирована от fCK/2 до fCK/62, где fCK это частота тактов входа периферии.

Режим IrDA mode выбирается установкой бита IREN в регистре USART_CR3. В режиме IrDA должны сохраняться очищенными следующие биты:

• LINEN, STOP и CLKEN в регистре USART_CR2.
• SCEN и HDSEL в регистре USART_CR3.

Примечание: аббревиатура SIR означает Serial InfraRed, а ENDEC означает ENcoder-DECorer.

Физический слой IrDA SIR задает использовать схему модуляции с возвратом к нулю и инверсией RZI (Return to Zero Inverted), которая представляет лог. 0 как импульс инфракрасного излучения (см. рис. 313).

STM32F4xx USART IrDA SIR ENDEC block diagram fig313

Рис. 313. Блок-схема IrDA SIR ENDEC.

Кодер передачи SIR модулирует выходной поток бит Non Return to Zero (NRZ) из USART. Выходной поток импульсов передается на внешний выходной драйвер и инфракрасный светодиод. USART поддерживает для SIR ENDEC только скорости до 115.2 Kbps. В нормальном режиме ширина передаваемого импульса задана как 3/16 от периода бита.

Декодер приемника SIR демодулирует поток return-to-zero бит из детектора инфракрасного излучения, и выводит последовательный поток бит NRZ в USART. Вход декодера в нормальном состоянии режима ожидания Idle находится в лог. 1 (состояние marking). Кодер передачи выводит противоположную полярность на вход декодера. Бит start детектируется, когда на входе декодера появляется лог. 0.

• IrDA является полудуплексным коммуникационным протоколом. Если передатчик занят (например USART передает данные в кодер IrDA), то любые данные на линии приема IrDA будут игнорироваться декодером IrDA, и если приемник занят (USART принимает декодированные данные из USART), то данные на сигнале TX из USART в IrDA не будут кодироваться IrDA. При приеме данных следует избегать передачи, поскольку передаваемые данные могут быть повреждены.

• 0 передается как импульс лог. 1, и 1 передается как лог. 0. Ширина импульса задана как 3/16 от выбранного периода бита в нормальном режиме (см. рис. 314).

STM32F4xx USART IrDA data modulation 3 16 Normal mode fig314

Рис. 314. Модуляция данных IrDA (3/16) - нормальный режим.

• Декодер SIR преобразует совместимый с IrDA принимаемый сигнал в поток бит для USART.

• Логика приема SIR логически интерпретирует высокий уровень как лог. 1, и импульсы лог. 0 как лог. 0.

• Выходной сигнал кодера передачи имеет полярность, противоположную полярности входного сигнала декодера. Выходной сигнал SIR находится в лог. 0 при режиме ожидания (Idle).

• Спецификация IrDA требует приема импульсов, превышающих 1.41 мкс. Допустимая ширина импульса программируется. Логика детектирование импульсов помех (glitch detection) на стороне приемника отфильтровывает импульсы, ширина которых меньше 2 периодов PSC (PSC это значение прескалера, запрограммированное в регистре скорости низкого потребления энергии IrDA, USART_GTPR). Импульсы шириной меньше 1 периода PSC отбрасываются всегда, но импульсы шириной больше 1 периодпа и меньше 2 периодов могут быть приняты или отброшены, а импульсы больше 2 периодов будут приняты как нормальный импульс. Кодер/декодер IrDA не работает, когда PSC=0.

• Приемник может обмениваться данными с передатчиком в состоянии низкой потребляемой мощности.

• В режиме IrDA, поле бит STOP регистра USART_CR2 должно быть сконфигурировано для состояния "1 стоп-бит".

[IrDA в режиме низкого потребления]

Передатчик. В режиме низкого потребления (low-power mode) ширина импульса не поддерживается на 3/16 от периода бита. Вместо этого ширина импульса в 3 раза превышает маломощную скорость передачи, которая может быть минимум 1.42 МГц. Обычно это значение составляет 1.8432 МГц (1.42 МГц < PSC < 2.12 МГц). Программируемый делитель режима низкого потребления делит системную частоту, чтобы достичь этого значения.

Приемник. Прием в режиме пониженного потребления энергии подобен приему в обычном режиме. Для детектирования импульсов помех (glitch detection) USART должен отбрасывать импульсы, которые короче 1/PSC. Допустимый 0 принимается только если его длительность больше 2 периодов тактов IrDA низкого энергопотребления (значение PSC в регистре USART_GTPR).

Примечание: импульс шириной меньше 2 и больше 1 периода PSC отбрасывается не всегда.

Время установки приемника (set up time) должно управляться программой. Для физического слоя IrDA спецификация задает минимальную задержку 10 мс между передачей и приемом (IrDA является полудуплексным протоколом).

[Продолжительный непрерывный обмен на основе DMA]

USART может реализовать непрерывный обмен с помощью DMA. Запросы DMA для буферов приема и передачи генерируются независимо.

Передача с использованием DMA. Режим DMA может быть разрешен для передачи путем установки бита DMAT в регистре USART_CR3. Данные загружаются из области SRAM, сконфигурированной с использованием периферийного устройства DMA (см. спецификацию DMA [2]) для регистра USART_DR, каждый раз, когда установлен бит TXE. Для отображения канала DMA на передачу USART используйте следующую процедуру (x обозначает номер канала DMA):

1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как место назначения передачи. Данные будут перемещаться по этому адресу из памяти после каждого события TXE.
2. Запишите адрес памяти в регистр управления DMA, чтобы сконфигурировать его как источник передачи. Эти данные будут загружаться в регистр USART_DR из этой памяти после каждого события TXE.
3. Сконфигурируйте общее количество передаваемых байт в регистр управления DMA.
4. Сконфигурируйте приоритет канала в регистре DMA.
5. Сконфигурируйте генерацию прерывания после половины / полной передачи, как этого требует приложение.
6. Очистите бит TC в регистре SR записью туда 0.
7. Активируйте канал в регистре DMA.

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

В режиме передачи как только DMA записал все данные для передачи (в регистре DMA_ISR установился флаг TCIF), флаг TC может отслеживаться, чтобы удостовериться в завершении обмена USART. Это необходимо перед запретом USART или входом в режим Stop, чтобы не повредилась последняя передача. Программа должна подождать, чтобы TC перешел в 1. Флаг TC остается очищенным во время всех передач данных, и установится аппаратно по окончанию передачи последнего фрейма.

STM32F4xx USART transmission using DMA fig315

Рис. 315. Передача с использованием DMA.

Прием с использованием DMA. Режим DMA может быть разрешен для приема путем установки бита DMAR в регистре USART_CR3. Данные загружаются из регистра USART_DR в область SRAM, сконфигурированную с использованием периферийного устройства DMA (см. спецификацию DMA [2]), всякий раз, когда принимается байт данных. Чтобы отобразить канал DMA для приема USART, используйте следующую процедуру:

1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как источник приема. Данные будут перемещаться из этого адреса памяти после каждого события RXNE.
2. Запишите адрес памяти в регистр управления DMA, чтобы сконфигурировать его как место назначения приема. Эти данные будут загружаться из регистра USART_DR в эту память после каждого события RXNE.
3. Сконфигурируйте общее количество принимаемых байт в регистр управления DMA.
4. Сконфигурируйте приоритет канала в регистре DMA.
5. Сконфигурируйте генерацию прерывания после половины / полной передачи, как этого требует приложение.
6. Активируйте канал в регистре DMA.

Когда достигнуто количество данных, запрограммированное в контроллере DMA, контроллер DMA генерирует прерывание на векторе прерывания канала DMA. Бит DMAR в регистре USART_CR3 должен быть очищен программой в обработчике прерывания.

STM32F4xx USART reception using DMA fig316

Рис. 316. Прием с использованием DMA.

Флаг ошибки и генерация прерывания при multibuffer обмене. В случае обмена с использованием нескольких буферов (multibuffer communication), если произойдет любая ошибка во время транзакции, флаг ошибки будет выставлен после текущего байта. Будет сгенерировано прерывание, если установлен бит разрешения этого прерывания. Для ошибки фрейма (framing error), ошибки переполнения (overrun error) и флага шума (noise flag), которые устанавливаются вместе с RXNE при однобайтовом приеме, здесь будет отдельный бит разрешения прерывания (бит EIE в регистре USART_CR3). Если бит EIE установлен, то будет генерироваться прерывание после текущего байта при любой из этих ошибок.

Можно управлять потоком последовательных данных между двумя устройствами, используя вход CTS и выход RTS (hardware flow control). Рис. 317 показывает, как соединить 2 устройства в этом режиме (выход RTS одного устройства соединяется со входом CTS другого):

STM32F4xx USART hardware flow control between 2 USARTs fig317

Рис. 317. Аппаратное управление потоком данных между двумя USART.

Управление потоком RTS и CTS можно разрешить независимо записью в 1 соответствующих бит RTSE и CTSE (они находятся в регистре USART_CR3).

Управление потоком RTS. RTS расшифровывается как Ready To Send, т. е. "готов к передаче". Если разрешен RTS flow control (RTSE=1), то сигнал на выходе RTS выставляется (переводом в 0) тогда, когда приемник USART готов к приему новых данных. Когда регистр приема заполнен (т. е. данные еще не были забраны оттуда), сигнал RTS снимается (переводом в лог. 1), что служит индикацией для передатчика на другой стороне, что передачу следует приостановить по окончанию текущего фрейма. Рис. 318 показывает пример обмена с разрешенным RTS flow control.

STM32F4xx USART RTS flow control fig318

Рис. 318. RTS flow control.

Управление потоком CTS. CTS расшифровывается как Clear To Send, т. е. "линия чиста для передачи". Если разрешен CTS flow control (CTSE=1), то передатчик проверяет вход CTS перед передачей следующего фрейма. Если сигнал CTS выставлен (подтянут к 0), то передаются следующие данные (подразумевается, что есть данные для передачи, другими словами, если TXE=0), иначе передача не произойдет. Когда CTS снимается во время передачи, текущая передача завершится перед остановкой передатчика.

Когда CTSE=1, бит статуса CTSIF автоматически установится аппаратурой, как только переключится вход CTS. Это показывает, когда приемник становится готов или не готов для обмена данными. Генерируется прерывание, если установлен бит CTSIE в регистре USART_CR3. На рисунке ниже дан пример обмена с разрешенным CTS flow control.

STM32F4xx USART CTS flow control fig319

Рис. 319. CTS flow control.

Примечание: существует специальное поведение фреймов break - когда разрешено управление потоком CTS, передатчик не проверяет состояние входа CTS для отправки сигнала break.

[Прерывания USART]

Таблица 147. Запросы прерывания USART.

Событие прерывания Флаг события Бит разрешения
Transmit Data Register Empty (регистр данных передачи пуст) TXE TXEIE
Флаг CTS (сигнал, что можно продолжать передачу) CTS CTSIE
Transmission Complete (передача завершена) TC TCIE
Received Data Ready to be Read (принятые данные готовы для чтения) RXNE RXNEIE
Overrun Error Detected (обнаружена ошибка переполнения) ORE
Idle Line Detected IDLE IDLEIE
Parity Error (ошибка четности) PE PEIE
Флаг Break (обнаружен сигнал break на линии) LBD LBDIE
Флаг шума. Флаг overrun и ошибка фрейма в multibufer обмене. NF или ORE или FE EIE

События прерываний USART подсоединены к одному и тому же вектору прерывания (см. рис. 320).

STM32F4xx USART interrupt mapping diagram fig320

Рис. 320. Диаграмма отображений событий USART на прерывание.

Во время передачи могут быть прерывания: Transmission Complete (передача завершена), Clear to Send (линия чиста для начала передачи) или Transmit Data Register empty (регистр данных передачи пуст).

Во время приема могут быть прерывания: Idle Line detection (определено состояние ожидание линии), Overrun error (ошибка переполнения, программа не успела прочитать принятые данные), Receive Data register not empty (регистр данных приема не пуст), Parity error (ошибка проверки четности), LIN break detection (определение сигнала прекращения передачи LIN), Noise Flag (флаг шума, только при многобуферном обмене) и Framing Error (ошибка фрейма, только при многобуферном обмене).

Все эти события генерируют прерывание, если установлен соответствующий бит разрешения прерывания.

[Конфигурация режима USART]

Таблица 148. USART mode configuration(1).

Режимы USART USART1 USART2 USART3 UART4 UART5 USART6
Асинхронный режим X X X X X X
Аппаратное управление потоком X X X NA NA X
Многобуферный обмен (DMA) X X X X X X
Многопроцессорный обмен X X X X X X
Синхронный режим X X X NA NA X
Smartcard X X X NA NA X
Полудуплекс (режим single-wire) X X X X X X
IrDA X X X X X X
LIN X X X X X X

Примечание (1): X = поддерживается; NA = не применимо.

[Регистры USART]

Таблица 149. Карта памяти регистров USART и их значения после сброса.

STM32F4xx USART register map

Границы адресов регистров см. в секции 2.3 "Memory map" даташита [1].

В описании функций регистров используются следующие сокращения:

read/write (rw) Программа может читать и записывать эти биты.

read-only (r) Программа может только читать эти биты.

write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса.

read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта.

read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта.

read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта.

read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта.

read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита.

toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта.

Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.

К регистрам периферийного устройства должен осуществляться доступ либо как к половинкам слова (half-word, 16 бит), либо как к словам (words, 32 бита).

Смещение адреса 0x00, значение после сброса 0x000000C0.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано CTS
rc_w0
LBD
rc_w0
TXE
r
TC
rc_w0
RXNE
rc_w0
IDLE
r
ORE
r
NF
r
FE
r
PE
r

Биты 31:10 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

CTS (бит 9): Флаг CTS. Этот бит установится аппаратно, когда на входе CTS меняется уровень, если установлен бит CTSE. Бит CTS очищается программно (записью туда 0). Будет сгенерировано прерывание, если CTSIE=1 в регистре USART_CR3.

0: не было изменения состояния линии CTS.
1: на линии CTS обнаружено изменение уровня.

Примечание: этот бит недоступен для UART4 и UART5.

LBD (бит 8): Флаг детектирования LIN break. Этот бит устанавливается аппаратурой, когда был обнаружен LIN break. Флаг очищается программно (записью в него 0). Будет сгенерировано прерывание, если LBDIE=1 в регистре USART_CR2.

0: LIN Break не был определен.
1: Был детектирован LIN break.

Примечание: генерируется прерывание, когда LBD=1, если LBDIE=1.

TXE (бит 7): регистр данных передачи пуст. Этот бит установится аппаратно, когда содержимое регистра TDR было передано в регистр сдвига передатчика. Будет сгенерировано прерывание, если бит TXEIE=1 в регистре USART_CR1. Бит TXE очищается при записи в регистр USART_DR.

0: данные не были переданы в регистр сдвига.
1: данные переданы в регистр сдвига.

Примечание: этот бит используется во время передачи одиночного буфера (single buffer transmission).

TC (бит 6): передача завершена. Этот бит установится аппаратно, если передача фрейма, содержащего данные, была завершена, и если установлен бит TXE. Будет сгенерировано прерывание, если бит TCIE=1 в регистре USART_CR1. Бит TC очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Также бит TC может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication).

0: передача не завершена.
1: передача завершена.

RXNE (бит 5): регистр данных приема не пуст. Этот бит установится аппаратно, когда содержимое регистра сдвига RDR было передано в регистр USART_DR. Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит RXNE очищается чтением регистра USART_DR register. Также бит RXNE может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication).

0: данные не приняты.
1: приняты данные, они готовы для чтения.

IDLE (бит 4): детектировано состояние ожидания на линии (IDLE line). Этот бит устанавливается аппаратно, когда на линии было определено состояние ожидания (Idle Line). Будет сгенерировано прерывание, если бит IDLEIE=1 в регистре USART_CR1. Бит IDLE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: не было определено состояние ожидания на линии.
1: линия в состоянии ожидания.

Примечание: бит IDLE не установится снова, пока сам не установится бит RXNE (т. е. пока не произойдет новое определение состояния ожидания на линии).

ORE (бит 3): ошибка переполнения (OverRun Error). Этот бит установится аппаратно, когда принятое в настоящий момент слово в регистре сдвига готово к передаче в регистр RDR, но старое содержимое регистра данных не было прочитано (RXNE=1). Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит ORE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: не было ошибки переполнения.
1: детектировано переполнение приема, принятые данные потеряны.

Примечание: когда этот бит установился, старое содержимое регистра RDR не теряется, однако регистр сдвига будет перезаписан. В случае многобуферного обмена будет сгенерировано прерывание по флагу ORE, если установлен бит EIE в регистре USART_CR3.

NF (бит 2): флаг детектирования шума. Этот бит установится аппаратно, когда в принятом фрейме был обнаружен шум. Бит NF очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: шума не было.
1: был обнаружен шум.

Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание на флаге NF в случае многобуферного обмена, если установлен бит EIE в регистре USART_CR3.

Когда на линии нет шума, флаг NF может быть запрещен программированием в 1 бита ONEBIT, чтобы увеличить допуск USART на девиации (см. выше секцию "Допуск ухода тактовой частоты для приемника USART").

FE (бит 1): Ошибка фрейма. Этот бит установится аппаратно, когда произошла рассинхронизация, был чрезмерный шум, или был детектирован символ break. Бит FE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: не было ошибки фрейма.
1: была определена ошибка фрейма или символ break.

Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание. Если передаваемое в настоящий момент слово приведет к одновременным ошибкам frame error и overrun error, то слово будет принято, и установится только бит ORE. Будет сгенерировано прерывание по флагу FE в случае многобуферного обмена, если установлен бит EIE.

PE (бит 0): ошибка проверки четности (Parity Error). Этот бит установится аппаратно, когда на приеме была обнаружена ошибка четности. Бит PE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Программа должна ожидать установки флага RXNE перед очисткой флага PE. Будет сгенерировано прерывание, если бит PEIE=1 в регистре USART_CR1.

0: нет ошибки проверки четности.
1: ошибка проверки четности.

Смещение адреса 0x04, значение после сброса 0xXXXXXXXX.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано DR[8:0]
rw

Биты 31:9 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

DR[8:0] (биты 8 .. 0): Значение данных. Содержит принятый или передаваемый символ данных, в зависимости от операции с регистром - чтение или запись.

Регистр данных выполняет двойную функцию (чтение и запись) поскольку физически он состоит из двух регистров - один для передачи (TDR) и еще один для приема (RDR). Регистр TDR предоставляет параллельный интерфейс между внутренней шиной и выходным регистром сдвига см. рис. 296. Регистр RDR предоставляет параллельный интерфейс между входным регистром сдвига и внутренней шиной.

Когда разрешена передача с генерацией бита четности (установлен в 1 бит PCE регистра USART_CR1), то значение, записанное в MSB (бит 7 или бит 8, в зависимости от настроенной длины данных), не оказывает никакого эффекта, потому что заменяется аппаратно вычисленным битом четности. Когда на приеме разрешен контроль четности, то значение, прочитанное из старшего бита данных (MSB) является принятым битом четности.

Примечание: счетчики скорости останавливают счет, если биты TE или RE запрещены.

Смещение адреса 0x08, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
DIV_Mantissa[11:0]
rw
DIV_Fraction[3:0]
rw

Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

DIV_Mantissa[11:0] (биты 15:4): мантисса USARTDIV. Эти 12 бит определяют мантиссу делителя USART (USARTDIV).

DIV_Fraction[3:0] (биты 3:0): дробная часть USARTDIV. Эти 4 бита определяют дробную часть делителя USART (USARTDIV). Когда OVER8=1, бит DIV_Fraction3 не учитывается, и должен быть очищен.

Смещение адреса 0x0C, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
OVER8
rw
зарезерв. UE
rw
M
rw
WAKE
rw
PCE
rw
PS
rw
PEIE
rw
TXEIE
rw
TCIE
rw
RXNEIE
rw
IDLEIE
rw
TE
rw
RE
rw
RWU
rw
SBK
rw

Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

OVER8 (бит 15): режим передискретизации приема (oversampling).

0: передискретизация на 16.
1: передискретизация на 8.

Примечание: передискретизация на 8 недоступна в режимах режимах Smartcard, IrDA и LIN: когда SCEN=1, IREN=1 или LINEN=1, то OVER8 принудительно сбрасывается в 0 аппаратурой.

Бит 14 зарезервирован, его значение должно сохраняться в состоянии сброса (0).

UE (бит 13): разрешение USART. Когда этот бит очищен, прескалеры и выходы USART останавливаются по окончанию текущей передачи байта, чтобы снизить потребление энергии. Этот бит устанавливается и очищается программой.

0: прескалер и выходы USART запрещены.
1: USART разрешен.

M (бит 12): длина слова. Этот бит определяет длину слова данных, и как следствие длину фрейма. Бит устанавливается или очищается программно.

0: 1 start-бит, 8 бит данных, n stop-бит.
1: 1 start-бит, 9 бит данных, n stop-бит.

Примечание: бит M не должен модифицироваться во время передачи данных (и приема, и передачи).

WAKE (бит 11): метод пробуждения (wakeup). Этот бит определяет, как будет разбужен USART, бит устанавливается или очищается программой.

0: Idle Line (состояние ожидания на линии).
1: Address Mark (адресная метка).

PCE (бит 10): разрешение контроля четности (Parity Control Enable). Этот бит выбирает аппаратную генерацию и проверку четности данных. Когда контроль четности разрешен, вычисленная четность вставляется в позицию MSB (старший бит, 9-й при M=1 или 8-й при M=0), и на приеме этот бит также проверяется на четность (или нечетность). Бит PCE устанавливается и очищается программой. Будучи установленным, PCE активируется посте текущего байта (на приеме и передаче).

0: контроль четности разрешен.
1: контроль четности запрещен.

PS (бит 9): выбор варианта контроля четности. Этот бит выберет, как вычисляется и проверяется patity - либо на четность, либо на нечетность, когда эта функция разрешена (PCE=1). Бит устанавливается и очищается программно. Вариант контроля выбирается после текущего байта.

0: проверка по принципу четности.
1: проверка по принципу нечетности.

PEIE (бит 8): разрешение прерывания на ошибке четности. Бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда PE=1 в регистре USART_SR.

TXEIE (бит 7): разрешение прерывания опустошения буфера передачи. Бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда TXE=1 в регистре USART_SR.

TCIE (бит 6): разрешение прерывания по завершению передачи. Этот бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда TC=1 в регистре USART_SR.

RXNEIE (бит 5): разрешение прерывания по завершению приема (регистр данных приема не пуст). Этот бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда ORE=1 или RXNE=1 в регистре USART_SR.

IDLEIE (бит 4): разрешение прерывания на состоянии ожидания линии (IDLE). Этот бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда IDLE=1 в регистре USART_SR.

TE (бит 3): разрешение передатчика. Этот бит разрешает работу передатчика, бит устанавливается и очищается программно.

0: передатчик запрещен.
1: передатчик разрешен.

Примечание: во время передачи импульс 0 на бите TE (0, за которым следует 1) приведет к передаче преамбулы (сигнала ожидания на линии, idle line) после текущего слова, кроме режима smartcard. Когда бит TE установлен, здесь есть 1-битная задержка времени перед тем, как начнется передача.

RE (бит 2): разрешение приемника. Этот бит устанавливается и очищается программно.

0: приемник запрещен.
1: приемник разрешен, и начинает искать на линии start-бит.

RWU (бит 1): пробуждение приемника. Бит определяет, находится ли USART в режиме молчания (mute mode) или нет. Он устанавливается и очищается программой, и может быть очищен аппаратно, когда распознана распознана последовательность пробуждения (wakeup sequence).

0: приемник в активном режиме.
1: приемник в режиме молчания (mute mode).

Примечание: перед выбором режима молчания (установкой бита RWU) USART должен сначала принять байт данных, иначе USART не может работать в режиме молчания с пробуждением на детектировании ожидания линии (wakeup by Idle line). В конфигурации пробуждения от метки адреса (Address Mark Detection wakeup, бит WAKE=1) бит RWU не может быть изменен программой, когда установлен бит RXNE.

SBK (бит 0): отправка сигнала break. Установка этого бита используется для отправки символа остановки передачи (send break). Бит может быть установлен и очищен программой. Он должен быть установлен программой, и будет сброшен аппаратно во время stop-бита символа break.

0: не будет передан символ break.
1: будет передан символ break.

Смещение адреса 0x10, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезерв. LINEN
rw
STOP[1:0]
rw

CLKEN
rw
CPOL
rw
CPHA
rw
LBCL
rw
зарезерв. LBDIE
rw
LBDL
rw
зарезерв. ADD[3:0]
rw

Биты 31:15 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

LINEN (бит 14): разрешение режима LIN. Этот бит устанавливается и очищается программой.

0: режим LIN запрещен.
1: режим LIN разрешен.

Режим LIN разрешает функцию отправки сигналов LIN Synch Break (13 бит в лог. 0), используя бит SBK в регистре USART_CR1 и функцию детектирования сигналов LIN Sync break.

STOP (биты 13 и 12): биты настройки длительности стоп-бита.

00: 1 stop-бит.
01: 0.5 stop-бит.
10: 2 stop-бита.
11: 1.5 stop-бита.

Примечание: 0.5 stop-бита и 1.5 stop-бита недоступны для UART4 и UART5.

CLKEN (бит 11): разрешение тактирования. Этот бит позволяет разрешить работу выхода тактов CK.

0: вывод CK запрещен.
1: вывод CK разрешен.

Примечание: этот бит недоступен для UART4 и UART5.

CPOL (бит 10): полярность тактов. Бит позволяет выбрать полярность выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPHA бит CPOL определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309).

0: постоянное значение 0 на выводе CK вне окна передачи.
1: постоянное значение 1 на выводе CK вне окна передачи.

Примечание: этот бит недоступен для UART4 и UART5.

CPHA (бит 9): фаза тактов. Бит позволяет выбрать фазу выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPOL бит CPHA определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309).

0: первое изменение сигнала синхронизации является первым перепадом захвата данных.
1: второе изменение сигнала синхронизации является первым перепадом захвата данных.

Примечание: этот бит недоступен для UART4 и UART5.

LBCL (бит 8): тактовый импульс последнего бита. Бит позволяет выбрать, связан ли тактовый импульс с последним переданным битом данных (MSB). Тактовые импульсы выводятся на ножку CK в синхронном режиме.

0: тактовый импульс на вывод CK на последнем бите не выводится.
1: на последнем бите выводится тактовый импульс на вывод CK.

Примечания: последний бит это 8-й или 9-й бит данных, в зависимости от формата 8/9 бит, выбираемого битом M регистра USART_CR1. Бит LBCL недоступен для UART4 и UART5.

Бит 7 зарезервирован, его значение должно сохраняться в состоянии сброса (0).

LBDIE (бит 6): разрешение прерывания детектирования LIN break. Маска прерывания break (детектирование break с использованием разделителя break).

0: прерывание запрещено.
1: генерируется прерывание всякий раз, когда LBD=1 в регистре USART_SR.

LBDL (бит 5): длина детектирования LIN break. Позволяет выбрать между 11 битами или 10 битами детектирования break.

0: 10-bit break detection.
1: 11-bit break detection.

Бит 4 зарезервирован, его значение должно сохраняться в состоянии сброса (0).

ADD[3:0] (биты 3:0): адрес узла USART. Это битовое поле дает адрес узла USART, используется в многопроцессорном обмене во время режима молчания (mute mode), для пробуждения USART при детектировании метки адреса (address mark detection).

Смещение адреса 0x14, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезерв.
ONEBIT
rw
CTSIE
rw
CTSE
rw
RTSE
rw
DMAT
rw
DMAR
rw
SCEN
rw
NACK
rw
HDSEL
rw

IRLP
rw
IREN
rw
EIE
rw

Биты 31:12 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

ONEBIT (бит 11): разрешение режима одной выборки на бит. Дает возможность выборки метода оцифровки сигнала. Когда выбран метод одной выборки на бит, флаг детектирования шума (noise detection flag, NF) запрещен.

0: мажоритарный метод трех выборок на бит.
1: метод одной выборки на бит.

Примечание: функция ONEBIT применима только к битам данных. Это не относится к анализу бита START.

CTSIE (бит 10): разрешение прерывания CTS.

0: прерывание запрещено.
1: прерывание генерируется всякий раз, когда CTS=1 в регистре USART_SR.

Примечание: этот бит недоступен для UART4 и UART5.

CTSE (бит 9): разрешение CTS.

0: запрещено аппаратное управление потоком CTS.
1: разрешен режим CTS, данные передаются только тогда, когда на входе CTS лог. 0. Если на CTS лог. 1, когда передаются данные, то передача завершается перед тем, как остановиться. Если записан регистр данных, когда CTS в состоянии лог. 1, то передача откладывается до момента, когда на CTS появится лог. 0.

Примечание: этот бит недоступен для UART4 и UART5.

RTSE (бит 8): разрешение RTS.

0: запрещено аппаратное управление потоком RTS.
1: разрешен выходной сигнал RTS, данные запрашиваются только когда есть место в буфере приема. Ожидается, что передача данных прекратится после того, как будет передан текущий символ. Выход RTS аппаратно переводится в лог. 0, когда USART может принимать данные.

Примечание: этот бит недоступен для UART4 и UART5.

DMAT (бит 7): разрешение DMA передатчика. Этот бит устанавливается и сбрасывается программой.

0: режим DMA для передачи запрещен.
1: разрешен режим DMA для передачи.

DMAR (бит 6): разрешение DMA приемника. Этот бит устанавливается и сбрасывается программой.

0: режим DMA для приема запрещен.
1: разрешен режим DMA для приема.

SCEN (бит 5): разрешение режима Smartcard.

0: режим Smartcard запрещен.
1: режим Smartcard разрешен.

Примечание: этот бит недоступен для UART4 и UART5.

NACK (бит 4): разрешение Smartcard NACK.

0: запрещена передача NACK в случае ошибки четности.
1: разрешена передача NACK в случае ошибки четности.

Примечание: этот бит недоступен для UART4 и UART5.

HDSEL (бит 3): выбор полудуплекса. Бит выбирает режим Single-wire Half-duplex.

0: режим полудуплекса не выбран.
1: выбран режим полудуплекса.

IRLP (бит 2): низкопотребляющий режим IrDA (Low-power mode). Бит используется для выбора между нормальным IrDA и низкопотребляющим IrDA.

0: нормальный режим.
1: режим низкого потребления.

IREN (бит 1): разрешение режима IrDA. Этот бит устанавливается и сбрасывается программой.

0: IrDA запрещен.
1: IrDA разрешен.

EIE (бит 0): разрешение прерывания ошибки (Error Interrupt Enable). Бит нужен для разрешения генерации прерывания в случае ошибки фрейма (framing error, FE=1), переполнения (overrun error, ORE=1) или флага шума (noise flag, NF=1) в регистре USART_SR, в случае многобуферного обмена (Multi Buffer Communication, DMAR=1 в регистре USART_CR3).

0: прерывание запрещено.
1: прерывание генерируется, когда DMAR=1 в регистре USART_CR3, и установлен любой из бит FE=1, ORE=1 или NF=1 в регистре USART_SR.

Смещение адреса 0x18, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
GT[7:0]
rw

PSC[7:0]
rw

Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

GT[7:0] (биты 15 .. 8): значение защитного времени (Guard Time). Это битовое поле дает значение защитного времени в единицах тактов скорости (baud clock). Это используется в режиме Smartcard. Флаг завершения передачи (Transmission Complete, TC) установится после этого защитного времени.

Примечание: эти биты недоступны для UART4 и UART5.

PSC[7:0] (биты 7 .. 0): значение прескалера.

IrDA Low-power mode: PSC[7:0] = IrDA Low-Power Baud Rate. Используется для программирования прескалера, чтобы поделить системную тактовую частоту, чтобы достичь частоты низкого энергопотребления. Источник тактов делится на значение, заданное в регистре (8 значащих бит):

00000000: зарезервировано - не программируйте это значение.
00000001: делит источник тактов на 1.
00000010: делит источник тактов на 2.
...

В нормальном режиме IrDA: поле PSC должно быть установлено в 00000001.

В режиме Smartcard: PSC[4:0]: значение прескалера. Используется программирование прескалера для деления системной тактовой частоты, чтобы предоставить такты смарт-карты. Значение, заданное в этом регистре (5 значащих бит), умножается на 2, чтобы получить коэффициент деления исходной частоты тактов:

00000: зарезервировано - не программируйте это значение.
00001: делит источник тактов на 2.
00010: делит источник тактов на 4.
00011: делит источник тактов на 6.
...

Примечание: биты [7:5] не оказывают влияния в режиме Smartcard. Биты PSC недоступны для UART4 и UART5.

[Ссылки]

1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com.
2STM32F429: контроллер DMA.

 

Комментарии  

 
0 #1 Валерий 23.08.2024 11:29
В single-wire режиме освободившийся pin RX можно использовать?

microsin: можно.
Цитировать
 

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


Защитный код
Обновить

Top of Page