串口通信指串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。
UART串口時序
UART串口配置
1)串口時鐘使能。串口作為 STM32 的一個外設,其時鐘由外設時鐘使能寄存器控制,這里我們使用的串口1是APB2ENR寄存器的第14位。(除了串口 1 的時鐘使能在 APB2ENR 寄存器,其他串口的時鐘使能位都在 APB1ENR 寄存器,而 APB2(72M)的頻率一般是 APB1(36M)的一倍。)
2)串口復位。當外設出現(xiàn)異常的時候可以通過復位寄存器里面的對應位設置,實現(xiàn)該外設的復位,然后重新配置這個外設達到讓其重新工作的目的。一般在系統(tǒng)剛開始配置外設的時候,都會先執(zhí)行復位該外設的操作。
串口 1 的復位是通過配置 APB2RSTR 寄存器的第 14 位來實現(xiàn)的。串口1的復位設置位在APB2RSTR的第14位。通過向該位寫1復位串口1,寫 0 結束復位。
APB2RSTR 寄存器的各位描述如圖 8.1.1 所示
3)串口波特率設置。每個串口都有一個自己獨立的波特率寄存器 USART_BRR,通過設置該寄存器就可以達到配置不同波特率的目的。
串口波特率計算公式:見《STM32中文數(shù)據(jù)參考手冊》。
4)STM32 的每個串口都有 3 個控制寄存USART_CR1~3,串口的很多配置都是通過這 3 個寄存器來設置的。這里我們只要用到 USART_CR1 就可以實現(xiàn)我們的功能了。
關于寄存器的具體描述請看《STM32中文數(shù)據(jù)參考手冊》。
該寄存器的高 18 位沒有用到,低 14 位用于串口的功能設置。
UE 為串口使能位,通過該位置 1,以使能串口。
M 為字長選擇位,當該位為 0 的時候設置串口為 8 個字長外加 n 個停止位,停止位的個數(shù)(n)是根據(jù)USART_CR2 的[13:12]位設置來決定的,默認為 0。
PCE 為校驗使能位,設置為 0,則禁止校驗,否則使能校驗。
PS 為校驗位選擇,設置為 0 則為偶校驗,否則為奇校驗。
TXIE 為發(fā)送緩沖區(qū)空中斷使能位,設置該位為 1,當 USART_SR 中的 TXE 位為1 時,將產(chǎn)生串口中斷。
TCIE 為發(fā)送完成中斷使能位,設置該位為 1,當 USART_SR 中的 TC位為 1 時,將產(chǎn)生串口中斷。RXNEIE 為接收緩沖區(qū)非空中斷使能,設置該位為 1,當 USART_SR中的 ORE 或者 RXNE 位為 1 時,將產(chǎn)生串口中斷。
TE 為發(fā)送使能位,設置為 1,將開啟串口的發(fā)送功能。
RE 為接收使能位,用法同 TE。
5)數(shù)據(jù)發(fā)送與接收。STM32 的發(fā)送與接收是通過數(shù)據(jù)寄存器USART_DR 來實現(xiàn)的,這是一個雙寄存器,包含了 TDR 和 RDR。當向該寄存器寫數(shù)據(jù)的時候,串口就會自動發(fā)送,當收到數(shù)據(jù)的時候,也是存在該寄存器內(nèi)。
DR[8:0]為串口數(shù)據(jù),包含了發(fā)送或接收的數(shù)據(jù)。
當使能校驗位(USART_CR1 中 PCE 位被置位)進行發(fā)送時,寫到 MSB 的值(根據(jù)數(shù)據(jù)的長度不同,MSB 是第 7 位或者第 8 位)會被后來的校驗位取代。當使能校驗位進行接收時,讀到的 MSB 位是接收到的校驗位
6)串口狀態(tài)。串口的狀態(tài)可以通過狀態(tài)寄存器 USART_SR 讀取。USART_SR 的各位描述:
RXNE(讀數(shù)據(jù)寄存器非空),當該位被置 1 的時候,就是提示已經(jīng)有數(shù)據(jù)被接收到了,并且可以讀出來了。這時候我們要做的就是盡快去讀取 USART_DR,通過讀 USART_DR 可以將該位清零,也可以向該位寫 0,直接清除。
TC(發(fā)送完成),當該位被置位的時候,表示 USART_DR 內(nèi)的數(shù)據(jù)已經(jīng)被發(fā)送完成了。如果設置了這個位的中斷,則會產(chǎn)生中斷。該位也有兩種清零方式:1)讀 USART_SR,寫USART_DR。2)直接向該位寫 0。
評論
查看更多