• <code id="zjelh"></code>

          <source id="zjelh"><form id="zjelh"></form></source><acronym id="zjelh"><form id="zjelh"><blockquote id="zjelh"></blockquote></form></acronym>

          1. <acronym id="zjelh"><form id="zjelh"></form></acronym>

            <input id="zjelh"><rt id="zjelh"></rt></input>
            <var id="zjelh"><rt id="zjelh"></rt></var>
            <source id="zjelh"><form id="zjelh"><del id="zjelh"></del></form></source>

            當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > STM32 USART串口

            STM32 USART串口 時間:2019-07-16      來源:重慶中心,王老師

            什么是串口

            串口是串行接口 (Serial Interface)的簡稱,它是指數據一位一位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現雙向通信(可以直接利用電話線作為傳輸線),從而大大降低了成本,特別適用于遠距離通信,但傳送速度較慢。一條信息的各位數據被逐位按順序傳送的通訊方式稱為串行通訊。串行通訊的特點是:數據位的傳送,按位順序進行,最少只需一根傳輸線即可完成;成本低但傳送速度慢。串行通訊的距離可以從幾米到幾千米;根據信息的傳送方向,串行通訊可以進一步分為單工、半雙工和全雙工三種。

            STM32的USART簡介

            在STM32的參考手冊中,串口被描述成通用同步異步收發器(USART),它提供了一種靈活的方法與使用工業標準NRZ異步串行數據格式的外部設備之間進行全雙工數據交換。有別與USART,還有一個UART,它在USART基礎上裁剪掉了同步通信功能,只有異步通信。簡單區分同步和異步就是看通信時需不需要對外提供時鐘輸出,我們平時用的串口通信基本都是 UART。

            串口通信一般是以幀格式傳輸數據,即一幀一幀傳輸,每幀包含有起始信號、數據信息、停止信息,可能還有校驗信息。USART 滿足外部設備對工業標準 NRZ 異步串行數據格式的要求,并且使用了小數波特率發生器,可以提供多種波特率,使得它的應用更加廣泛。USART 支持同步單向通信和半雙工單線通信;還支持局域互連網絡 LIN、智能卡(SmartCard)協議與 lrDA(紅外線數據協會) SIR ENDEC規范。USART支持使用 DMA,可實現高速數據通信。

            硬件連接

            USART通過3個引腳與其他設備連接在一起,任何USART雙向通信至少需要2個引腳:接受數據輸入(RX)和發送數據輸出(TX)。  

            RX: 接受數據串行輸入。通過過采樣技術來區別數據和噪音,從而恢復數據。 

            TX: 發送數據輸出。當發送器被禁止時,輸出引腳恢復到它的I/O端口配置。當發送器被激活,并且不發送數據時,TX引腳處處于高電平。在單線和智能卡模式里,此I/O口被同時用于數據的發送和接收。

            USART功能框圖剖析

            1、功能引腳

            TX:發送數據輸出引腳。

            RX:接收。

            SW_RX:數據接收引腳,屬于內部引腳。

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

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

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

            以STM32F103RC系列為例,USART1的時鐘來源于APB2總線時鐘,最大頻率為72MHZ,其他4個時鐘來源于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位,由USARTT_CR1的M位控制。

            1)發送器

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

            一個字符幀發送需要3部分:起始位、數據幀、停止位。起始位是一個位周期的低電平,位周期就是每一位占用的時間 ;數據幀就是我們要發送的8或9位數據,數據是最低位開始傳輸的;停止位是一定時間周期的高電平。

            停止位的時間長短可以通過USART控制寄存器2(USART_CR2)的STOP[1:0]位控制,可選0.5個、1個、1.5個、2個停止位。默認使用1個停止位。2個停止位適用于正常USART模式、單線模式和調制解調器模式。0.5和1.5個停止位用于智能卡模式。

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

            發送數據時,幾個重要的標志位如下:

            TE:發送使能。

            TXE:發送寄存器為空,發送單個字節時使用。

            TC:發送完成,發送多個字節數據時候使用。

            TXIE:發送完成中斷使能。

            2)接收器

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

            接收數據時,幾個重要的標志位如下:

            RE: 接收使能。

            RXNE:讀數據寄存器非空。

            RXNEIE:發送完成中斷使能。

            4.小數波特率生成

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

            其中,f PLCK 為 USART 時鐘, USARTp 是一個存放在波特率寄存器(USART_BRR)的一個無符號定點數。其中 p_Mantissa[11:0]位定義 USARTp 的整數部分,p_Fraction[3:0]位定義 USARTp 的小數部分。

            例如:p_Mantissa=24(0x18),p_Fraction=10(0x0A),此時 USART_BRR 值為0x18A;那么USARTp的小數位10/16=0.625;整數位24,最終USARTp的值為24.625。

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

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

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

            115200 =72000000/(16 ∗ USARTp)

            解 得 USARTp=39.0625,可 算 得 p_Fraction=0.0625*16=1=0x01 ,p_Mantissa=39=0x27,即應該設置 USART_BRR 的值為 0x171。

            5.校驗控制

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

            使用了奇偶校驗控制位后,每個字符幀的格式變成了:起始位+數據幀+校驗位+停止位。

            根據M位定義的幀長度,可能的USART幀格式列在下表中。

            6.中斷請求

            上一篇:STM32F407之SD卡讀數據介紹

            下一篇:Shell命令

            熱點文章推薦
            華清學員就業榜單
            高薪學員經驗分享
            熱點新聞推薦
            前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2018 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號,京公海網安備11010802025203號

            回到頂部

            有位老師想和您聊一聊

            yy4480影院