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. • Полудуплексный обмен по одному сигнальному проводу (Single-wire half-duplex). • Конфигурируемый multibuffer-обмен для DMA. Байты передачи и приема помещаются в зарезервированные буферы SRAM. • Отдельные биты разрешения для передатчика и приемника. • Флаги детектирования обмена: – Буфер приема заполнен • Управление контролем четности: – Передача parity-бита • 4 флага детектирования ошибки: – Overrun error (ошибка переполнения) • 10 источников прерывания с флагами: – Изменение CTS • Мультипроцессорный обмен - вход в режим молчания (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) до передачи или приема. Описание регистров и их бит см. далее во врезках раздела "Регистры USART". Для работы в синхронном режиме требуется дополнительный вывод тактов: • CK: выход тактов передатчика. На этот вывод выдаются такты данных для синхронной передачи, соответствующей режиму SPI master (нет тактовых импульсов на битах start и stop, и программно выбираемая опция отправки тактового импульса на последнем бите данных). Параллельно и синхронно могут приниматься данные через ножку RX. Это можно использовать для управления внешними периферийными устройствами, у которых есть регистры сдвига (например драйверы LCD). Фаза и полярность тактов выбирается программно. В режиме smartcard CK может предоставлять такты для смарт-карты. В режиме аппаратного управления потоком требуются еще 2 вывода: • CTS: сигнал Clear To Send, блокирующий передачу данных по окончании текущей передачи (когда CTS = 1). • RTS: сигнал Request To Send, показывающий, что USART готов принимать данные (когда RTS = 0). Рис. 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). Такты для передатчика и приемника генерируются, когда установлен соответствующий бит разрешения. Рис. 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-битов. Фрейм idle также будет включать в себя и stop-биты. Передача break будет состоять из 10 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 0) и 11 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 1). Нельзя передавать длинные символы break (когда длительность нулей больше 10/11 бит). Рис. 298. Конфигурируемые stop-биты. Процедура программирования передатчика: 1. Разрешите USART записью в 1 бита UE регистра USART_CR1. Однобайтный обмен. Бит TXE всегда очищается путем записи в регистр данных. TXE устанавливается аппаратно, и это показывает: • Данные были перемещены из TDR в регистр сдвига, и началась передача данных. Этот флаг генерирует прерывание, если установлен бит 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 при передаче). Рис. 299. Как ведут себя при передаче биты TC и TXE. Бит TC очищается следующими программными операциями: 1. Чтение из регистра USART_SR. Символ 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. Рис. 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. Когда принят символ: • Установится бит RXNE. Это показывает, что содержимое регистра сдвига передано в RDR. Другими словами, данные были приняты, и могут быть прочитаны (а также связанные с ним флаги ошибок). Примечание: бит RE не должен сбрасываться при приеме данных. Если бит RE запрещен во время приема, то прием текущего слова данных будет оборван. Символ Break. Когда был принят символ break, USART обрабатывает это как ошибку фрейма (framing error). Символ Idle. Когда был детектирован фрейм ожидания (idle frame), то происходит та же процедура, что и при приеме символа, плюс произойдет прерывание, если установлен бит IDLEIE. Ошибка переполнения. Overrun error происходит, когда принят новый символ, но флаг RXNE не был очищен. Данные не могут быть перемещены из регистра сдвига в регистр RDR, пока не будет очищен бит RXNE. Флаг RXNE устанавливается после каждого принятого слова данных. Ошибка переполнения происходит, если флаг RXNE установлен, когда приняты следующие данные, или когда не был обработан предыдущий запрос DMA. Когда произойдет overrun error: • Установится бит ORE. Примечание: бит ORE, когда установлен, показывает, что как минимум один элемент данных на приеме был потерян. Есть 2 возможности: • Если RXNE=1, то последние достоверные принятые данные сохранены в регистре приема RDR, и они могут быть прочитаны. Выбор правильного метода передискретизации. Приемник использует разные, конфигурируемые пользователем техники передискретизации (кроме синхронного режима) для восстановления данных, путем отделения друг от друга достоверных приходящих данных и шума. Метод передискретизации может быть выбран программированием бита OVER8 в регистре USART_CR1, и передискретизация может быть 16 или 8 кратная к тактам скорости (см. рис. 301 и 302). В зависимости от приложения: • Выберите передискретизацию на 8 (OVER8=1), чтобы достичь увеличенной скорости (до fPCLK/8). В этом случае максимальный допуск на девиацию тактов для приемника снижается (см. далее секцию "Допуск ухода тактовой частоты для приемника USART"). Программирование бита ONEBIT в регистре USART_CR3 выбирает метод, используемый для оценки логического уровня сигнала. Есть 2 опции: • Мажоритарная выборка из 3 образцов сигнала, взятых по центру принимаемого бита. В этом случае, когда 3 эти выборки не одинаковые, установится бит NF. В зависимости от приложения: – Выберите метод мажоритарности из 3 выборок (ONEBIT=0) когда работа происходит в зашумленном окружении, и отбрасывайте данные, когда был определен шум (см. таблицу 133), потому что это показывает, что во время выборки произошел паразитный выброс помехи. Когда во фрейме был детектирован шум: • Бит NF установится по фронту нарастания бита RXNE. Бит NF сбросится операцией чтения регистра USART_SR, за которой идет операция чтения регистра USART_DR. Примечание: передискретизация на 8 недоступна в режимах Smartcard, IrDA и LIN. В этих режимах бит OVER8 аппаратно сбрасывается в 0. Рис. 301. Выборка данных при передискретизации 16. Рис. 302. Выборка данных при передискретизации 8. Таблица 133. Детектирование шума для считываемых данных.
Ошибка фрейма. Framing error детектируется, когда не был распознан stop-бит во время приема в ожидаемом промежутке времени - либо из-за рассинхронизации, либо из-за чрезмерного шума. Когда детектирована ошибка фрейма: • Бит FE устанавливается аппаратно. Бит 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 Формула 2. скорость для режимов Smartcard, LIN и IrDA: fCK USARTDIV это число с фиксированной запятой без знака, закодированное в регистре USART_BRR. • Когда OVER8=0, дробная часть кодируется 4 битами, и программируется битами DIV_fraction[3:0] регистра USART_BRR. Примечание: счетчики скорости обновляются новым значением в регистрах скорости после операции записи в USART_BRR. Следовательно, регистра скорости не должно изменяться во время активного обмена. [Пример 1] Если DIV_Mantissa = 0d27 и DIV_Fraction = 0d12 (USART_BRR = 0x1BC), тогда [Пример 2] Для программирования USARTDIV = 0d25.62 получается: DIV_Fraction = 16*0d0.62 = 0d9.92 [Пример 3] Для программирования USARTDIV = 0d50.99 получается: DIV_Fraction = 16*0d0.99 = 0d15.84 DIV_Mantissa = mantissa (0d50.990 + carry) = 0d51 = 0x33 [Пример 1] Если DIV_Mantissa = 0x27 и DIV_Fraction[2:0]= 0d6 (USART_BRR = 0x1B6), тогда [Пример 2] Для программирования USARTDIV = 0d25.62. Это приведет к следующему: DIV_Fraction = 8*0d0.62 = 0d4.96 [Пример 3] Для программирования USARTDIV = 0d50.99. Это приведет к следующему: DIV_Fraction = 8*0d0.99 = 0d7.92 DIV_Mantissa = mantissa (0d50.990 + перенос) = 0d51 = 0x33. В таблицах 134 .. 143 даташита [1] приведены рассчитанные практические погрешности заданных стандартных скоростей для различных условий (частоты шины PCLK, варианты передискретизации). Допуск ухода тактовой частоты для приемника USART. Асинхронный приемник USART корректно работает только если общая девиация тактовой частоты системы меньше, чем допуск приемника USART. Причины, которые способствуют общему отклонению: • DTRA: девиация из-за ошибки передатчика (что также включает девиацию локального тактового генератора передатчика). DTRA + DQUANT + DREC + DTCL < допуск приемника USART Допуск приемника USART для правильного приема данных равен максимально допустимой девиации и зависит от следующих выбранных параметров: • Длина фрейма символа 10 или 11 бит, что определяется битом M в регистре USART_CR1. Таблица 144. Допуск приемника USART, когда DIV fraction = 0.
Таблица 145. Допуск приемника USART, когда DIV fraction отличается от 0.
Примечание: информация, указанная в таблицах 144 и 145, может незначительно отличаться в специальном случае, когда принимаемые фреймы точно 10-битные при M=0 (11-битные при M=1). Есть возможность выполнять многопроцессорный обмен через USART (несколько USART, объединенных в сеть). Например, один USART может быть главный (master), его выход TX подключается ко входу RX других USART. Другие USART работают как подчиненные (slave), их соответствующие выходы логически объединены по И (AND), и все вместе подключены ко входу RX устройства master. В многопроцессорных конфигурациях обмена часто желательно, чтобы только один получатель сообщения должен активно принять все сообщение целиком, чтобы уменьшить обработку избыточных данных для всех приемников, которые не адресованы. Не адресованные устройства могут быть помещены в режим молчания (mute mode) с помощью соответствующей функции (muting). В режиме молчания: • Никакой из битов статуса приема не может быть установлен. USART может либо войти в mute mode, либо выйти из mute mode, используя один из двух методов, в зависимости от бита WAKE в регистре USART_CR1: • Детектирование ожидания линии (Idle Line), если сбо бит WAKE. Детектирование Idle Line (WAKE=0). USART войдет в режим молчания, когда в бит RWU записана 1. Он проснется, когда будет детектирован фрейм Idle. Тогда бит RWU очистится программно, но бит IDLE в регистре USART_SR не установится. Бит RWU также можно записать в 0 программно. Пример поведения в режиме молчания с использованием детектирования Idle линии показан на рис. 303. Рис. 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. Рис. 304. Режим Mute с использованием детектирования метки адреса. Проверка четности бит (генерация parity-бита при передаче и проверка четности на приеме) могут быть разрешены установкой бита PCE (Parity Control Enable) в регистре USART_CR1. В зависимости от длины фрейма, определяемой битом M, возможные форматы фрейма USART перечислены в таблице 146. Вид проверки на четность выбирается битом PS (Parity Select) регистра USART_CR1. Таблица 146. Форматы фрейма.
Примечание (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. Передача LIN. Та же процедура, которая была описана выше во врезке "Передатчик", применима к передаче LIN Master, которая работает так же, как и обычная передача USART, со следующими отличиями: • Бит M очищается, чтобы сконфигурировать длину слова 8 бит. Прием 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. Рис. 305. Детектирование Break в режиме LIN (длина break 11 бит - установлен бит LBDL). Рис. 306. Детектирование break в режиме LIN, отличие от детектирования ошибки фрейма. Синхронный режим выбирается записью в 1 бита CLKEN регистра USART_CR2. В синхронном режиме должны быть очищены следующие биты: • Бит LINEN в регистре USART_CR2. USART дает возможность пользователю управлять двунаправленным синхронным последовательным обменом данных в режиме master. Вывод CK работает как выход тактов передатчика USART. Никакие тактовые импульсы не посылаются через вывод CK во время бита start и бита stop. В зависимости от состояния бита LBCL в регистре USART_CR2 тактовые импульсы будут или не будут генерироваться во время последнего достоверного бита данных (маркер адреса, address mark). Бит CPOL в регистре USART_CR2 дает возможность выбрать полярность тактов, и бит CPHA в регистре USART_CR2 позволяет выбрать фазу внешних тактов (см. рис. 307, 308 и 309). Рис. 307. Пример синхронной передачи USART. Рис. 308. Диаграммы времени тактов USART (M=0). * Бит LBCL управляет последним импульсом данных. Рис. 309. Диаграммы времени тактов USART (M=1). * Бит LBCL управляет последним импульсом данных. Рис. 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. USART может быть сконфигурирован для соответствия однопроводному полудуплексному протоколу, где линии сигналов TX и RX соединены внутри кристалла микроконтроллера (установкой бита HDSEL в регистре USART_CR3). Как только HDSEL записан в 1: • Сигналы TX и RX соединяются внутри. Кроме этой особенности, обмен данными такой же, как в обычном режиме USART. Конфликты на линии связи должны разрешаться программно (например, с использованием централизованного арбитра шины). В частности, передача никогда не блокируется аппаратно, и будет продолжаться, пока данные записываются в регистр данных при установленном бите TE. Режим смарт-карты выбирается установкой бита SCEN в регистре USART_CR3. В режиме смарт-карты должны удерживаться очищенными следующие биты: • Бит LINEN в регистре USART_CR2. Кроме того, должен быть установлен бит CLKEN, чтобы предоставить такты для смарт-карты. Интерфейс Smartcard разработан для поддержки асинхронного протокола смарт-карт, как определено стандартом ISO 7816-3. USART должен быть сконфигурирован следующим образом: • 8 бит плюс parity: M=1 и PCE=1 в регистре USART_CR1. Примечание: также можно выбрать 0.5 stop-бита для приема, но рекомендуется использовать 1.5 stop-бита и для передачи, и для приема, чтобы избежать переключения между двумя конфигурациями. Рис. 311 показывает примеры, как выглядит сигнал данных с ошибкой четности и без ошибки четности. Рис. 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. Рис. 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. Примечание: аббревиатура SIR означает Serial InfraRed, а ENDEC означает ENcoder-DECorer. Физический слой IrDA SIR задает использовать схему модуляции с возвратом к нулю и инверсией RZI (Return to Zero Inverted), которая представляет лог. 0 как импульс инфракрасного излучения (см. рис. 313). Рис. 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). Рис. 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. Когда достигнуто запрограммированное в контроллер DMA количество переданных байт, контроллер DMA сгенерирует прерывание по вектору канала DMA. В режиме передачи как только DMA записал все данные для передачи (в регистре DMA_ISR установился флаг TCIF), флаг TC может отслеживаться, чтобы удостовериться в завершении обмена USART. Это необходимо перед запретом USART или входом в режим Stop, чтобы не повредилась последняя передача. Программа должна подождать, чтобы TC перешел в 1. Флаг TC остается очищенным во время всех передач данных, и установится аппаратно по окончанию передачи последнего фрейма. Рис. 315. Передача с использованием DMA. Прием с использованием DMA. Режим DMA может быть разрешен для приема путем установки бита DMAR в регистре USART_CR3. Данные загружаются из регистра USART_DR в область SRAM, сконфигурированную с использованием периферийного устройства DMA (см. спецификацию DMA [2]), всякий раз, когда принимается байт данных. Чтобы отобразить канал DMA для приема USART, используйте следующую процедуру: 1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как источник приема. Данные будут перемещаться из этого адреса памяти после каждого события RXNE. Когда достигнуто количество данных, запрограммированное в контроллере DMA, контроллер DMA генерирует прерывание на векторе прерывания канала DMA. Бит DMAR в регистре USART_CR3 должен быть очищен программой в обработчике прерывания. Рис. 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 другого): Рис. 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. Рис. 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. Рис. 319. CTS flow control. Примечание: существует специальное поведение фреймов break - когда разрешено управление потоком CTS, передатчик не проверяет состояние входа CTS для отправки сигнала break. [Прерывания USART] Таблица 147. Запросы прерывания USART.
События прерываний USART подсоединены к одному и тому же вектору прерывания (см. рис. 320). Рис. 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).
Примечание (1): X = поддерживается; NA = не применимо. [Регистры USART] Таблица 149. Карта памяти регистров USART и их значения после сброса. Границы адресов регистров см. в секции 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:10 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). CTS (бит 9): Флаг CTS. Этот бит установится аппаратно, когда на входе CTS меняется уровень, если установлен бит CTSE. Бит CTS очищается программно (записью туда 0). Будет сгенерировано прерывание, если CTSIE=1 в регистре USART_CR3. 0: не было изменения состояния линии CTS. Примечание: этот бит недоступен для UART4 и UART5. LBD (бит 8): Флаг детектирования LIN break. Этот бит устанавливается аппаратурой, когда был обнаружен LIN break. Флаг очищается программно (записью в него 0). Будет сгенерировано прерывание, если LBDIE=1 в регистре USART_CR2. 0: LIN Break не был определен. Примечание: генерируется прерывание, когда LBD=1, если LBDIE=1. TXE (бит 7): регистр данных передачи пуст. Этот бит установится аппаратно, когда содержимое регистра TDR было передано в регистр сдвига передатчика. Будет сгенерировано прерывание, если бит TXEIE=1 в регистре USART_CR1. Бит TXE очищается при записи в регистр USART_DR. 0: данные не были переданы в регистр сдвига. Примечание: этот бит используется во время передачи одиночного буфера (single buffer transmission). TC (бит 6): передача завершена. Этот бит установится аппаратно, если передача фрейма, содержащего данные, была завершена, и если установлен бит TXE. Будет сгенерировано прерывание, если бит TCIE=1 в регистре USART_CR1. Бит TC очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Также бит TC может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication). 0: передача не завершена. RXNE (бит 5): регистр данных приема не пуст. Этот бит установится аппаратно, когда содержимое регистра сдвига RDR было передано в регистр USART_DR. Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит RXNE очищается чтением регистра USART_DR register. Также бит RXNE может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication). 0: данные не приняты. IDLE (бит 4): детектировано состояние ожидания на линии (IDLE line). Этот бит устанавливается аппаратно, когда на линии было определено состояние ожидания (Idle Line). Будет сгенерировано прерывание, если бит IDLEIE=1 в регистре USART_CR1. Бит IDLE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: не было определено состояние ожидания на линии. Примечание: бит IDLE не установится снова, пока сам не установится бит RXNE (т. е. пока не произойдет новое определение состояния ожидания на линии). ORE (бит 3): ошибка переполнения (OverRun Error). Этот бит установится аппаратно, когда принятое в настоящий момент слово в регистре сдвига готово к передаче в регистр RDR, но старое содержимое регистра данных не было прочитано (RXNE=1). Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит ORE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: не было ошибки переполнения. Примечание: когда этот бит установился, старое содержимое регистра RDR не теряется, однако регистр сдвига будет перезаписан. В случае многобуферного обмена будет сгенерировано прерывание по флагу ORE, если установлен бит EIE в регистре USART_CR3. NF (бит 2): флаг детектирования шума. Этот бит установится аппаратно, когда в принятом фрейме был обнаружен шум. Бит NF очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: шума не было. Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание на флаге NF в случае многобуферного обмена, если установлен бит EIE в регистре USART_CR3. Когда на линии нет шума, флаг NF может быть запрещен программированием в 1 бита ONEBIT, чтобы увеличить допуск USART на девиации (см. выше секцию "Допуск ухода тактовой частоты для приемника USART"). FE (бит 1): Ошибка фрейма. Этот бит установится аппаратно, когда произошла рассинхронизация, был чрезмерный шум, или был детектирован символ break. Бит FE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: не было ошибки фрейма. Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание. Если передаваемое в настоящий момент слово приведет к одновременным ошибкам frame error и overrun error, то слово будет принято, и установится только бит ORE. Будет сгенерировано прерывание по флагу FE в случае многобуферного обмена, если установлен бит EIE. PE (бит 0): ошибка проверки четности (Parity Error). Этот бит установится аппаратно, когда на приеме была обнаружена ошибка четности. Бит PE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Программа должна ожидать установки флага RXNE перед очисткой флага PE. Будет сгенерировано прерывание, если бит PEIE=1 в регистре USART_CR1. 0: нет ошибки проверки четности. Смещение адреса 0x04, значение после сброса 0xXXXXXXXX.
Биты 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: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:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). OVER8 (бит 15): режим передискретизации приема (oversampling). 0: передискретизация на 16. Примечание: передискретизация на 8 недоступна в режимах режимах Smartcard, IrDA и LIN: когда SCEN=1, IREN=1 или LINEN=1, то OVER8 принудительно сбрасывается в 0 аппаратурой. Бит 14 зарезервирован, его значение должно сохраняться в состоянии сброса (0). UE (бит 13): разрешение USART. Когда этот бит очищен, прескалеры и выходы USART останавливаются по окончанию текущей передачи байта, чтобы снизить потребление энергии. Этот бит устанавливается и очищается программой. 0: прескалер и выходы USART запрещены. M (бит 12): длина слова. Этот бит определяет длину слова данных, и как следствие длину фрейма. Бит устанавливается или очищается программно. 0: 1 start-бит, 8 бит данных, n stop-бит. Примечание: бит M не должен модифицироваться во время передачи данных (и приема, и передачи). WAKE (бит 11): метод пробуждения (wakeup). Этот бит определяет, как будет разбужен USART, бит устанавливается или очищается программой. 0: Idle Line (состояние ожидания на линии). PCE (бит 10): разрешение контроля четности (Parity Control Enable). Этот бит выбирает аппаратную генерацию и проверку четности данных. Когда контроль четности разрешен, вычисленная четность вставляется в позицию MSB (старший бит, 9-й при M=1 или 8-й при M=0), и на приеме этот бит также проверяется на четность (или нечетность). Бит PCE устанавливается и очищается программой. Будучи установленным, PCE активируется посте текущего байта (на приеме и передаче). 0: контроль четности разрешен. PS (бит 9): выбор варианта контроля четности. Этот бит выберет, как вычисляется и проверяется patity - либо на четность, либо на нечетность, когда эта функция разрешена (PCE=1). Бит устанавливается и очищается программно. Вариант контроля выбирается после текущего байта. 0: проверка по принципу четности. PEIE (бит 8): разрешение прерывания на ошибке четности. Бит устанавливается и очищается программно. 0: прерывание запрещено. TXEIE (бит 7): разрешение прерывания опустошения буфера передачи. Бит устанавливается и очищается программно. 0: прерывание запрещено. TCIE (бит 6): разрешение прерывания по завершению передачи. Этот бит устанавливается и очищается программно. 0: прерывание запрещено. RXNEIE (бит 5): разрешение прерывания по завершению приема (регистр данных приема не пуст). Этот бит устанавливается и очищается программно. 0: прерывание запрещено. IDLEIE (бит 4): разрешение прерывания на состоянии ожидания линии (IDLE). Этот бит устанавливается и очищается программно. 0: прерывание запрещено. TE (бит 3): разрешение передатчика. Этот бит разрешает работу передатчика, бит устанавливается и очищается программно. 0: передатчик запрещен. Примечание: во время передачи импульс 0 на бите TE (0, за которым следует 1) приведет к передаче преамбулы (сигнала ожидания на линии, idle line) после текущего слова, кроме режима smartcard. Когда бит TE установлен, здесь есть 1-битная задержка времени перед тем, как начнется передача. RE (бит 2): разрешение приемника. Этот бит устанавливается и очищается программно. 0: приемник запрещен. RWU (бит 1): пробуждение приемника. Бит определяет, находится ли USART в режиме молчания (mute mode) или нет. Он устанавливается и очищается программой, и может быть очищен аппаратно, когда распознана распознана последовательность пробуждения (wakeup sequence). 0: приемник в активном режиме. Примечание: перед выбором режима молчания (установкой бита RWU) USART должен сначала принять байт данных, иначе USART не может работать в режиме молчания с пробуждением на детектировании ожидания линии (wakeup by Idle line). В конфигурации пробуждения от метки адреса (Address Mark Detection wakeup, бит WAKE=1) бит RWU не может быть изменен программой, когда установлен бит RXNE. SBK (бит 0): отправка сигнала break. Установка этого бита используется для отправки символа остановки передачи (send break). Бит может быть установлен и очищен программой. Он должен быть установлен программой, и будет сброшен аппаратно во время stop-бита символа break. 0: не будет передан символ break. Смещение адреса 0x10, значение после сброса 0x00000000.
Биты 31:15 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). LINEN (бит 14): разрешение режима LIN. Этот бит устанавливается и очищается программой. 0: режим LIN запрещен. Режим LIN разрешает функцию отправки сигналов LIN Synch Break (13 бит в лог. 0), используя бит SBK в регистре USART_CR1 и функцию детектирования сигналов LIN Sync break. STOP (биты 13 и 12): биты настройки длительности стоп-бита. 00: 1 stop-бит. Примечание: 0.5 stop-бита и 1.5 stop-бита недоступны для UART4 и UART5. CLKEN (бит 11): разрешение тактирования. Этот бит позволяет разрешить работу выхода тактов CK. 0: вывод CK запрещен. Примечание: этот бит недоступен для UART4 и UART5. CPOL (бит 10): полярность тактов. Бит позволяет выбрать полярность выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPHA бит CPOL определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309). 0: постоянное значение 0 на выводе CK вне окна передачи. Примечание: этот бит недоступен для UART4 и UART5. CPHA (бит 9): фаза тактов. Бит позволяет выбрать фазу выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPOL бит CPHA определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309). 0: первое изменение сигнала синхронизации является первым перепадом захвата данных. Примечание: этот бит недоступен для UART4 и UART5. LBCL (бит 8): тактовый импульс последнего бита. Бит позволяет выбрать, связан ли тактовый импульс с последним переданным битом данных (MSB). Тактовые импульсы выводятся на ножку CK в синхронном режиме. 0: тактовый импульс на вывод CK на последнем бите не выводится. Примечания: последний бит это 8-й или 9-й бит данных, в зависимости от формата 8/9 бит, выбираемого битом M регистра USART_CR1. Бит LBCL недоступен для UART4 и UART5. Бит 7 зарезервирован, его значение должно сохраняться в состоянии сброса (0). LBDIE (бит 6): разрешение прерывания детектирования LIN break. Маска прерывания break (детектирование break с использованием разделителя break). 0: прерывание запрещено. LBDL (бит 5): длина детектирования LIN break. Позволяет выбрать между 11 битами или 10 битами детектирования break. 0: 10-bit break detection. Бит 4 зарезервирован, его значение должно сохраняться в состоянии сброса (0). ADD[3:0] (биты 3:0): адрес узла USART. Это битовое поле дает адрес узла USART, используется в многопроцессорном обмене во время режима молчания (mute mode), для пробуждения USART при детектировании метки адреса (address mark detection). Смещение адреса 0x14, значение после сброса 0x00000000.
Биты 31:12 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). ONEBIT (бит 11): разрешение режима одной выборки на бит. Дает возможность выборки метода оцифровки сигнала. Когда выбран метод одной выборки на бит, флаг детектирования шума (noise detection flag, NF) запрещен. 0: мажоритарный метод трех выборок на бит. Примечание: функция ONEBIT применима только к битам данных. Это не относится к анализу бита START. CTSIE (бит 10): разрешение прерывания CTS. 0: прерывание запрещено. Примечание: этот бит недоступен для UART4 и UART5. CTSE (бит 9): разрешение CTS. 0: запрещено аппаратное управление потоком CTS. Примечание: этот бит недоступен для UART4 и UART5. RTSE (бит 8): разрешение RTS. 0: запрещено аппаратное управление потоком RTS. Примечание: этот бит недоступен для UART4 и UART5. DMAT (бит 7): разрешение DMA передатчика. Этот бит устанавливается и сбрасывается программой. 0: режим DMA для передачи запрещен. DMAR (бит 6): разрешение DMA приемника. Этот бит устанавливается и сбрасывается программой. 0: режим DMA для приема запрещен. SCEN (бит 5): разрешение режима Smartcard. 0: режим Smartcard запрещен. Примечание: этот бит недоступен для UART4 и UART5. NACK (бит 4): разрешение Smartcard NACK. 0: запрещена передача NACK в случае ошибки четности. Примечание: этот бит недоступен для UART4 и UART5. HDSEL (бит 3): выбор полудуплекса. Бит выбирает режим Single-wire Half-duplex. 0: режим полудуплекса не выбран. IRLP (бит 2): низкопотребляющий режим IrDA (Low-power mode). Бит используется для выбора между нормальным IrDA и низкопотребляющим IrDA. 0: нормальный режим. IREN (бит 1): разрешение режима IrDA. Этот бит устанавливается и сбрасывается программой. 0: 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: прерывание запрещено. Смещение адреса 0x18, значение после сброса 0x00000000.
Биты 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: зарезервировано - не программируйте это значение. В нормальном режиме IrDA: поле PSC должно быть установлено в 00000001. В режиме Smartcard: PSC[4:0]: значение прескалера. Используется программирование прескалера для деления системной тактовой частоты, чтобы предоставить такты смарт-карты. Значение, заданное в этом регистре (5 значащих бит), умножается на 2, чтобы получить коэффициент деления исходной частоты тактов: 00000: зарезервировано - не программируйте это значение. Примечание: биты [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. |