STM32 --UART串口通信

UART串口時序

這裏寫圖片描述

UART串口協議參考下面文章:
http://blog.csdn.net/gogomusic/article/details/54767502

UART串口配置

1)串口時鐘使能。串口作爲 STM32 的一個外設,其時鐘由外設時鐘使能寄存器控制,這裏我們使用的串口1是APB2ENR寄存器的第14位。(除了串口 1 的時鐘使能在 APB2ENR 寄存器,其他串口的時鐘使能位都在 APB1ENR 寄存器,而 APB2(72M)的頻率一般是 APB1(36M)的一倍。)

2)串口復位。當外設出現異常的時候可以通過復位寄存器裏面的對應位設置,實現該外設的復位,然後重新配置這個外設達到讓其重新工作的目的。一般在系統剛開始配置外設的時候,都會先執行復位該外設的操作。
串口 1 的復位是通過配置 APB2RSTR 寄存器的第 14 位來實現的。串口1的復位設置位在APB2RSTR的第14位。通過向該位寫1復位串口1,寫 0 結束復位。
APB2RSTR 寄存器的各位描述如圖 8.1.1 所示

這裏寫圖片描述

3)串口波特率設置。每個串口都有一個自己獨立的波特率寄存器 USART_BRR,通過設置該寄存器就可以達到配置不同波特率的目的。
這裏寫圖片描述
串口波特率計算公式:見《STM32中文數據參考手冊》。
4)STM32 的每個串口都有 3 個控制寄存USART_CR1~3,串口的很多配置都是通過這 3 個寄存器來設置的。這裏我們只要用到 USART_CR1 就可以實現我們的功能了。
這裏寫圖片描述
關於寄存器的具體描述請看《STM32中文數據參考手冊》。
該寄存器的高 18 位沒有用到,低 14 位用於串口的功能設置。
UE 爲串口使能位,通過該位置 1,以使能串口。
M 爲字長選擇位,當該位爲 0 的時候設置串口爲 8 個字長外加 n 個停止位,停止位的個數(n)是根據USART_CR2 的[13:12]位設置來決定的,默認爲 0。
PCE 爲校驗使能位,設置爲 0,則禁止校驗,否則使能校驗。
PS 爲校驗位選擇,設置爲 0 則爲偶校驗,否則爲奇校驗。
TXIE 爲發送緩衝區空中斷使能位,設置該位爲 1,當 USART_SR 中的 TXE 位爲1 時,將產生串口中斷。
TCIE 爲發送完成中斷使能位,設置該位爲 1,當 USART_SR 中的 TC位爲 1 時,將產生串口中斷。RXNEIE 爲接收緩衝區非空中斷使能,設置該位爲 1,當 USART_SR中的 ORE 或者 RXNE 位爲 1 時,將產生串口中斷。
TE 爲發送使能位,設置爲 1,將開啓串口的發送功能。
RE 爲接收使能位,用法同 TE。

5)數據發送與接收。STM32 的發送與接收是通過數據寄存器USART_DR 來實現的,這是一個雙寄存器,包含了 TDR 和 RDR。當向該寄存器寫數據的時候,串口就會自動發送,當收到數據的時候,也是存在該寄存器內。

這裏寫圖片描述

DR[8:0]爲串口數據,包含了發送或接收的數據。
當使能校驗位(USART_CR1 中 PCE 位被置位)進行發送時,寫到 MSB 的值(根據數據的長度不同,MSB 是第 7 位或者第 8 位)會被後來的校驗位取代。當使能校驗位進行接收時,讀到的 MSB 位是接收到的校驗位

6)串口狀態。串口的狀態可以通過狀態寄存器 USART_SR 讀取。USART_SR 的各位描述:
這裏寫圖片描述
RXNE(讀數據寄存器非空),當該位被置 1 的時候,就是提示已經有數據被接收到了,並且可以讀出來了。這時候我們要做的就是儘快去讀取 USART_DR,通過讀 USART_DR 可以將該位清零,也可以向該位寫 0,直接清除。
TC(發送完成),當該位被置位的時候,表示 USART_DR 內的數據已經被髮送完成了。如果設置了這個位的中斷,則會產生中斷。該位也有兩種清零方式:1)讀 USART_SR,寫USART_DR。2)直接向該位寫 0。

發佈了46 篇原創文章 · 獲贊 141 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章