[Home] | [Donate!] [Контакты] |
[<< UART и USART. COM-порт. Часть 1] | [UART и USART. COM-порт. Часть 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 | |
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 (регистр данных для чтения не пуст).
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 будем получать значение, содержащее полученный бит чётности.
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 получает тактовый сигнал с шины 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.
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-символ будет передан.
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; используется для мультипроцессорной связи для пробуждения из тихого состояния при обнаружении адресной метки.
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.
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 и т.д.).