<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > stm32 USART 串口通信操作寄存器+庫函數

stm32 USART 串口通信操作寄存器+庫函數

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
串口通信雖然在如今的電腦上使用的越來(lái)越少,因為其在通信速率,距離已經(jīng)不適應pc的要求,取而代之的是USB口。但是在嵌入式領(lǐng)域,USART仍然廣泛運用著(zhù)。
stm32的最多可以提供5路串口,有分數波特率發(fā)生器、支持同步單線(xiàn)通信和半雙工單線(xiàn)通信、具有DMA等。使用USART時(shí),stm32的I/O口經(jīng)RS232電平轉換電路 和電腦的串口連接。
串口使用只需要開(kāi)始串口時(shí)鐘,設置相應的I/O口模式,配置波特率、數據位長(cháng)度、奇偶校驗位等信息就可以使用了。
我使用了三種方式使用串口通信,只可以開(kāi)啟一項:
  • USART通過(guò)使用printf()函數發(fā)送信息;
  • USART和上位機通信,接收到數據后原數據輸出;
  • USART主動(dòng)發(fā)送數據。
操作寄存器
串口的復位是通過(guò)配置APB2RSTR 寄存器的第14位,當外設出現故障時(shí),可以通過(guò)復位寄存器復位,在系統初始化時(shí),都會(huì )執行復位操作。
串口的波特率設置是在USART_BRR寄存器上, 實(shí)際上這個(gè)寄存器配置的是波特比率的分頻觸發(fā)因子的值,波特率是一秒鐘通過(guò)的字符,而波特比率是一秒鐘通過(guò)的二進(jìn)制位數,所以設置了波特率需要經(jīng)過(guò)一段算法處理 ,得出特定時(shí)鐘下,實(shí)現這個(gè)波特率的,時(shí)鐘分頻值。
串口控制寄存器有3個(gè) USART_CR1~3,常用到的就是USART_CR1,各位描述如下:
UE:USART使能 (USART enable)
M:字長(cháng) (Word length)該位定義了數據字的長(cháng)度,0:一個(gè)起始位,8個(gè)數據位,n個(gè)停止位;
1:一個(gè)起始位,9個(gè)數據位,n個(gè)停止位。 n由USART_CR2中設置。
WAKE:?jiǎn)拘训姆椒?(Wakeup method) 0:被空閑總線(xiàn)喚醒; 1:被地址標記喚醒。
PCE:檢驗控制使能 (Parity control enable)
PS:校驗選擇 (Parity selection) 0:偶校驗;1:奇校驗。
PEIE:PE中斷使能 (PE interrupt enable)
TXEIE:發(fā)送緩沖區空中斷使能 (TXE interrupt enable)
TCIE:發(fā)送完成中斷使能 (Transmission complete interrupt enable)
RXNEIE:接收緩沖區非空中斷使能 (RXNE interrupt enable)
IDLEIE:IDLE中斷使能 (IDLE interrupt enable) 0:禁止產(chǎn)生中斷;1:當USART_SR中的IDLE為’1’時(shí),產(chǎn)生USART中斷。
TE:發(fā)送使能 (Transmitter enable)
RE:接收使能 (Receiver enable)
RWU:接收喚醒 (Receiver wakeup) 0:接收器處于正常工作模式;1:接收器處于靜默模式。
注意:1.在把USART置于靜默模式(設置RWU位)之前,USART要已經(jīng)先接收了一個(gè)數據字節。否則在靜默模式下,不能被空閑總線(xiàn)檢測喚醒。
2.當配置成地址標記檢測喚醒(WAKE位=1),在RXNE位被置位時(shí),不能用軟件修改RWU位。
SBK:發(fā)送斷開(kāi)幀 (Send break)
數據的發(fā)送和接收是在USART_DR來(lái)實(shí)現的,這是一個(gè)雙寄存器,包含了TDR和RDR,當向該寄存器寫(xiě)入數據時(shí),串口就會(huì )自動(dòng)發(fā)送數據;當收到數據時(shí),也是存在該寄存器內中,可以直接讀出。該寄存器只有低9位有效(8:0),其他位都是保留的。

本文引用地址:http://dyxdggzs.com/article/201611/318194.htm

串口狀態(tài)是通過(guò)狀態(tài)寄存器USART_SR讀取的,各位描述如下:
TXE:發(fā)送數據寄存器空 (Transmit data register empty)
當TDR寄存器中的數據被硬件轉移到移位寄存器的時(shí)候,該位被硬件置位。如果USART_CR1寄存器中的TXEIE為1,則產(chǎn)生中斷。對USART_DR的寫(xiě)操作,將該位清零。
0:數據還沒(méi)有被轉移到移位寄存器;
1:數據已經(jīng)被轉移到移位寄存器。
TC:發(fā)送完成 (Transmission complete)
當包含有數據的一幀發(fā)送完成后,并且TXE=1時(shí),由硬件將該位置’1’。如果USART_CR1中的TCIE為’1’,則產(chǎn)生中斷。由軟件序列清除該位(先讀USART_SR,然后寫(xiě)入USART_DR)。TC位也可以通過(guò)寫(xiě)入’0’來(lái)清除,只有在多緩存通訊中才推薦這種清除程序。
RXNE:讀數據寄存器非空 (Read data register not empty)
當RDR移位寄存器中的數據被轉移到USART_DR寄存器中,該位被硬件置位,表示已經(jīng)接收到了數據。如果USART_CR1寄存器中的RXNEIE為1,則產(chǎn)生中斷。對USART_DR的讀操作可以將該位清零。RXNE位也可以通過(guò)寫(xiě)入0來(lái)清除,只有在多緩存通訊中才推薦這種清除程序。
直接操作寄存器代碼如下:(system.h 和stm32f10x_it.h等相關(guān)代碼參照stm32 直接操作寄存器開(kāi)發(fā)環(huán)境配置)
User/main.c
view source
#endif



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>