UART學習之路(二)基本時序介紹


這次我們來介紹一下UART的基本時序,了解一下底層信號怎么傳送的。方便以后使用Verilog HDL實現收發邏輯。

9600bit/s 的意思是每秒發送9600bit,因此可以理解為將1s分解為9600等分,對於發送端來說,每bit電平的維持時間是1/9600s,對於接收端來說,在1/9600s內要完成數據的采樣。因此對於不同時間源的設備,如何實現這個發送“節拍”以及設置接收采樣頻率非常重要,即主從設備對各自主時鍾(SCLK)的分頻非常重要。

UART的基本時序:

發送端

接收端

UART的每一幀數據一般有10位分別為初始位,8位數據和結束位。對於發送端,將待發送的數據存入發送寄存器,產生起始位即將電平拉低,隨后每1/9600s將寄存器中的數據一位一位的發送出去。當數據發送完畢后,將電平拉高等待下一次的發送。對於接收端來說首先要檢測是否有數據來,采用下降沿檢測的方式來檢測起始位。對於數據位的采樣,選取數據位的中點位置的電平作為采樣數據,中點位置的電平較為穩定。設采樣間隔為N,當采樣8N后,就可以停止采樣了。

采樣時鍾的如何獲取,其實是通過設備的主時鍾分頻得到的。取16x或者64x倍的波特率時鍾作為采用時鍾是實踐總結出來的,主要是為了無失真的獲取數據,同時也為了方便編程。下面舉個例子:

主時鍾為SCLK = 40Mhz,波特率為9600,則采用頻率fs = 16*9600 = 153600。Tsclk = 25ns,Ts = 1/fs = 6510.4167ns,N = Ts / Tsclk = 260.4167。也就是說在每個Ts下有260個Tsclk,以上升沿作為計數標准的話,數130下就為一個Ts,即每數130個Ts的上升沿,采樣時鍾的電平就翻轉一次。采用這種方式就可以得到采樣時鍾了。對於采樣間隔N的計算,每個bit電平的維持時間是Tbit = 16 * Ts = 104166.667ns = 16Ts。bit0采樣的是下降沿檢測,等待16Ts后,進入bit1的電平時間,在中點采樣。因此第一個采樣點的時間是(16+8)Ts  = 24Ts,以此類推后面的采樣點分別為:40,56,72,88,104,120,136,152。

對於發送端,只需要根據波特率對SCLK進行不同的分頻就好了。現總結分頻如下:

波特率 T 計數上限 FPGA50Mhz頻率下的計數值;Tsclk =1 / 50Mhz = 20ns
9600 104166.667 T/Tsclk 5208-1
19200 52083.333 T/Tsclk 2604-1
38400 26041.667 T/Tsclk 1302-1

57600

17361.111 T/Tsclk 868-1

115200

8680.556 T/Tsclk

434-1

 

 

 

 

 

 

 

 

 

綜上所述,對於整個串口而言比較重要的的部分是:波特率發生器、采樣時鍾發生器、發送模塊、接收模塊、標志寄存器和中斷模塊。

對於STM32中的USART,組成部分如下圖所示:


免責聲明!

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



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