USART是STM32內(nèi)部集成的硬件外設(shè),可以根據(jù)數(shù)據(jù)寄存器的一個(gè)字節(jié)數(shù)據(jù)自動(dòng)生成數(shù)據(jù)幀時(shí)序,從TX引腳發(fā)送出去,也可以自動(dòng)接收RX引腳的數(shù)據(jù)幀時(shí)序,拼接成一個(gè)字節(jié)數(shù)據(jù),存放在數(shù)據(jù)寄存器里。
當(dāng)配置好USART的電路之后,直接讀取數(shù)據(jù)寄存器,就可以自動(dòng)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)了。在發(fā)送和接收的模塊有4個(gè)重要的寄存器
發(fā)送數(shù)據(jù)寄存器TDR
發(fā)送移位寄存器,把一個(gè)字節(jié)的數(shù)據(jù)一位一位的移出去
接收數(shù)據(jù)寄存器RDR
接收移位寄存器,把一個(gè)字節(jié)的數(shù)據(jù)
下方為串口的發(fā)送和接收?qǐng)D解:
串口發(fā)送
在配置串口的各個(gè)參數(shù)時(shí),可以選擇發(fā)送數(shù)據(jù)幀的數(shù)據(jù)位的大小,可選8位或9位。
串口發(fā)送數(shù)據(jù)實(shí)際上就是對(duì)發(fā)送數(shù)據(jù)寄存器TDR進(jìn)行寫操作。
- 當(dāng)串口發(fā)送數(shù)據(jù)時(shí),會(huì)檢測(cè)發(fā)送移位寄存器是不是有數(shù)據(jù)正在移位,如果沒(méi)有移位,那么這個(gè)數(shù)據(jù)就會(huì)立刻轉(zhuǎn)移到發(fā)送移位寄存器里。準(zhǔn)備發(fā)送。
2.當(dāng)數(shù)據(jù)移動(dòng)到移位寄存器時(shí),會(huì)產(chǎn)生一個(gè)TXE發(fā)送寄存器空標(biāo)志位,該位描述如下。當(dāng)TXE被置1,那么就可以在TDR寫入下一個(gè)數(shù)據(jù)了。即發(fā)送下一個(gè)數(shù)據(jù)。
- 發(fā)送移位寄存器在發(fā)送器控制的控制下,向右移位,一位一位的把數(shù)據(jù)傳輸?shù)絋X引腳。
- 數(shù)據(jù)移位完成后,新的數(shù)據(jù)就會(huì)再次從TDR轉(zhuǎn)移到發(fā)送移位寄存器里來(lái),依次重復(fù)1-3的過(guò)程。通過(guò)讀取TXE標(biāo)志位來(lái)判斷是否發(fā)送下一個(gè)數(shù)據(jù)。
串口接收
數(shù)據(jù)從RX引腳通向接收移位寄存器,在接收控制的控制下,一位一位的讀取RX的電平,把第一位放在最高位,然后右移,移位八次之后就可以接收一個(gè)字節(jié)了。
當(dāng)一個(gè)字節(jié)數(shù)據(jù)移位完成之后,這一個(gè)字節(jié)的數(shù)據(jù)就會(huì)整體的移到接收數(shù)據(jù)寄存器RDR里來(lái)。
在轉(zhuǎn)移時(shí)會(huì)置RXNE接收標(biāo)志位,即RDR寄存器非空,下方為該位的描述。當(dāng)被置1后,就說(shuō)明數(shù)據(jù)可以被讀出。
下圖即為串口接收的工作流程
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119814 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6808瀏覽量
88743 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354289 -
串口通信
+關(guān)注
關(guān)注
34文章
1607瀏覽量
55381
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論