STM32-UART-串口通信框圖-波特率計算


1.處理器與外部設備通信的兩種方式:

並行通信

  • 傳輸原理:數據各個位同時傳輸。
  • 優點:速度快
  • 缺點:占用引腳資源多

串行通信

  • 傳輸原理:數據按位順序傳輸。
  • 優點:占用引腳資源少
  • 缺點:速度相對較慢

2.串行通信:

2.1按照數據傳送方向,分為:

  • 單工:數據傳輸只支持數據在一個方向上傳輸
  • 半雙工:允許數據在兩個方向上傳輸,但是,在某一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信;
  • 全雙工:允許數據同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式的結合,它要求發送設備和接收設備都有獨立的接收和發送能力。

在這里插入圖片描述

2.2串行通信的通信方式:

  • 同步通信:帶時鍾同步信號傳輸。SPI,IIC通信接口

有時鍾同步信號,A傳到B的過程中,每一個位都是根據時鍾來傳的,比如時鍾到達上升沿,傳1bit。

  • 異步通信:不帶時鍾同步信號。UART(通用異步收發器),單總線

A和B之間沒有時鍾同步信號,雙方先約定一些波特率、起始位等,計算出發送每一bit占用的時間。

常見的串行通信接口:

如果是全雙工,那么發送和接收都要有獨立的引腳。半雙工一般只占用一個獨立的發送\接收引腳。

如果是同步通信,那么一定有同步時鍾。

通信標准 引腳說明 通信方式 通信方向
UART (通用異步收發器) TXD:發送端 RXD:接受端 GND:公共地 異步通信 全雙工
單總線 (1-wire) DQ:發送/接受端 異步通信 半雙工
SPI SCK:同步時鍾 MISO:主機輸入,從機輸出 MOSI:主機輸出,從機輸入 同步通信 全雙工
I2C SCL:同步時鍾 SDA:數據輸入/輸出端 同步通信 半雙工

3.異步串口通信UART

包含:

物理層(電氣層:接口決定):通信接口(RS232,RS485,RS422,TTL)
數據格式(數據層:芯片決定)起始位校驗位等約定好
通信協議(協議層:程序決定)數據出錯能檢測出來等

UART異步通信方式引腳連接方法:

RXD:數據輸入引腳。數據接收。TXD:數據發送引腳。數據發送。

在這里插入圖片描述

TTL串口 & RS232 & RS485 & RS422

兩個電路板相連,往往用到一些接口,而不是直接相連TXRX。

接口類型 邏輯1 典型值 邏輯0 典型值 說明 優缺點
TTL +5/3.3 0 一般MCU串口引腳都支持TTL  
RS232 -15V~-3V 3V~15V 3線全雙工,點對點 接口電平高,傳輸速度相對較低,傳輸距離近
RS485 兩根線的壓差+(2~6)V 壓差-(2~6)V 2線半雙工,點對多,主從通信。使用壓差傳遞信號。 傳輸速度高可達10M,抗干擾能力強,距離遠。
RS422 相對比較少用。      

USB串口

MCU發送串口信號,經電平轉換芯片變為USB信號,通過USB連到電腦,電腦可以直接識別USB信號。

在這里插入圖片描述

STM32 UART異步通信方式引腳:

串口號 RXD TXD
1 PA10(PB7) PA9(PB6)
2 PA3(PD6) PA2(PD5)
3 PB11(PC11/PD9) PB10(PC10/PD8)
4 PC11(PA1) PC10(PA0)
5 PD2 PC12
6 PC7(PG9) PC6(PG14)

4.STM32串口數據格式和通信過程

STM32串口通信過程:信號一位一位傳過來,速度根據波特率來傳。串行移位寄存器一個一個讀過來,然后一次性寫入到輸入數據緩沖器里,MCU從中讀取數據。

MCU寫輸出數據緩沖器,然后一次性給串行移位寄存器,然后在波特率控制下,把數據一位位送到外部設備。

在這里插入圖片描述

STM32串口異步通信需要定義的參數:

起始位:1個邏輯0數據位開始
數據位(8位或者9位)
奇偶校驗位(第9位)
停止位(1,1.5,2位)
波特率設置

在這里插入圖片描述

5.STM32F4xx串口框圖

TX:芯片數據發送出去,RX:數據接收。接收后放到接收移位寄存器,然后全部給接收數據寄存器,然后CPU可以通過總線讀取數據。發送的話,CPU把數據寫到發送數據寄存器,之后數據送到發送移位寄存器,數據一位一位的從IO口出去。

在這里插入圖片描述

對於這個發送和接收移位寄存器,必須提前設定好波特率,這兩個寄存器受發送控制和接收器控制。可以由下圖看到:發送和接收端共用一個波特率,用於確定串行通信的速度。最下面有一個BRR寄存器,首先時鍾來自於pCLKx ,pclk經過/usartdiv和/(8*(2-OVER8)),OVER8由控制寄存器的一個位決定可能為0或1,把這個時鍾作為發送器和接收器的時鍾,控制發送和接收移位寄存器,實現控制傳輸數據的速度。

對於接收器控制和發送控制,圖中還有幾個寄存器,右邊SR寄存器,記錄一些狀態標志位,左邊CR1,有一些使能位,高位連接中斷控制,可以觸發一些中斷。

在這里插入圖片描述

6.波特率計算方法

波特率決定了串口的通信速度,如何計算。

上圖OVER8:在控制寄存器 1 (USART_CR1)中可找到,其中采樣頻率越高,容錯性越好,但是限制了速度。如果8倍過采樣可以提高速度。

在這里插入圖片描述

小數波特率生成:

對 USARTDIV 的尾數值和小數值進行編程時,接收器和發送器(Rx 和 Tx)的波特率均設置為相同值。

在這里插入圖片描述

當fck確定,又要達到某一種波特率,此時可以計算出USARTDIV的值是多少。它的值是由USART_BRR 寄存器決定的。

USARTDIV 是一個存放在 USART_BRR 寄存器中的無符號定點數。
當 OVER8=0 時,小數部分編碼為 4 位並通過 USART_BRR 寄存器中的 DIV_fraction[3:0] 位編程。
當 OVER8=1 時,小數部分編碼為 3 位並通過 USART_BRR 寄存器中的 DIV_fraction[2:0] 位編程,此時 DIV_fraction[3] 位必須保持清零狀態。
注意: 對 USART_BRR 執行寫操作后,波特率計數器更新為波特率寄存器中的新值。因此,波特率 寄存器的值不應在通信時發生更改。

在這里插入圖片描述

如圖所示,USART中DIV_Mantissa是設置USARTDIV 的整數部分,DIV_Fraction是設置USARTDIV的小數部分。如果經過公式算出USARTDIV=37.5該如何設置 USART_BRR寄存器?

可以看到波特率寄存器 (USART_BRR):位15:4一共12位,如果設置USARTDIV=37.5,只需要把高十二位設置成37 。小數則是由低4位決定的,由於低四位一共有2^4=16個數,占滿了0-1,所以可以0.5*16=8,賦給低四位即可。

在這里插入圖片描述

在這里插入圖片描述

可以總結出:OVER8=0時波特率計算公式:

在這里插入圖片描述

①根據波特率和串口時鍾頻率,計算出USARTDIV的值。

②DIV_Fraction=USART的小數部分 X16所得的整數

DIV_Mantissa=USART的整數部分

假如OVER8=0,串口時鍾為90M,需要得到115200的波特率,根據公式計算得到USARTDIV=90000000/(115200*16)=48.828

DIV_Fraction=16*0.828的整數部分=13=0X0D;

DIV_Mantissa=48=0x30;

得到USART1->BRR值為0x30d,只要設置串口1的BRR寄存器值位0x30d就可得到115200的波特率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM