STM32中Usart的使用

目錄

一、USART簡介

1.電平標準

2.通信接口

? ?3.硬件電路?

4.串口參數以及時序

5.串口時序

二、USART結構介紹

1.USART功能框圖?

?編輯??1.1 功能引腳

1.2 數據寄存器

1.3? 控制器

1.4 波特率發生器

1.5簡化結構圖

?2.數據幀


一、USART簡介

????????USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 是一種串行通信接口,用于實現設備之間的數據交換。它支持 同步模式異步模式,在 STM32 中最常用的是 異步串行通信(UART)模式

  • USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/異步收發器 USART是STM32內部集成的硬件外設,可根據數據寄存器的一個字節數據自動生成數據幀時序,從TX引腳發送出去,也可自動接收RX引腳的數據幀時序,拼接為一個字節數據,存放在數據寄存器里
  • 自帶波特率發生器,最高達4.5Mbits/s
  • 可配置數據位長度(8/9)、停止位長度(0.5/1/1.5/2)
  • 可選校驗位(無校驗/奇校驗/偶校驗)
  • 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
  • STM32F103C8T6 USART資源: USART1、 USART2、 USART3(USARRT1是APB2總線上的設備,其他的都是APB1總線)

1.電平標準

????????電平標準是數據1和數據0的表達方式,是傳輸線纜中人為規定的電壓與數據的對應關系,串口常用的電平標準有如下三種:TTL電平、RS232電平、RS485電平。根據通訊使用的電平標準不同,串口通訊可分為 TTL 標準及 RS-232 標準,見表 TTL 電平標準與 RS232 電平標準(RS485電平:兩線壓差+2~+6V表示1,-2~-6V表示0(差分信號))?。相同的電平才可以互相通信,不同的電平需要加一個電平轉換芯片轉接一下。

????????我們知道常見的電子電路中常使用TTL 的電平標準,理想狀態下,使用 5V 表示二進制邏輯 1
使用 0V 表示邏輯 0 ;而為了增加串口通訊的遠距離傳輸及抗干擾能力,它使用 -15V 表示邏輯 1
+15V 表示邏輯 0 。見圖 RS-232 TTL 電平標準下表示同一個信號 。這個-15和+15是相對于GND的,相對于GND是正的還是負的。

2.通信接口

  • ????????通信的目的:將一個設備的數據傳送到另一個設備,擴展硬件系統。
  • ????????通信協議:制定通信的規則,通信雙方按照協議規則進行數據收發。

雙工模式解釋
全雙工
  • 通信雙方能夠同時進行雙向通信
  • 一般全雙工的通信線都有兩根,如串口:TX:發送,RX:接收
  • 發送線路和接收線路互相不影響
半雙工
  • 也支持雙向通信,但是同一時間只能一方發送,一方接收,不能同時發送和接收
  • 類似于對講機,一個人說話時,另一個人必須等待說完才能回話。
時鐘特性解釋
異步
  • 異步通信是指通信雙方沒有共享的時鐘信號,而是依靠事先約定好的波特率(Baud Rate) 來協調數據的發送和接收時間。
  • 同步方式:通過起始位、停止位和波特率來實現同步
  • 通信效率:較低,但簡單可靠,同時硬件復雜度也低,只需要TX和RX
  • 例子:就像兩個人用手機發短信聊天,不需要實時通話,只要知道對方說話的速度(波特率),就能理解對方說了什么 —— 這就是“異步”。
同步
  • 同步通信是指通信雙方在統一的時鐘信號控制下進行數據傳輸。發送端和接收端共享一個公共時鐘源(Clock),數據的發送和接收嚴格按照時鐘節拍進行。
  • 即需要一條專門的時鐘線(如 SCLK)
  • 數據與時鐘對齊:數據在每個時鐘沿(上升沿或下降沿)被采樣
  • 通信效率:高,適合高速傳輸,但是硬件復雜度也高
  • 例子:就像兩個人一起聽音樂打拍子跳舞,動作完全跟著節奏來 —— 這就是“同步”。
電平特性解釋
單端信號
  • 單端信號是指信號通過一個單獨的導線傳輸,并相對于一個共同的參考點(通常是地線GND)進行測量(即共地)。這意味著信號電壓是相對于地來定義的。
  • 信號傳輸:通過單一導線傳輸信號,相對于地
  • 抗干擾能力:較弱,容易受到電磁干擾(EMI)影響
差分信號
  • 差分信號是指通過一對導線同時傳輸兩個信號,這兩個信號相位相反(即一個為正時另一個為負)。接收端通過比較這兩條線上電壓差值來識別信號狀態,而不是相對于地。
  • 信號傳輸:使用兩條線傳輸互補信號
  • 抗干擾能力:強,因為共模噪聲可以被抵消

? ?3.硬件電路?

  • 簡單雙向串口通信有兩根通信線(發送端TX和接收端RX)
  • TX與RX要交叉連接 當只需單向的數據傳輸時,可以只接一根通信線
  • 當電平標準不一致時,需要加電平轉換芯片

? ? ? ? 當有獨立供電的時候,VCC可以不連接。單設備1有供電,設備2沒有供電的時候,就需要接VCC,用VCC給設備2供電。

4.串口參數以及時序

????????串口通訊的數據包由發送設備通過自身的TXD 接口傳輸到接收設備的 RXD 接口。在串口通訊
的協議層中,規定了數據包的內容,它由啟始位、主體數據、校驗位以及停止位組成,通訊雙方
的數據包格式要約定一致才能正常收發數據
  • 波特率:串口通信的速率,異步通訊中由于沒有時鐘信號,所以兩個通訊設備之間需要約定好波特率,即每個碼元的長度,以便對信號進行解碼,串口數據包的基本組成中用虛線分開的每一格就是代表一個碼元。常見的波特率為4800、9600、115200等。
  • 起始位:標志一個數據幀的開始,固定為低電平,串口的空閑狀態位高電平。數據包的停止信號可由0.5、1、1.5或2個邏輯1的數據位表示,只要雙方約定一致即可。
  • 數據位:數據幀的有效載荷,1為高電平,0為低電平,低位先行。在數據包的起始位之后緊接著的就是要傳輸的主體數據內容,也稱為有效數據,有效數據的長度常被約定為5、6、7或8位長。
  • 校驗位:用于數據驗證,根據數據位計算得來。校驗方法有奇校驗(odd)、偶校驗(even)、0校驗(space)、1校驗(mark)以及無校驗(noparity)。
  • 停止位:用于數據幀間隔,固定為高電平,為下一個起始位做準備。
波特率解釋:如果波特率為1000bps,那就表示1s要發送1000位,每一位的時間就是1ms,發送方每隔1ms發送一位,接收方每隔1ms接收一位。即決定了每多多長時間發送一位。
奇校驗:包括校驗位在內的9位數據中會出現奇數個1。
偶校驗:包括校驗位在內的9位數據中出現偶數個1。
就是發送方會在最后一個校驗位補1或者不補。

5.串口時序

0x55,9600,8位數據,1位停止,無校驗
數據是0x55,9600,8位數據,1位停止,無校驗

數據是 0xAA,9600,8位數據,1位停止,無校驗
數據是0xFF,9600,8位數據,1位停止,無校驗
數據是0x00,9600,8位數據,1位停止,無校驗
數據是0x55,4800,8位數據,1位停止,無校驗
數據是0x55,9600,8位數據,1位停止,偶校驗
數據是0x55,9600,8位數據,1位停止,無校驗
數據是0x55,9600,8位數據,2位停止,無校驗

?每一位的時間計算:1/波特率

硬件的話會自動執行

軟件模擬:定時調用GPIO_ReadInputDataBit來讀取每一位


二、USART結構介紹

1.USART功能框圖?

??1.1 功能引腳

  • TX:發送數據輸出引腳。
  • RX:接收數據輸入引腳。
  • SW_RX:數據接收引腳,只用于單線和智能卡模式,屬于內部引腳,沒有具體外部引腳。
  • nRTS:請求以發送(RequestToSend)n表示低電平有效。如果使能RTS流控制,當USART收器準備好接收新數據時就會將nRTS變成低電平;當接收寄存器已滿時,nRTS將被設置為高電平。該引腳只適用于硬件流控制。
  • nCTS:清除以發送(ClearToSend)n表示低電平有效。如果使能CTS流控制,發送器在發送下一幀數據之前會檢測nCTS引腳,如果為低電平,表示可以發送數據,如果為高電平則在發送完當前數據幀之后停止發送。該引腳只適用于硬件流控制。
  • SCLK:發送器時鐘輸出引腳。這個引腳僅適用于同步模式。

1.2 數據寄存器

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

????????第二個方框中的發送數據寄存器(TDR Transmit DR)和接收數據寄存器(RDR Receive DR)將發送或者接收的數據存儲在這里,這兩個寄存器占用同一個地址,在程序上,只表現為一個寄存器,就是數據寄存器DR(Data RRegister),但是實際硬件中,是分成兩個寄存器,TDR只寫,RDR只讀,寫操作的時候寫到了TDR,讀操作的從RDR中讀出來。

? ? ? ? 下面的發送移位寄存器和接收移位寄存器。?發送移位寄存器的作用:把一個字節的數據一位一位的移出去,正好對應串口協議的波形的數據位。接收也是類似的。

? ? ? ? 發送移位寄存器和接收移位寄存器的工作原理:就是當寫入0X55的數據時,即寫入到TDR中,寄存器中就是二進制存儲:01010101,此時硬件監測到我們寫入的數據,就會檢查當前發送移位寄存器是不是又數據正在移位,如果沒有,這個0X55的二進制數據就會立刻全部移動到發送移位寄存器中,準備發送,當數據從TDR移動到移位寄存器時,會置一個標志TXE(TX Empty),發送寄存器空,檢查這個標志位,如果置1,就可以在TDR中寫如下一個數據。然后發送移位寄存器就會在下面發送控制的驅動下,向右移位(低位先行),然后一位一位的把數據輸出到TX引腳。當數據移位完成后,新的數據就會再次自動的從TDR轉移到發送移位寄存器里面。接收移位寄存器 同理。

1.3? 控制器

?????????第三個框中的發送控制和接收控制就是用來控制發送/接收移位寄存器的工作。

????????USART有專門控制發送的發送器、控制接收的接收器,還有喚醒單元、中斷控制等等。使用USART之前需要向USART_CR1寄存器的UE位置1使能USART。發送或者接收數據字長可選8位或9位,由USART_CR1M位控制。

發送器
????????當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 個停止位時,具體發送字符時序圖見圖 字符發送時序圖
????????當發送使能位TE 1 之后,發送器開始會先發送一個空閑幀 ( 一個數據幀長度的高電平 ) ,接下來就可以往USART_DR 寄存器寫入要發送的數據。在寫入最后一個數據后,需要等待 USART 狀態寄存器(USART_SR) TC 位為 1 ,表示數據傳輸完成,如果 USART_CR1 寄存器的 TCIE 位置1,將產生中斷。
????????在發送數據時,編程的時候有幾個比較重要的標志位我們來總結下。
接收器
????????如果將USART_CR1 寄存器的 RE 位置 1 ,使能 USART 接收,使得接收器在 RX 線開始搜索起始位。在確定到起始位后就根據RX 線電平狀態把數據存放在接收移位寄存器內。接收完成后就把接收移位寄存器數據移到RDR 內,并把 USART_SR 寄存器的 RXNE 位置 1 ,同時如果USART_CR2寄存器的 RXNEIE 1 的話可以產生中斷。
????????在接收數據時,編程的時候有幾個比較重要的標志位我們來總結下。

????????為得到一個信號真實情況,需要用一個比這個信號頻率高的采樣信號去檢測,稱為過采樣,這個采樣信號的頻率大小決定最后得到源信號準確度,一般頻率越高得到的準確度越高,但為了得到越高頻率采樣信號越也困難,運算和功耗等等也會增加,所以一般選擇合適就好。

????????接收器可配置為不同過采樣技術,以實現從噪聲中提取有效的數據。USART_CR1寄存器的OVER8位用來選擇不同的采樣采樣方法,如果OVER8位設置為1采用8倍過采樣,即用8個采樣信號采樣一位數據;如果OVER8位設置為0采用16倍過采樣,即用16個采樣信號采樣一位數據。

????????USART的起始位檢測需要用到特定序列。如果在RX線識別到該特定序列就認為是檢測到了起始位。起始位檢測對使用16倍或8倍過采樣的序列都是一樣的。該特定序列為:1110X0X0X0000,其中X表示電平任意,10皆可。

????????8倍過采樣速度更快,最高速度可達fPCLK/8fPCLKUSART時鐘,采樣過程見圖8倍過采樣過程。使用第456次脈沖的值決定該位的電平狀態。

????????16倍過采樣速度雖然沒有 8 倍過采樣那么快,但得到的數據更加精準,其最大速度為 f PCLK /16 ,采樣過程見圖 16 倍過采樣過程 。使用第 8 9 10 次脈沖的值決定該位的電平狀態。
沒有噪聲的理想條件下,這三次全為1或者0,全為1就認為收到了1,全為0就認為收到了0;如果有噪聲導致三次不是全為1或者全為0,就按照2:1的規則來,兩次為1就認為收到了1,兩次為0就認為收到了0,然后噪聲標志位NE就會根據這個來置1或者置0。

????????左邊的硬件數據流控制:簡稱流控,就是如果發送設備發的太快,接收設備來不及處理,就會出現丟棄或者覆蓋數據的現象,有了流控,就可以避免這個問題。流控有兩個引腳,一個時nRTS(請求發送,是輸出腳,告訴別人,我當前可不可以接收),另外一個是nCTS(清除胡發送,是出入腳,用于接收別人nRTS的信號),前面的n是低電平有效的意思。

1.4 波特率發生器

? ? ? ? 波特率發生器就是分頻器,APB時鐘進行分頻,得到發送和接收移位的時鐘fPCLKx(x=1或者x=2),USART掛載APB2,所以就是PCLK2的時鐘,一般就是72M,在STM32F103C8T6中,其他的都掛載在APB1,所以是PCLK1的時鐘,一般就是36M,然后對時鐘進行分頻,除以一個USARTDIV的分頻系數。

????????波特率指數據信號對載波的調制速率,它用單位時間內載波調制狀態改變次數來表示,單位為波特。比特率指單位時間內傳輸的比特數,單位bit/s(bps) 。對于 USART 波特率與比特率相等。波特率越大,傳輸速率越快。
????????USART的發送器和接收器使用相同的波特率。計算公式如下:

????????其中,f PLCK USART 時鐘; OVER8 USART_CR1 寄存器的 OVER8 位對應的值, USARTDIV是一個存放在波特率寄存器(USART_BRR) 的一個無符號定點數。其中 DIV_Mantissa[11:0] 位定義USARTDIV 的整數部分, DIV_Fraction[3:0] 位定義 USARTDIV 的小數部分, DIV_Fraction[3] 位只有在OVER8 位為 0 時有效,否則必須清零。

1.5簡化結構圖

?2.數據幀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86685.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86685.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86685.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙HarmonyOS 5小游戲實踐:數字記憶挑戰(附:源代碼)

數字記憶挑戰游戲:打造提升大腦記憶力的鴻蒙應用 在當今數字時代,人們的記憶力面臨著前所未有的挑戰。從日常的待辦事項到復雜的工作任務,強大的記憶力都是提高效率和表現的關鍵。本文將介紹一款基于鴻蒙系統開發的數字記憶挑戰游戲&#xf…

記錄一個C#/.NET的HTTP工具類

記錄一個C#/.NET的HTTP工具類 using Serilog; using System.Net; using System.Text; using System.Text.Json;namespace UProbe.Common.Comm.Http {public class HttpClientHelper{/// <summary>/// 發送HttpGet請求/// </summary>/// <typeparam name"T…

深度學習:PyTorch卷積神經網絡之圖像入門

本文目錄&#xff1a; 一、二值圖像二、**灰度圖像*三、**索引圖像**四、**真彩色RGB圖像****星空圖** 前言&#xff1a;這篇文章開始講解CNN&#xff0c;此前講解的人工神經網絡&#xff08;ANN&#xff09;如果有小伙伴還不清楚&#xff0c;一定要多看&#xff0c;多練習&…

PyTorch RNN實戰:快速上手教程

PyTorch實現RNN的實例 以下是一個使用PyTorch實現RNN的實例代碼,包含數據準備、模型定義、訓練和評估步驟。 RNN流程圖 RNN流程圖,在使用t來表示當前時間點(序列中的第t項),RNN接收所有先前內容得單一個表示h和關于序列最新項的信息,RNN將這些信息合并到迄今為止所有看…

C++項目快速配置SQLite

前言&#xff1a;完全沒接觸過數據庫&#xff0c;但老師課程設計要求數據存儲在數據庫怎么辦&#xff1f;&#xff1f;&#xff1f;主包看了些網絡上的資源&#xff0c;覺得講得都不是很能快速上手&#xff0c;所以決定自己寫一篇博客 SQLiteCpp是一個基于 C 封裝的 SQLite 操…

ArcGIS中對輸入面圖層A的相交問題批量處理的實現方法

一、背景及意義 在各種數據建庫中&#xff0c;拓撲錯誤是必須處理的&#xff0c;其中最常見的是重疊問題&#xff0c;我們常用拓撲工具來檢查重疊&#xff0c;但是由于拓撲工具只能作為檢查且不能批量修改&#xff0c;此時我們可以使用“相交”工具來檢查出重疊部分&#xff0…

【學習筆記】3.3 Decoder-Only PLM

參考資料&#xff1a;https://github.com/datawhalechina/happy-llm Decoder-Only是當前大型語言模型&#xff08;LLM&#xff09;的基礎架構&#xff0c;如 GPT 系列。GPT 是 Decoder-Only 架構的代表&#xff0c;而開源 LLM 如 LLaMA 也是在 GPT 架構基礎上發展而來的。 3…

主流的Attention Backend介紹

Attention Backend 技術背景 注意力&#xff08;Attention&#xff09;機制在深度學習中扮演著關鍵角色&#xff0c;它幫助模型在處理序列數據時&#xff0c;有選擇地關注輸入中的重要信息。然而&#xff0c;傳統的注意力計算往往受到內存訪問和算力分配的雙重制約&#xff0c…

Linux內存取證

我們先把linux取證文件放到kali中&#xff0c;然后這里的Ubuntu18.04-5.4.0-84-generic.zip需要不解壓直接放到vol工具中 然后把Ubuntu18.04-5.4.0-84-generic放到vol工具中&#xff0c;然后開始去這個&#xff0c;使用vol工具查看linux的版本信息 這個LinuxUbuntu18_04-5_4_0-…

使用docx4j 實現word轉pdf(linux亂碼處理)

由于系統之前使用了是itext進行轉換的&#xff0c;現在已經不是開源的工具了&#xff0c;需要收費&#xff0c;然后進行改造&#xff0c;具體處理如下。 <dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId><version…

C++ - vector 的相關練習

目錄 前言 1、題1 只出現一次的數字 &#xff1a; 解法一&#xff1a;遍歷 參考代碼&#xff1a; 解法二&#xff1a;按位異或 參考代碼&#xff1a; 解法三&#xff1a;哈希表 參考代碼&#xff1a; 2、題2 楊輝三角&#xff1a; 參考代碼&#xff1a; 總結 前言 …

JDK 1.8 Stream API:集合流處理深度解析

JDK 1.8 Stream API&#xff1a;集合流處理深度解析 摘要&#xff1a;Stream API 是 JDK 1.8 的革命性特性&#xff0c;它將集合操作從傳統迭代升級為聲明式函數式處理。Stream API三個階段&#xff08;創建→中間操作→終端操作&#xff09;詳解流處理機制&#xff0c;輔以代…

2025學年湖北省職業院校技能大賽 “信息安全管理與評估”賽項 樣題卷(二)

2025學年湖北省職業院校技能大賽 “信息安全管理與評估”賽項 樣題卷&#xff08;二&#xff09; 第一部分&#xff1a;第二部分&#xff1a;網絡安全事件響應、數字取證調查、應用程序安全任務書任務 1&#xff1a;應急響應&#xff08;可以培訓有答案&#xff09;任務 2&…

AiPy實戰(5):效率革命!5分鐘構建行業分析報告

在當今數字化時代&#xff0c;數據呈指數級增長&#xff0c;行業分析報告對于企業的決策制定愈發關鍵。傳統上&#xff0c;撰寫一份行業分析報告&#xff0c;需要分析師耗費大量時間從各類數據庫、新聞資訊平臺、行業報告中手動收集數據&#xff0c;再進行整理、分析和撰寫&…

docker小白自存-windows系統通過docker安裝n8n-nodes-puppeteer

n8n上直接在社區下載puppeteer節點&#xff0c;使用時會報錯說沒有chromium依賴。 找到了n8n-nodes-puppeteer的github試圖解決 根據他的docker安裝指南執行&#xff0c;運行容器時會報exec /docker-custom-entrypoint.sh: no such file or directory &#xff08;明明文件都有…

腳本shebang的作用與使用方法

#!&#xff08;稱為 shebang 或 hashbang&#xff09;是腳本文件開頭的前兩個字符&#xff0c;用于告訴操作系統應該使用哪個解釋器來執行該腳本。 核心作用&#xff1a; 指定解釋器&#xff1a; 明確告訴系統運行這個腳本時應該調用哪個程序&#xff08;解釋器&#xff09;來…

【大模型學習 | BERT 量化學習 (1)】

BERT 情感分析 一、 數據集加載與模型訓練 from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments from datasets import load_dataset import torch import numpy as np from sklearn.metrics import accuracy_score mode_na…

用低通濾波優化串口或485 通信指示燈電路

常見的通信指示燈電路就是簡單的把LED 連到TXD 和RXD 上&#xff0c;一有動靜就閃一下。問題是&#xff0c;如果波特率很高&#xff0c;一次通信時間很短&#xff0c;相當于占空比很低&#xff0c;LED 閃爍的亮度就很弱&#xff0c;不容易觀察。比如MODBUS 通信&#xff0c;波特…

【純干貨】調整word目錄中的行距以及右對齊頁碼

1.問題展現 目錄生成會遇到一些奇葩現象 所以到了展現技術力的時候了【doge】 2.解決word目錄中的行距問題 選中目錄中的文字-》段落 此時你可能勾選了圖片中的一個以上&#xff0c;把他們都取消了&#xff0c; 由于一個目錄的標題對應一個樣式&#xff0c;第一個也可以取消 …

pandas 優雅處理值類型為list的列的csv讀寫問題

文章目錄 直接存儲join list 變成字符串存儲json.dumps序列化存儲以及json.loads反序列化讀取總結 之所以分析這個問題,是因為讀者在跟第三方數據供應商對接數據的時候,老是會遇到數據加載都會出錯的問題,其中一個原因就是list類型數據沒有正確儲存,于是筆者在這篇文章里面詳細…