[Home] [Donate!] [Контакты]

Регистры USART в микроконтроллерах STM32F100xx

Оглавление
UART и USART. COM-порт. Часть 1
Регистры USART в микроконтроллерах STM32F100xx
USART_SR (Status register): регистр состояния
USART_DR (Data register): регистр данных
USART_BRR (Baud rate register): регистр скорости передачи
USART_CR1 (Control register 1): регистр управления 1
USART_CR2 (Control register 2): регистр управления 2
USART_CR3 (Control register 3): регистр управления 3
USART_GTPR (Guard time and prescaler register): регистр защитного интервала и прескалера
UART и USART. COM-порт. Часть 2

USART_SR (Status register)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved CTS LBD TXE TC RXNE IDLE ORE NF FE PE  
rc_w0 rc_w0 r rc_w0 rc_w0 r r r r r  

Значение после сброса: 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 (регистр данных для чтения не пуст).


USART_DR (Data register)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  
Reserved  
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved DR[8:0]  
rw rw rw rw rw rw rw rw rw  

Значение после сброса: неопределённое.

DR[8:0]: Data value - регистр данных. Содержит полученный или передаваемый символ, в зависимости от того, производится чтение из него или запись в регистр. Регистр выполняет двойную функцию за счёт того, что он является составным, он объединяет в себе два регистра: один для передачи (TDR) и один для приёма (RDR). TDR обеспечивает загрузку данных в выходной сдвигающий регистр, сдвигающий регистр преобразует загруженное в него слово в последовательную форму. Получаемые в последовательной форме данные накапливаются в приёмном сдвигающем регистре, когда фрейм получен полностью, данные из сдвигающего регистра передаются в регистр RDR, который реализует параллельный интерфейс между внутренней шиной микроконтроллера и входным сдвигающим регистром.

Когда осуществляется передача данных с включённым контролем чётности (USART_CR1.PCE==1), старший бит, записываемый в регистр USART_DR (бит [7] или [8], в зависимости от выбранной длины слова, см. USART_CR1.M), не учитывается. Он замещается вычисленным битом чётности.

При получении данных с включённым контролем чётности, при чтении из USART_DR будем получать значение, содержащее полученный бит чётности.


USART_BRR (Baud rate register)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  
Reserved  
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
DIV_Mantissa[11:0] DIV_Fraction[3:0]  
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw  

Значение после сброса: 0x0000.

DIV_Mantissa[11:0]: mantissa of USARTDIV - целая часть коэффициента деления делителя частоты.

DIV_Fraction[3:0]: fraction of USARTDIV - дробная часть коэффициента деления. В режиме с OVER8==1 в битовом поле DIV_Fraction[3:0] старший бит [3] не используется и должен быть сброшен.

С помощью регистра USART_BRR задаётся скорость передачи - одновременно как для приёмника USART, так и для передатчика.

Система тактирования USART
Рис. %img:udiv

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. В этом случае
USART_BRR=k&0x7|(k<<1)&0xFFF0; где k=round(f/S). В обратную сторону:
k=((USART_BRR&0xFFF0)>>1)|USART_BRR&0x7.


USART_CR1 (Control register 1)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  
Reserved  
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
OVER8 Res. UE M WAKE PCE PS PEIE TXEIE TCIE RXNEIE IDLEIE TE RE RWU SBK  
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw  

Значение после сброса: 0x0000

OVER8: Oversampling mode - выбор метода оверсэмплинга.
0: 16-кратный;
1: 8-кратный (недоступен в режимах Smartcard, IrDA и LIN; в этих режимах бит сбрасывается аппаратно).

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-символ будет передан.


USART_CR2 (Control register 2)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  
Reserved  
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Res. LINEN STOP[1:0] CLKEN CPOL CPHA LBCL Res. LBDIE LBDL Res. ADD[3:0]  
rw rw rw rw rw rw rw rw rw rw rw rw rw  

Значение после сброса: 0x0000
Примечание: биты CLKEN, CPOL, CPHA, LBCL; длительность стоп-битов 0.5 и 1.5 недоступны для UART4 и UART5.

LINEN: LIN mode enable - включить режим LIN (включается установкой бита в 1). В режиме LIN имеется возможность отправлять и принимать синхронизирующую посылку Break.

STOP[1:0]: STOP bits - битовое поле задаёт количество используемых стоп-битов.
00: 1 стоп-бит;
01: 0.5 стоп-бита;
10: 2 стоп-бита;
11: 1.5 стоп-бита.

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; используется для мультипроцессорной связи для пробуждения из тихого состояния при обнаружении адресной метки.


USART_CR3 (Control register 3)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  
Reserved  
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved ONEBITE CTSIE CTSE RTSE DMAT DMAR SCEN NACK HDSEL IRLP IREN EIE  
rw rw rw rw rw rw rw rw rw rw rw rw  

Значение после сброса: 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.


USART_GTPR (Guard time and prescaler register)
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] PSC[7:0]  
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw  

Значение после сброса: 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 и т.д.).

author: hamper; date: 2016-01-19; modified: 2016-01-27
  Рейтинг@Mail.ru