Status register (USART_SR)

Регистр статуса USART

Смещение (Address offset): 0x00

Reset value: 0x0000'00С0

3130292827262524
Reserved
------------------------
00000000
2322212019181716
Reserved
------------------------
00000000


15141312111098
Reserved CTS LBD
------------------rc_w0rc_w0
00000000
76543210
TXE TC RXNE IDLE ORE NE FE PE
rrc_w0rc_w0rrrrr
11000000


Bits 31:10
Reserved
Forced by hardware to 0
Зарезервировано. Аппаратно установлено в 0
Bit 9
CTS
CTS flag
CTS-флаг устанавливается аппаратно при изменении состояния входа CTS, если установлен бит CTSE (бит 9 USART_CR3). Сбрасывается программно записью 0. Недоступен для UART4 и UART5.

 0 : линия CTS без изменений

 1 : состояние линии CTS изменилось

Bit 8
LBD
LIN break detection flag
Устанавливается аппаратно при обнаружении break-символа на линии LIN. Сбрасывается программно записью 0. Прерывание генерируется при LBDIE = 1 в регистре USART_CR2.

 0 : break-символ на линии LIN отсутствует

 1 : обнаружен break-символ на линии LIN

Bit 7
TXE
Transmit data register empty
Устанавливается аппаратно при передаче содержимого регистра TDR в регистр сдвига. Прерывание генерируется, если TXEIE = 1 в регистре USART_CR1. Сбрасывается программно записью в регистр USART_DR.

 0 : данные не переданы из регистра TDR в сдвиговый регистр

 1 : данные переданы из регистра TDR в сдвиговый регистр. Регистр TDR свободен для записи.

Используется только при передаче с одним буфером.

Bit 6
TC
Transmission complete
Передача завершена

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

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

Устанавливается аппаратно, если переданы данные из сдвигового регистра и установлен бит TXE. Прерывание генерируется, если TCIE = 1 в регистре USART_CR1.

Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR). Для мультибуферной связи можно сбрасывать программно записью в него нуля.

Bit 5
RXNE
Read data register not empty
Регистр входных данных RDR (USART_DR) принял данные из сдвигового регистра.

 0 : регистр RDR не принял данные из сдвигового регистра.

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

Устанавливается аппаратно когда данные входного сдвигового регистра переданы в регистр USART_DR.

Прерывание генерируется, если RXNIE = 1 в регистре USART_CR1.

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

Bit 4
IDLE
IDLE line detected
Линия свободна

 0 : линия связи занята

 1 : линия связи свободна

Устанавливается аппаратно при обнаружении незанятой линии.

Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).

Бит IDLE не будет установлен, пока занят регистр RDR (установлен бит RXNE). [уточнить перевод/формулировку]

Bit 3
ORE
Overrun error
Ошибка переполнения

 0 : нет ошибки

 1 : обнаружена ошибка переполнения

Устанавливается аппаратно, когда данные приняты в сдвиговый регистр и готовы к передаче в регистр RDR, но приёмник не забрал из RDR предыдущие данные.

При установке бита ORE данные в регистре RDR (USART_DR) не будут потеряны, но сдвиговый регистр будет перезаписан.

Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).

В мультибуферной связи ошибка переполнения генерирует прерывание, если установлен бит EIE регистра USART_CR3.

Bit 2
NE
Noise error flag
Флаг шума в линии

 0 : нет ошибки

 1 : обнаружена ошибка приёма фрейма из-за помех в линии связи

Устанавливается аппаратно, когда приёмник обнаружил чрезмерный шум в линии связи.

Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).

Эта ошибка не генерирует прерывание, кроме мультибуферной связи (Multi Buffer communication), т.к. ошибка фрейма одновременно устанавливается бит RXNE, который сам генерирует прерывание.

В мультибуферной связи шум в линии связи генерирует прерывание, если установлен бит EIE регистра USART_CR3.

Bit 1
FE
Framing error
Ошибка фрейма

 0 : нет ошибки

 1 : обнаружена ошибка приёма фрейма

Устанавливается аппаратно, когда приёмник обнаружил рассинхронизацию, чрезмерный шум в линии или break-символ.

Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).

Эта ошибка не генерирует прерывание, кроме мультибуферной связи (Multi Buffer communication), т.к. ошибка фрейма одновременно устанавливается бит RXNE, который сам генерирует прерывание.

Если приёмник обнаружил ошибку фрейма одновременно с ошибкой переполнения (бит ORE), то устанавливается только бит ORE. [в документации "только один бит". какой???]

В мультибуферной связи ошибка фрейма генерирует прерывание, если установлен бит EIE регистра USART_CR3.

Bit 0
PE
Parity error
Ошибка контроля чётности.

 0 : нет ошибки контроля чётности

 1 : обнаружена ошибка контроля чётности

Устанавливается аппаратно, когда приёмник обнаружил ошибку контроля чётности.

Сбрасывается программной последовательностью:

 - дождаться установки флага RXNE (данные переданы из сдвигового регистра в регистр RDR)

 - последовательно прочитать данные из регистров: статуса (USART_SR) и данных (USART_DR)

Прерывание генерируется если PEIE = 1 в регистре USART_CR1.



/*******************  Bit definition for USART_SR register  *******************/

#define  USART_SR_PE               ((uint16_t)0x0001)            /* Parity Error */
#define  USART_SR_FE               ((uint16_t)0x0002)            /* Framing Error */
#define  USART_SR_NE               ((uint16_t)0x0004)            /* Noise Error Flag */
#define  USART_SR_ORE              ((uint16_t)0x0008)            /* OverRun Error */

#define  USART_SR_IDLE             ((uint16_t)0x0010)            /* IDLE line detected */

#define  USART_SR_RXNE             ((uint16_t)0x0020)            /* Read Data Register Not Empty */
#define  USART_SR_TC               ((uint16_t)0x0040)            /* Transmission Complete */
#define  USART_SR_TXE              ((uint16_t)0x0080)            /* Transmit Data Register Empty */

#define  USART_SR_LBD              ((uint16_t)0x0100)            /* LIN Break Detection Flag */
#define  USART_SR_CTS              ((uint16_t)0x0200)            /* CTS Flag */