| 串口是一種全雙工通訊方式
單工
數據傳輸只支持數據在一個方向上傳輸
半雙工
允許數據在兩個方向上傳輸,在同一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信
全雙工
允許數據同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式的結合,它要求發送設備和接收設備都有獨立的接收和發送能力
異步串口常見連接方式
相同端口數據傳輸
不同端口數據傳輸
這里必須保證通訊兩端數據共地,此外還需注意不同端口間的電平轉換,如TTL、232.
| 異步通訊時序圖
這里以8位字長為例,進行數據傳輸時,接收方首先捕捉數據起始位- -由高電平到低電平的數據跳變,低電平會保持一個數據周期(空閑時,數據線保持高電平)
1-8-1
緊接著起始位的是8位有效數據(低地址數據LSB在前),這里特別注意,若設置了奇偶校驗,奇偶校驗位會占據一位有效數據,即寫進數據寄存器數據的MSB位被校驗位替換后發送出去,如下表所示:
最后為1位停止位,停止位為有效高電平
| 奇偶校驗
使能校驗功能后,寫進數據寄存器的數據的MSB位被校驗位替換后發送出去(如果選擇偶校驗偶數個’1’,如果選擇奇校驗奇數個’1’)。
偶校驗:校驗位使得一幀中的7或8個LSB數據以及校驗位中’1’的個數為偶數。
例如:數據=00110101,有4個’1’,如果選擇偶校驗,校驗位是’0’。
奇校驗:此校驗位使得一幀中的7或8個LSB數據以及校驗位中’1’的個數為奇數。
例如:數據=00110101,有4個’1’,如果選擇奇校驗,校驗位是’1’。
| 波特率的產生
RX/TX 波特率=FCK/(16*USARTDIV )
這里的FCK為串口模塊的輸入時鐘頻率,通常首先確定想得到的波特率,而后通過上述公式,解得USARTDIV ,進而將USARTDIV的小數和整數部分分別填入波特率寄存器(USART_BRR)的整數DIV_Mantissa和小數DIV_Fraction部分中。
例如: 求得 USARTDIV = 25.62時,就有:DIV_Fraction = 16*0.62 = 9.92 最接近的整數是: 10 = 0x0A DIV_Mantissa = mantissa (25.620) = 25 = 0x19于是, USART_BRR = 0x19A
| 異步串口通訊的基本配置過程
1. 使能串口及對應引腳時鐘
2. 配置引腳,根據需要決定是否重映射
TX輸出引腳 -- 傳輸速率50M_hz,復用推挽輸出
RX輸入引腳 -- 浮空輸入
3.串口參數初始化
設置字長、停止位個數、是否開啟校驗位及選擇校驗方式(CR1、CR2寄存器),波特率設置
4. 配置中斷優先級
搶占優先級、子優先級,使能中斷通道
5. 根據需要,開啟串口部分中斷(CR1)
6. 使能串口(CR1)
stm32串口有獨立的收發能力,可根據需要單獨開啟/關閉接收、發送單元
-
STM32
+關注
關注
2270文章
10915瀏覽量
356754 -
串口
+關注
關注
14文章
1557瀏覽量
76734
發布評論請先 登錄
相關推薦
評論