串口(USART)框圖的講解


STM32 的 USART 簡介

      通用同步異步收發器(Universal Synchronous Asynchronous Receiver and Transmitter)是一個串行通信設備,可以靈活地與外部設備進行全雙工數據交換。有別於 USART 還有一個 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基礎上裁剪掉了同步通信功能,只有異步通信。簡單區分同步和異步就是看通信時需不需要對外提供時鍾輸出,我們平時用的串口通信基本都是 UART。

     串行通信一般是以幀格式傳輸數據,即是一幀一幀的傳輸,每幀包含有起始信號、數據信息、停止信息,可能還有校驗信息。USART 就是對這些傳輸參數有具體規定,當然也不是只有唯一一個參數值,很多參數值都可以自定義設置,只是增強它的兼容性。 USART 滿足外部設備對工業標准 NRZ 異步串行數據格式的要求,並且使用了小數波特率發生器,可以提供多種波特率,使得它的應用更加廣泛。USART 支持同步單向通信和半雙工單線通信;還支持局域互連網絡 LIN、智能卡(SmartCard)協議與 lrDA(紅外線數據協會) SIR ENDEC 規范。

     USART 支持使用 DMA,可實現高速數據通信。

     USART 在 STM32 應用最多莫過於“打印”程序信息,一般在硬件設計時都會預留一個 USART 通信接口連接電腦,用於在調試程序是可以把一些調試信息“打印”在電腦端的串口調試助手工具上,從而了解程序運行是否正確、如果出錯哪具體哪里出錯等等。

USART 功能框圖

1

1. 功能引腳

     TX:發送數據輸出引腳。

     RX:接收數據輸入引腳。

     SW_RX:數據接收引腳,只用於單線和智能卡模式,屬於內部引腳,沒有具體外部引腳。

     nRTS:請求以發送(Request To Send),n 表示低電平有效。如果使能 RTS 流控制,當 USART 接收器准備好接收新數據時就會將 nRTS 變成低電平;當接收寄存器已滿時, nRTS 將被設置為高電平。該引腳只適用於硬件流控制。

     nCTS:清除以發送(Clear To Send),n 表示低電平有效。如果使能 CTS 流控制,發送器在發送下一幀數據之前會檢測 nCTS 引腳,如果為低電平,表示可以發送數據,如果為高電平則在發送完當前數據幀之后停止發送。該引腳只適用於硬件流控制。

    SCLK:發送器時鍾輸出引腳。這個引腳僅適用於同步模式。

     (此表可在STM32F10x-中文數據手冊的STM32F103xx引腳定義這里.)

2

9

      STM32F103RCT6 系統控制器有三個 USART 和兩個 UART,其中 USART1 和時鍾來源於 APB2 總線時鍾,其最大頻率為72MHz,其他四個的時鍾來源於 APB1 總線時鍾,其最大頻率為 36MHz。UART 只是異步傳輸功能,所以沒有 SCLK、nCTS 和 nRTS 功能引腳。

2. 數據寄存器

     USART 數據寄存器(USART_DR)只有低 9 位有效,並且第 9 位數據是否有效要取決於 USART 控制寄存器 1(USART_CR1)的 M 位設置,當 M 位為 0 時表示 8 位數據字長,當 M 位為 1 表示 9 位數據字長,我們一般使用 8 位數據字長。

      USART_DR 包含了已發送的數據或者接收到的數據USART_DR 實際是包含了兩個寄存器,一個專門用於發送的可寫 TDR,一個專門用於接收的可讀 RDR當進行發送操作時,往 USART_DR 寫入數據會自動存儲在 TDR 內;當進行讀取操作時,向 USART_DR 讀取數據會自動提取 RDR 數據。

     TDR 和 RDR 都是介於系統總線和移位寄存器之間。串行通信是一個位一個位傳輸的,發送時把 TDR 內容轉移到發送移位寄存器,然后把移位寄存器數據每一位發送出去,接收時把接收到的每一位順序保存在接收移位寄存器內然后才轉移到 RDR。 USART 支持 DMA 傳輸,可以實現高速數據傳輸.

3. 控制器

     USART 有專門控制發送的發送器、控制接收的接收器,還有喚醒單元、中斷控制等等。使用 USART 之前需要向 USART_CR1 寄存器的 UE 位置 1 使能 USART,UE 位用來開啟供給給串口的時鍾。發送或者接收數據字長可選 8 位或 9 位,由 USART_CR1 的 M 位控制.(1個總開關UE;  兩個小開關TE,RE; 一個位數控制為M,決定是否有校驗碼)

發送器

     當 USART_CR1 寄存器的發送使能位 TE 置 1 時,啟動數據發送,發送移位寄存器的數據會在 TX 引腳輸出,低位在前,高位在后。如果是同步模式 SCLK 也輸出時鍾信號。

     一個字符幀發送需要三個部分:起始位+數據幀+停止位。起始位是一個位周期的低電平,位周期就是每一位占用的時間;數據幀就是我們要發送的 8 位或 9 位數據,數據是從最低位開始傳輸的;停止位是一定時間周期的高電平。停止位時間長短是可以通過 USART 控制寄存器 2(USART_CR2)的 STOP[1:0]位控制,可選 0.5 個、1 個、1.5 個和 2 個停止位。默認使用 1 個停止位。2 個停止位適用於正常 USART 模式、單線模式和調制解調器模式。0.5 個和 1.5 個停止位用於智能卡模式.

    當選擇 8 位字長,使用 1 個停止位時,具體發送字符時序圖見圖 。

3

      過程:當發送使能位 TE 置 1 之后,發送器開始會先發送一個空閑幀(一個數據幀長度的高電平),接下來就可以往 USART_DR 寄存器寫入要發送的數據。在寫入最后一個數據后,需要等待 USART 狀態寄存器(USART_SR)的 TC 位為 1,表示數據傳輸完成,如果 USART_CR1 寄存器的 TCIE 位置 1,將產生中斷。

      在發送數據時,編程的時候有幾個比較重要的標志位我們來總結下。

4

接收器

      如果將 USART_CR1 寄存器的 RE 位置 1,使能 USART 接收,使得接收器在 RX 線開始搜索起始位。在確定到起始位后就根據 RX 線電平狀態把數據存放在接收移位寄存器內。接收完成后就把接收移位寄存器數據移到 RDR 內,並把 USART_SR 寄存器的 RXNE 位置 1,同時如果 USART_CR2 寄存器的 RXNEIE 置 1 的話可以產生中斷。

     在接收數據時,編程的時候有幾個比較重要的標志位我們來總結下。

5

4. 小數波特率生成

 

     波特率指數據信號對載波的調制速率,它用單位時間內載波調制狀態改變次數來表示,單位為波特。比特率指單位時間內傳輸的比特數,單位 bit/s(bps)。對於 USART 波特率與比特率相等,以后不區分這兩個概念。波特率越大,傳輸速率越快。

USART 的發送器和接收器使用相同的波特率。計算公式如下:

6

      其中,fPLCK 為 USART 時鍾,(注意掛載的總線不同72 36M) USARTDIV 是一個存放在波特率寄存器(USART_BRR) 的 一個 無符 號定 點數。 其中 DIV_Mantissa[11:0] 位 定義 USARTDIV 的 整數 部分 , DIV_Fraction[3:0]位定義 USARTDIV 的小數部分。

11

     例如:DIV_Mantissa=24(0x18),DIV_Fraction=10(0x0A),此時 USART_BRR 值為 0x18A;那么 USARTDIV 的小數位 10/16=0.625(1111為2^4,每個刻度為1/16);整數位 24,最終 USARTDIV 的值為 24.625。

     如果知道 USARTDIV 值為 27.68,那么 DIV_Fraction=16*0.68=10.88,最接近的正整數為 11,所以 DIV_Fraction[3:0]為 0xB;DIV_Mantissa=整數(27.68)=27,即為 0x1B。

     波特率的常用值有 2400、9600、19200、115200。下面以實例講解如何設定寄存器值得到波特率的值。

     我們知道 USART1 使用 APB2 總線時鍾,最高可達 72MHz,其他 USART 的最高頻率為 36MHz。我們選取 USART1 作為實例講解,即 fPLCK=72MHz。為得到 115200bps 的波特率,此時:

7 

    解得USARTDIV=39.0625 , 可 算 得 DIV_Fraction=0.0625*16=1=0x01 , DIV_Mantissa=39=0x27,即應該設置USART_BRR 的值為 0x271。

5. 校驗控制

     STM32F103 系列控制器 USART 支持奇偶校驗。當使用校驗位時,串口傳輸的長度將是 8 位的數據幀加上 1 位的校驗位總共 9 位,此時 USART_CR1 寄存器的 M 位需要設置為 1,即 9 數據位。將 USART_CR1 寄存器的 PCE 位置 1 就可以啟動奇偶校驗控制,奇偶校驗由硬件自動完成。啟動了奇偶校驗控制之后,在發送數據幀時會自動添加校驗位,接收數據時自動驗證校驗位。接收數據時如果出現奇偶校驗位驗證失敗,會見 USART_SR 寄存器的 PE 位置 1,並可以產生奇偶校驗中斷。使能了奇偶校驗控制后,每個字符幀的格式將變成:起始位+數據幀+校驗位+停止位。

6. 中斷控制

    USART 有多個中斷請求事件,具體見表 。

8


免責聲明!

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



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