Status register (USART_SR)
Регистр статуса USART
Смещение (Address offset): 0x00
Reset value: 0x0000'00С0
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
Reserved | CTS | LBD | |||||
--- | --- | --- | --- | --- | --- | rc_w0 | rc_w0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TXE | TC | RXNE | IDLE | ORE | NE | FE | PE |
r | rc_w0 | rc_w0 | r | r | r | r | r |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
0 : линия CTS без изменений
1 : состояние линии CTS изменилось
0 : break-символ на линии LIN отсутствует
1 : обнаружен break-символ на линии LIN
0 : данные не переданы из регистра TDR в сдвиговый регистр
1 : данные переданы из регистра TDR в сдвиговый регистр. Регистр TDR свободен для записи.
Используется только при передаче с одним буфером.
0 : передача данных не завершена.
1 : передача данных завершена.
Устанавливается аппаратно, если переданы данные из сдвигового регистра и установлен бит TXE. Прерывание генерируется, если TCIE = 1 в регистре USART_CR1.
Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR). Для мультибуферной связи можно сбрасывать программно записью в него нуля.
0 : регистр RDR не принял данные из сдвигового регистра.
1 : данные приняты в регистр RDR и готовы для чтения.
Устанавливается аппаратно когда данные входного сдвигового регистра переданы в регистр USART_DR.
Прерывание генерируется, если RXNIE = 1 в регистре USART_CR1.
Сбрасывается программно чтением из регистра USART_DR. Для мультибуферной связи можно сбрасывать программно записью в него нуля.
0 : линия связи занята
1 : линия связи свободна
Устанавливается аппаратно при обнаружении незанятой линии.
Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).
Бит IDLE не будет установлен, пока занят регистр RDR (установлен бит RXNE). [уточнить перевод/формулировку]
0 : нет ошибки
1 : обнаружена ошибка переполнения
Устанавливается аппаратно, когда данные приняты в сдвиговый регистр и готовы к передаче в регистр RDR, но приёмник не забрал из RDR предыдущие данные.
При установке бита ORE данные в регистре RDR (USART_DR) не будут потеряны, но сдвиговый регистр будет перезаписан.
Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).
В мультибуферной связи ошибка переполнения генерирует прерывание, если установлен бит EIE регистра USART_CR3.
0 : нет ошибки
1 : обнаружена ошибка приёма фрейма из-за помех в линии связи
Устанавливается аппаратно, когда приёмник обнаружил чрезмерный шум в линии связи.
Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).
Эта ошибка не генерирует прерывание, кроме мультибуферной связи (Multi Buffer communication), т.к. ошибка фрейма одновременно устанавливается бит RXNE, который сам генерирует прерывание.
В мультибуферной связи шум в линии связи генерирует прерывание, если установлен бит EIE регистра USART_CR3.
0 : нет ошибки
1 : обнаружена ошибка приёма фрейма
Устанавливается аппаратно, когда приёмник обнаружил рассинхронизацию, чрезмерный шум в линии или break-символ.
Сбрасывается программно последовательным чтением из регистров: статуса (USART_SR) и данных (USART_DR).
Эта ошибка не генерирует прерывание, кроме мультибуферной связи (Multi Buffer communication), т.к. ошибка фрейма одновременно устанавливается бит RXNE, который сам генерирует прерывание.
Если приёмник обнаружил ошибку фрейма одновременно с ошибкой переполнения (бит ORE), то устанавливается только бит ORE. [в документации "только один бит". какой???]
В мультибуферной связи ошибка фрейма генерирует прерывание, если установлен бит EIE регистра USART_CR3.
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 */