找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2133|回復(fù): 0
收起左側(cè)

飛控開發(fā)基礎(chǔ)-[3] STM32串口(基礎(chǔ)收發(fā))

[復(fù)制鏈接]
ID:716213 發(fā)表于 2020-3-26 17:21 | 顯示全部樓層 |閱讀模式
圖片1.png
串口(基礎(chǔ)收發(fā))[size=15.0000pt]一、串口簡介
在嵌入式開發(fā)領(lǐng)域講的串口通常指的是UART,UART即為通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter)。是一種通用串行數(shù)據(jù)總線,用于異步通信。該總線雙向通信,可以實(shí)現(xiàn)全雙工傳輸和接收。
UART常常用于兩個單片機(jī)之間進(jìn)行數(shù)據(jù)傳輸,如下圖所示。
圖片2.png
其通信過程如下圖所示。
圖片3.png
STM32F103提供了3路串口,支持同步單線通信和半雙工單線通信、支持LIN、支持調(diào)制解調(diào)器操作、智能卡協(xié)議和IrDA SIR ENDEC規(guī)范、具有DMA等?膳渲脼榇诘囊_是有限制的,所以在設(shè)計(jì)硬件電路時需要注意哪些引腳可以配置為串口引腳,如下表所示。
串口管腳映射
串口號
RXD
TXD
1
PA10
PA9
2
PA3
PA2
3
PB11
PB10

二、UART串口通訊協(xié)議
串口通訊過程中一幀數(shù)據(jù)包含了起始位、數(shù)據(jù)位、停止位以及可有可無的奇偶校驗(yàn)位,除了需要知道這些概念外,還需要理解波特率的概念。
(1)起始位,當(dāng)未有數(shù)據(jù)發(fā)送時,數(shù)據(jù)線處于邏輯1”狀態(tài);先發(fā)出一個邏輯“0”信號,表示開始傳輸字符;
(2)數(shù)據(jù)位,緊接著起始位之后的8個數(shù)據(jù)。從最低位開始傳送;
(3)奇偶校驗(yàn)位,一般不用;
(4)停止位,一般為1位(也可以是1.5位或者2位),為高電平。作為結(jié)束的標(biāo)志;
(5)波特率,波特率表示每秒鐘傳送的碼元符號的個數(shù),是衡量數(shù)據(jù)傳送速率的指標(biāo)。
如下圖所示,為一幀串口數(shù)據(jù)的幀組成。
圖片4.png
三、UART串口寄存器
STM32F103與串口相關(guān)的寄存器眾多,這里只講解重要的幾個寄存器。
(1)USART_SR狀態(tài)寄存器,如下圖所示
圖片5.png
需要了解的位有:TXE:發(fā)送寄存器為空;TC:發(fā)送完成;RXNE:讀取數(shù)據(jù)寄存器不為空;ORE:上溢錯誤;FE:幀錯誤;PE:奇偶校驗(yàn)錯誤。
(2)USART_DR:該寄存器只有低8位有效,而且具有讀寫操作,有關(guān)該寄存器中的數(shù)據(jù)是要發(fā)送的數(shù)據(jù)還是接受到的數(shù)據(jù)取決于執(zhí)行的操作是“讀取”還是“寫入”。 如下圖所示:
圖片6.png
(3)USART_BRR:波特率寄存器,用于設(shè)置串口通訊的波特率,如下圖所示:
圖片7.png
其中在寄存器中會設(shè)定相應(yīng)的值,DIV_Mantissa[11:0]用來設(shè)定分頻系數(shù)的整數(shù)部分,DIV_Fraction[3,0]用來設(shè)定分頻系數(shù)的小數(shù)部分。
串口的波特率計(jì)算公式如下:
               51hei圖片_20200326171508.png
這里的fPCLKx(x=1、2)是給外設(shè)的時鐘(PCLK1用于USART2、3、4、5,PCLK2用于USART1,這里STM32F103CBT6沒有的串口就不講解)。USARTDIV是一個無符號的點(diǎn)數(shù)。假設(shè)串口波特率為115200,使用的是串口1,串口的時鐘為PCLK2的時鐘(即APB2總線的時鐘)為72MHz,如下圖所示。
圖片8.png
根據(jù)公式可得:
USARTDIV=72000000/(115200*16)=39.0625
所以小數(shù)部分DIV_Fraction=0.0625*16=1=0x01
整數(shù)部分DIV_Mantissa=39=0x27。

四、串口基礎(chǔ)收發(fā)實(shí)驗(yàn)
串口收發(fā)實(shí)驗(yàn)使用STM32的串口1UART1,通過串口模塊連接電腦,使用串口調(diào)試助手來進(jìn)行通信,STM32收到數(shù)據(jù)后把收到的數(shù)據(jù)在發(fā)回電腦。串口引腳如下圖所示
圖片8-2.png
兩個串口引腳分別與PA9PA10引腳相連,那么我們就對PA9PA10引腳以及串口模塊進(jìn)行配置,配置代碼(通過調(diào)用官方庫)。
代碼編寫的思路如下:
編程思路
1
管腳配置
1、定義結(jié)構(gòu)體;
2、使能時鐘;
3、填充結(jié)構(gòu)體;
4、裝載結(jié)構(gòu)體。
2
串口配置
1、定義結(jié)構(gòu)體;
2、使能時鐘;
3、填充結(jié)構(gòu)體;
4、裝載結(jié)構(gòu)體
5、開啟中斷;
6、使能串口。
3
中斷優(yōu)先級管理
1、定義結(jié)構(gòu)體;
2、填充結(jié)構(gòu)體;
3、裝載結(jié)構(gòu)體。
4
邏輯處理
等待接收以及發(fā)送數(shù)據(jù)
串口初始化代碼如下:
圖片9.png
串口中斷函數(shù)代碼如下:
圖片10.png
設(shè)置串口1的波特率為115200,代碼如下:
圖片11.png
保存、編譯、下載代碼,把飛控上的USART1上接的視覺模塊先拔下來,然后接上USB轉(zhuǎn)串口模塊,如下圖所示:
圖片12.png
然后在把USB轉(zhuǎn)串模塊插到電腦的USB口,打開電腦端的串口調(diào)試助手,找到對應(yīng)的COM口(前提是安裝了USB轉(zhuǎn)串口驅(qū)動),設(shè)置波特率為115200,打開,在串口調(diào)試助手的輸入框內(nèi)輸入“www點(diǎn)fengke點(diǎn)club”,點(diǎn)發(fā)送,然后可以看到串口調(diào)試助手收到來自STM32的回發(fā)信息,也是“www點(diǎn)fengke點(diǎn)club”,如下圖所示。
圖片13.png


完整的pdf格式文檔51黑下載地址:
2.飛控開發(fā)基礎(chǔ)-【3】串口(基礎(chǔ)收發(fā)).pdf (1.03 MB, 下載次數(shù): 14)

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表