Регистры USART в микроконтроллерах STM32F100xx
USART _ SR (Status register): регистр состояния (таблица 1); USART _ DR (Data register): регистр данных (таблица 2); USART _ BRR (Baud rate register): регистр скорости передачи (таблица 3); USART _ CR 1 (Control register 1): регистр управления 1 (таблица 4); USART _ CR 2 (Control register 2): регистр управления 2 (таблица 5); USART _ CR 3 (Control register 3): регистр управления 3 (таблица 6); USART _ GTPR (Guard time and prescaler register): регистр защитного интервала и прескалера (таблица 7).
Таблица 2 – Формат регистра состояния USART_SR (Status register)
Значение после сброса: 0x00C0. Примечание. После сброса установлены флаги TXE (регистр передаваемых данных пуст) и TC (передача завершена). CTS: CTS flag - флаг изменения состояния nCTS. Устанавливается аппаратно, когда происходит переключение сигнала на входе nCTS. Если установлен бит CTSIE (USART_CR3.CTSIE==1), то при установке флага генерируется прерывание. Флаг сбрасывается программно записью 0. LBD : LIN break detection flag - флаг приёма посылки Break. Устанавливается аппаратно при обнаружении посылки Break на входе; если установлен бит LBDIE (USART_CR3.LBDIE==1), то генерируется прерывание. Флаг сбрасывается программно записью 0. TXE: Transmit data register empty - флаг устанавливается аппаратно, когда содержимое регистра передаваемых данных TDR пересылается в сдвигающий регистр (доступ к TDR осуществляется путём записи в регистр USART_DR). Если установлен бит TXEIE (USART_CR1.TXEIE==1), генерируется прерывание. Флаг сбрасывается путём записи в регистр USART_DR. Примечание: 1) Этот бит используется в процессе однобуферной передачи. 2) После сброса этот бит установлен. TC: Transmission complete - флаг завершения передачи, устанавливается аппаратно, если передача фрейма завершена, и флаг TXE установлен (т.е. регистр передаваемых данных пуст, больше нет данных для передачи). Если USART_CR1.TCIE==1, то при установке флага генерируется прерывание. Флаг сбрасывается программно последовательностью действий: чтение регистра USART_SR, затем запись в USART_DR. Также бит может быть сброшен записью в него 0. Примечание. После сброса этот бит установлен. RXNE: Read data register not empty - регистр данных для чтения не пуст. Флаг устанавливается аппаратно, когда содержимое принимающего сдвигающего регистра передаётся в регистр принимаемых данных RDR. Если USART_CR1.RXNEIE==1, при этом генерируется прерывание. Флаг сбрасывается чтением из регистра USART_DR. Также бит может быть сброшен записью в него 0. IDLE : IDLE line detected - линия свободна. Флаг устанавливается аппаратно, если обнаружено что линия свободна. Это происходит, если получен целый фрейм единиц (лог. 1 на входе в течение целого фрейма). При этом генерируется прерывание, если USART_CR1.IDLEIE==1. Флаг сбрасывается программно последовательностью действий: чтение регистра USART_SR с последующим чтением из регистра USART_DR. Примечание. IDLE бит не будет установлен снова до тех пор, пока не произойдёт установка флага RXNE (т.е. следующее освобождение линии будет обнаружено только после приёма данных). ORE: Overrun error - ошибка переполнения. Флаг устанавливается аппаратно, когда слово, полученное в сдвигающей регистр готово к перемещению в регистр принимаемых данных RDR, но RXNE==1 (регистр RDR не пуст, содержит ещё не прочитанные из него принятые USART данные). Если USART_CR1.RXNEIE==1, то при установке флага генерируется исключение. Флаг сбрасывается программно последовательностью действий: чтение из регистра USART_SR с последующим чтением из USART_DR. Примечание. Когда флаг устанавливается, содержимое регистра RDR не теряется, но сдвигающий регистр будет перезаписан следующими принимаемыми данными. В случае мультибуферной связи, прерывание генерируется при установке флага ORE, если установлен бит USART_CR3.EIE. NF: Noise detected flag - флаг устанавливается аппаратно при обнаружении шума в полученном фрейме. Сбрасывается программно последовательностью действий: чтение из регистра USART_SR, затем чтение из регистра USART_DR. Примечание. 1) Этот бит не генерирует прерывание, но если он устанавливается, это происходит в тот же момент, что и установка флага RXNE (регистр данных для чтения не пуст), а этот флаг сам генерирует прерывание. В случае мультибуферной связи прерывание генерируется при установке флага NF, если установлен в 1 бит EIE (USART_CR3.EIE==1). 2) В заведомо свободных от шума линиях, флаг NF может быть отключён установкой в 1 бита USART_CR3.ONEBITE, что увеличивает устойчивость USART к отклонениям тактовой частоты приёмника (к рассогласованию скоростей передатчика и приёмника). FE: Framing error - ошибка фрейма. Флаг устанавливается аппаратно в случае нарушения синхронизации, чрезмерного шума в линии, при обнаружении символа Break. Флаг сбрасывается программно последовательностью действий: чтение из регистра USART_SR, затем чтение из регистра USART_DR. Примечание. В отношении генерации прерывания этот флаг полностью аналогичен флагу NF. PE: Parity error - ошибка чётности. Флаг устанавливается аппаратно, когда в принятом фрейме обнаружена ошибка чётности (если контроль чётности включён). Если USART_CR1.PEIE==1, то генерируется прерывание. Флаг сбрасывается программно последовательностью действий: чтение из регистра USART_SR, затем чтение либо запись регистра USART_DR. Перед сбросом флага, программа должна дождаться установки флага RXNE (регистр данных для чтения не пуст).
Таблица 2 – Формат регистра данных USART_DR (Data register)
Значение после сброса: неопределённое. DR[8:0]: Data value - регистр данных. Содержит полученный или передаваемый символ, в зависимости от того, производится чтение из него или запись в регистр. Регистр выполняет двойную функцию за счёт того, что он является составным, он объединяет в себе два регистра: один для передачи (TDR) и один для приёма (RDR). TDR обеспечивает загрузку данных в выходной сдвигающий регистр, сдвигающий регистр преобразует загруженное в него слово в последовательную форму. Получаемые в последовательной форме данные накапливаются в приёмном сдвигающем регистре, когда фрейм получен полностью, данные из сдвигающего регистра передаются в регистр RDR, который реализует параллельный интерфейс между внутренней шиной микроконтроллера и входным сдвигающим регистром. Когда осуществляется передача данных с включённым контролем чётности (USART_CR1.PCE==1), старший бит, записываемый в регистр USART_DR (бит [7] или [8], в зависимости от выбранной длины слова, см. USART_CR1.M), не учитывается. Он замещается вычисленным битом чётности. При получении данных с включённым контролем чётности, при чтении из USART_DR будем получать значение, содержащее полученный бит чётности. DIV_Mantissa[11:0]: mantissa of USARTDIV - целая часть коэффициента деления делителя частоты. DIV_Fraction[3:0]: fraction of USARTDIV - дробная часть коэффициента деления. В режиме с OVER8==1 в битовом поле DIV_Fraction[3:0] старший бит [3] не используется и должен быть сброшен.
Таблица 3 – Формат регистра скорости передачи USART_BRR (Baud rate register)
Значение после сброса: 0x0000. С помощью регистра USART_BRR задаётся скорость передачи - одновременно как для приёмника USART, так и для передатчика.
Рисунок 3 – Установка скорости передачи USART
USART получает тактовый сигнал с шины APB2 (USART1) или с шины APB1 (USART2, USART3). По умолчанию, и в том, и в другом случае частота тактового сигнала равна тактовой частоте ядра, которая, в свою очередь, по умолчанию для устройств STM32F100xx обычно составляет 24 МГц. Тактовый сигнал поступает на вход делителя, который управляется регистром USART_BRR. Коэффициент деления зависит от значения в регистре USART_BRR, обозначим коэффициент как USARTDIV. С выхода делителя сигнал подаётся на схему управления приёмником, а на схему управления передатчиком тактовый сигнал подаётся через ещё один делитель с коэффициентом 16 или 8, в зависимости от бита USART_CR1.OVER8. В общем виде его коэффициент деления выражается соотношением 8*(2-OVER8), т.е. 16 при OVER=0 и 8 при OVER=1. Скорость передачи равна частоте тактового сигнала, который получает передатчик. Приёмник получает тактовый сигнал с частотой в 8 или 16 раз больше - это требуется для реализации метода оверсэмрлинга. Таким образом, скорость передачи S в k раз меньше частоты f тактового сигнала USART: S=f/k. Коэффициент k - общий коэффициент деления двух названных выше делителей частоты, k=USARTDIV*8*(2-OVER8). Величина k выражается целым числом, начиная с 16 или 8 (если OVER8=0 или 1) с точностью до 1. Соответственно, USARTDIV выражается дробным числом (с фиксированной точкой, 4 бита или 3 бита после точки). С этим связано разделение регистра USART_BRR на целую и дробную части: DIV_Mantissa[11:0] и DIV_Fraction[3:0]. В руководстве указано, что USARTDIV=DIV_Mantissa+DIV_Fraction/(8*(2-OVER8)). Соотношения между USART_BRR, DIV_Mantissa и DIV_Fraction: DIV_Mantissa=USART_BRR>>4; DIV_Fraction=USART_BRR&0xF. Следовательно, в режиме с OVER==0 получаем, что S=f/USART_BRR, т.е. общий коэффициент деления просто равен содержимому регистра USART_BRR, если рассматривать его как целое число. Соответственно, USART_BRR=round(f/S). В режиме с OVER==1 получается несколько более сложное соотношение из-за того, что бит [3] регистра не используется и должен быть равен 0. В этом случае
Таблица 4 – Формат регистра управления USART_CR1 (Control register 1)
Значение после сброса: 0x0000 UE: USART enable - включить USART (включается установкой бита в 1). Когда бит программно сбрасывается, в конце передачи текущего байта прекращается работа прескалеров и выходов для уменьшения потребления тока. M: Word length - длина слова, задаёт количество бит данных в одном фрейме. Бит не должен модифицироваться в процессе обмена данными (это касается как передачи, так и приёма). 0: 1 старт-бит, 8 бит данных, n стоп-битов (количество стоп-битов программируется с помощью USART_CR2.STOP); 1: 1 старт-бит, 9 бит данных, n стоп-битов. Примечание. Бит чётности считается битом данных. WAKE: Wakeup method - метод пробуждения USART. 0: "линия свободна" (Idle line); 1: адресная метка. PCE: Parity control enable - включить аппаратный контроль чётности (генерация бита чётности при передаче данных и проверка в принимаемых данных). Когда контроль чётности включён, бит чётности помещается в позицию старшего бита данных (9-й или 8-й бит, в зависимости от выбранной длины слова). После установки, контроль чётности активируется после завершения приёма/передачи текущего бита. 0: контроль чётности отключён; 1: контроль чётности включён. PS: Parity selection - выбор метода контроля чётности. Выбор происходит после завершения передачи/приёма текущего байта. 0: контроль на чётность; 1: контроль на нечётность. PEIE: PE interrupt enable - разрешение прерывания от PE. 0: прерывание запрещено; 1: генерируется прерывание от USART, когда USART_SR.PE==1. TXEIE: TXE interrupt enable - разрешение прерывания от TXE. 0: прерывание запрещено; 1: генерируется прерывание от USART, когда USART_SR.TXE==1. TCIE: Transmission complete interrupt enable - разрешение прерывания после завершения передачи. 0: прерывание запрещено; 1: генерируется прерывание от USART, когда USART_SR.TC==1. RXNEIE: RXNE interrupt enable - разрешение прерывания от RXNE. 0: прерывание запрещено; 1: генерируется прерывание от USART, когда USART_SR.ORE==1 или USART_SR.RXNE==1. IDLEIE: IDLE interrupt enable - разрешение прерывания при обнаружении, что "линия свободна" (Idle line). 0: прерывание запрещено; 1: генерируется прерывание от USART, когда USART_SR.IDLE==1. TE: Transmitter enable - включить передатчик USART (включается установкой бита в 1). Примечание. 1. Если в процессе передачи сформировать 0-импульс в бите TE (сбросить в 0 с последующей установкой в 1), происходит передача преамбулы (формируется сигнал "линия свободна" - Idle line) вслед за текущим словом. Преамбула не формируется в smartcard режиме. 2. После установки бита TE делается задержка длительностью в 1 бит (длительностью 1/S, где S - скорость передачи данных) перед началом передачи данных. RE: Receiver enable - включить приёмник USART (включается установкой бита в 1). После установки бита, приёмник начинает поиск старт-бита во входном сигнале. RWU: Receiver wakeup - переводит USART в тихий режим. Этот бит устанавливается и сбрасывается программно, а также может сбрасываться аппаратно при обнаружении пробуждающей последовательности. 0: приёмник в активном режиме; 1: приёмник в тихом режиме. Примечание. 1. Прежде чем установить бит RWU, USART должен получить байт данных, иначе он не сможет функционировать в тихом режиме с пробуждением при обнаружении свободной линии (Idle line). 2. В конфигурации с пробуждением при обнаружении адресной метки (бит WAKE==1), бит RWU не может быть программно модифицирован, пока установлен бит RXNE. SBK: Send break - отправить Break посылку. Бит может быть установлен и сброшен программно. Его необходимо программно установить в 1 для формирования Break посылки, он будет сброшен аппаратно во время формирования stop-бита в Break фрейме. 0: Break-символ не передаётся; 1: Break-символ будет передан. LINEN: LIN mode enable - включить режим LIN (включается установкой бита в 1). В режиме LIN имеется возможность отправлять и принимать синхронизирующую посылку Break. STOP[1:0]: STOP bits - битовое поле задаёт количество используемых стоп-битов. 00: 1 стоп-бит; 01: 0.5 стоп-бита; 10: 2 стоп-бита; 11: 1.5 стоп-бита.
Таблица 5 – Формат регистра управления USART_CR2 (Control register 2)
Значение после сброса: 0x0000. Примечание: биты CLKEN, CPOL, CPHA, LBCL; длительность стоп-битов 0.5 и 1.5 недоступны для UART4 и UART5. CLKEN: Clock enable - включить выход SCLK (включается установкой бита в 1). CPOL: Clock polarity - полярность тактового сигнала на выходе SCLK в синхронном режиме. Этот бит используется совместно с CPHA битом. 0: 0 на выходе SCLK в отсутствие передачи данных; 1: 1 на выходе SCLK в отсутствие передачи данных. CPHA: Clock phase - фаза тактового сигнала на выходе SCLK в синхронном режиме. 0: первый захват данных происходит по первому перепаду тактового сигнала; 1: первый захват данных происходит по второму перепаду тактового сигнала. Перепады тактового сигнала, по которым фиксируются данные, приходятся примерно на середину передаваемого (принимаемого) бита. LBCL: Last bit clock pulse - разрешить тактовый импульс на выходе SCLK для последнего бита передаваемых данных в синхронном режиме. 0: тактовый импульс не формируется для последнего бита (старшего бита) во фрейме; 1: тактовый импульс формируется для последнего бита. Биты CPOL, CPHA, LBCL не должны изменяться при включённом передатчике USART. LBDIE: LIN break detection interrupt enable - разрешить прерывание при обнаружении Break посылки. 0: прерывание запрещено; 1: прерывание генерируется всякий раз, когда бит USART_SR.LBD==1. LBDL: lin break detection length - дина детектируемой Break посылки. 0: обнаружение 10-битовой Break посылки; 1: обнаружение 11-битовой Break посылки. ADD[3:0]: Address of the USART node - битовое поле, с помощью которого назначается адрес узла USART; используется для мультипроцессорной связи для пробуждения из тихого состояния при обнаружении адресной метки.
Таблица 6 – Формат регистра управления USART_CR3 (Control register 3)
Значение после сброса: 0x0000. Примечание: биты CTSIE, CTSE, RTS, SCEN, NACK недоступны в устройствах UART4 и UART5. ONEBITE: One sample bit method enable - выбор метода сэмплирования входного сигнала. 0: используется трёхбитный метод; 1: используется однобитный метод; выбор этого метода отключает флаг обнаружения шума NF. CTSIE: CTS interrupt enable - разрешить прерывание от CTS. 0: прерывание запрещено; 1: прерывание генерируется всякий раз, когда устанавливается в 1 бит USART_SR.CTS. CTSE: CTS enable - включить контроль сигнала CTS. 0: отключить аппаратный контроль управления потоком CTS; 1: включить аппаратный контроль управления потоком CTS, передача нового фрейма может начаться только в случае, когда на входе nCTS установлен низкий уровень nCTS==0. На передачу текущего фрейма сигнал nCTS не влияет. RTSE: RTS enable - включить управление сигналом RTS. 0: отключить аппаратный контроль управлением потоком посредством сигнала RTS. 1: разрешить прерывание от RTS, данные запрашиваются только при наличии свободного места в приёмном буфере - на выходе nRTS устанавливается 0, если данные могут быть приняты. DMAT, DMAR - управление обменом с использованием DMA. SCEN: Smartcard mode enable - включить смарт-карт режим (включается установкой бита в 1). NACK: Smartcard NACK enable - в смарт-карт режиме включить передачу NACK (нет подтверждения) в случае ошибки чётности (включается установкой бита в 1). HDSEL: Half-duplex selection - выбор полудуплексного режима (включается установкой бита в 1). IRLP: IrDA low-power - выбор между нормальным и низкопотребляющим IrDA режимами: 0: нормальный режим; 1: режим с низким потреблением. IREN: IrDA mode enable - включить режим IrDA (включается установкой бита в 1). EIE: Error interrupt enable - разрешить прерывание в случае ошибки при мультибуферном обмене (генерировать прерывание при установке в регистре USART_SR флага FE - ошибка фрейма, ORE - переполнение, NF - шум). Мультибуферный обмен включается установкой в 1 бита USART_CR3.DMAR. 0: прерывания запрещены; 1: прерывание генерируется всякий раз, когда USART_CR3.DMAR==1 и в регистре USART_SR хотя бы один из флагов FE, ORE или NF установлен в 1.
Таблица 6 – Формат регистра защитного интервала и прескалера USART_GTPR (Guard time and prescaler register)
Значение после сброса: 0x0000. Примечание: этот регистр недоступен в устройствах UART4 и UART5. GT[7:0]: Guard time value - защитный интервал времени. Это битовое поле используется в смарт-карт режиме и задаёт время задержки перед установкой флага "Transmission Complete". Величина задаётся в количестве тактов с частотой, равной скорости передачи данных. PSC[7:0]: Prescaler value - значение для предварительного делителя частоты; используется в режимах IrDA и смарт-карт; восьмибитовое значение определяет коэффициент деления для прескалера, который делит частоту системного тактового сигнала. Значение 0 зарезервировано и не должно использоваться. Значение в обычном режиме IrDA: 1. Значения больше 1 используются в режимах с малым потреблением. В смарт-карт режиме используется для обеспечения требуемой тактовой частоты; в этом режиме делитель определяется 5 младшими битами поля, значение делителя получается умножением поля на 2 (значение поля 1 соответствует делителю 2, 2 соответствует делителю 4 и т.д.).
Содержание отчета
Отчет по лабораторной работе должен содержать: - титульный лист; - название и цель работы; - ответы на контрольные вопросы.
4 Контрольные вопросы
1) Назначение UART и USART. 2) Приведите схемы соединения устройств для обмена по UART и USART. 3) Опишите формат передачи данных по UART и USART. 4) Как осуществляется управление передачей по UART и USART? 5) Перечислите характеристики и сигналы интерфейса RS-232. 6) Приведите схему гальванической развязки устройств при подключении к COM-порту. 7) Опишите основные возможности USART в STM32. 8) Приведите и опишите функциональную схему USART в STM32. 9) Опишите структуру и назначение регистров USART в STM32. Приведите формат и назначение битов отдельного регистра USART в STM32 по заданию преподавателя.
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (243)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |