USART的概述
2.1.1 什么是USART?USART的作用?
USART:通用同步異步收發(fā)器。
USART的作用:能夠靈活地與外部設(shè)備進行全雙工數(shù)據(jù)交換
2.1.2 USART的特征
<1> 全雙工異步通信
<2> 可配置為 16 倍過采樣或 8 倍過采樣
<3> 小數(shù)波特率發(fā)生器系統(tǒng)
<4> 數(shù)據(jù)字長度可編程( 8 位或 9 位)
<5> 停止位可配置 - 支持 1 或 2 個停止位
<6> 發(fā)送器和接收器具有單獨使能位
<7>傳輸檢測標志:
— 接收緩沖區(qū)已滿
— 發(fā)送緩沖區(qū)為空
— 傳輸結(jié)束標志
<8>十個具有標志位的中斷源:
— CTS 變化
— LIN 停止符號檢測
— 發(fā)送數(shù)據(jù)寄存器為空
— 發(fā)送完成
— 接收數(shù)據(jù)寄存器已滿
— 接收到線路空閑
— 溢出錯誤
— 幀錯誤
— 噪聲錯誤
— 奇偶校驗錯誤
任何USART雙向通信均需要至少兩個引腳:
接收數(shù)據(jù)輸入引腳 (RX)
發(fā)送數(shù)據(jù)引腳輸出 (TX)
正常 USART 模式下
發(fā)送或接收前保持空閑線路
起始位
數(shù)據(jù)(字長 8 位或 9 位),最低有效位在前
用于指示幀傳輸已完成的 0.5 個、 1 個、 1.5 個、 2 個停止位
TX引腳在起始位工作期間處于低電平狀態(tài)。在停止位工作期間處于高電平狀態(tài)。
2.2 USART的框架
2.2.1發(fā)送數(shù)據(jù)過程
放大后的各個部分:
GPIO部分:

映射部分:

USART部分:

2.2.2接收數(shù)據(jù)過程
放大后的各個部分:
GPIO部分:

映射部分:

USART部分:

2.2.3 發(fā)送與接收過程解讀
GPIO要配為復(fù)用功能
復(fù)用與通用的區(qū)別:這里的外設(shè)就是USART

發(fā)送過程:
接收過程:
注意:
發(fā)送數(shù)據(jù)寄存器(TDR)與接收數(shù)據(jù)寄存器(RDR)是兩個寄存器,寫代碼時只有DR,DR代表發(fā)送數(shù)據(jù)寄存器還是接收數(shù)據(jù)寄存器,取決于所在函數(shù)是接收還是發(fā)送。
2.2.4 USART映射解讀
查看原理圖,可知USART1的發(fā)送TX與接收RX對應(yīng)引腳分別為PA9\PA10。

這也是M3默認的映射引腳。

與PA9與PA10可知我們選擇的復(fù)用寄存器是GPIOx_AFRH


由圖可知,
2.3 USART波特率的配置
2.3.1 配置波特率公式
fCK看USART掛載的外設(shè)總線,可知84MHz

OVER8根據(jù)控制寄存器1的位15可知,默認采用16倍過采樣,OVER8=0

USARTDIV根據(jù)下面公式,算得:



2.3.2 實際配置波特率過程
《1》確定需要配置的波特率、采用默認過采用模式
《2》根據(jù)公式1,可求出USARTDIV
《3》USARTDIV是寫入到波特率寄存器 (USART_BRR)的浮點數(shù),由于寄存器不能直接寫入浮點數(shù),所以需要把整數(shù)和小數(shù)分開寫入到USART_BRR中。
《4》查看寄存器USART_BRR可知,12位控制整數(shù),4位控制小數(shù)。
《5》USARTDIV的一個浮點數(shù),進行強制轉(zhuǎn)換為整型,即可獲得它的整數(shù)部分DIV_Mantissa,最后通過USATRDIV公式,可算出小數(shù)部分DIV_Fraction。
《6》在寫入整數(shù)部分時,整數(shù)位要左移4位,因為從位4開始寫入整數(shù)部分,小數(shù)部分直接寫入。
2.4 軟件設(shè)計
2.4.1 USART配置流程
《1》開GPIOA\USART1時鐘
《2》配置GPIOA為復(fù)用推挽輸出
《3》映射PA9與PA10到USART_TX\USART_RX
《4》配置波特率
《5》配置USART模塊
2.4.2 USART模塊配置


2.4.3 USAR1初始化函數(shù)
2.5 補充
2.5.1 問答
<1>串口是什么?有什么用?
串口是一種串行全雙通信接口,同步或異步收發(fā)數(shù)據(jù),但一般我們只使用異步功能。
常用于與外部設(shè)備通信、交互信息。外部若有串口通信接口,就可以與單片機進行通信,如ESP8266模塊、RS485模塊等。
<2>同步與異步的理解?
同步與異步基于兩個設(shè)備討論:
同步:它們有共同的時鐘線,由時鐘線控制收發(fā)
異步:它們沒有公共的時鐘線,需要雙方配置一樣的波特率,保證收發(fā)的準確。
<3>串行與并行?
串行:
只有一根線或兩個根數(shù)據(jù)線,一次只能收發(fā)一位數(shù)據(jù)。兩根線的設(shè)計是為了兩個設(shè)備能同時收發(fā)一位數(shù)據(jù)。
并行:
有多根數(shù)據(jù)線,一般是8的倍數(shù),假設(shè)是8根數(shù)據(jù)線,一次可傳送一個字節(jié)(8位)的數(shù)據(jù)。
<4>單工、半雙工、全雙工?
單共:
一方只能接收,另一方只能發(fā)送,從始至終發(fā)送方向不變,單方向固定。例如:廣播與收音機。廣播只能發(fā)出信號,收音機只能接收信號,兩者互換不能正常工作。
半雙工:
某一時間段,一方發(fā)送。另一方接收;另一個時間段,一方接收,另一方發(fā)送。雙方都可以發(fā)送和接收,但不能同時發(fā)送或接收。例如:對講機。
全雙工:
雙方可以都可以同時收發(fā)。例如:電話
<5>波特率是什么?為什么要配置波特率?
一秒鐘能傳輸?shù)亩夁M制位數(shù)。假設(shè)9600代表1秒鐘可以一次傳輸9600位。即9.6Kbit。
異步通信雙方需要有個約定,發(fā)送方以多少速度(波特率)發(fā)送數(shù)據(jù)過去(例如9600),接收方就必須以對應(yīng)的速度(速度)接收,從而保證讀取到正確的數(shù)據(jù)。
<6>如何保證數(shù)據(jù)準確發(fā)送過去呢?
USART串口通信自帶有通信協(xié)議,一幀數(shù)據(jù)位10位或11位,常常使用10位作為一幀數(shù)據(jù)。
一幀數(shù)據(jù)的構(gòu)成:

<7>知識領(lǐng)悟
模塊學(xué)習(xí)心得:
復(fù)用與通用.png (30.97 KB, 下載次數(shù): 70)
1.74 MB, 下載次數(shù): 10, 下載積分: 黑幣 -5
293.03 KB, 下載次數(shù): 25, 下載積分: 黑幣 -5
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |