首頁/ 汽車/ 正文

STM32串列埠通訊詳解

一。資料通訊方式

1。序列與並行通訊

按資料傳送的方式,通訊可分為序列通訊與並行通訊。

序列通訊:是指裝置之間透過一根資料訊號線,地線以及控制訊號線,按資料位形式一位一位地傳輸資料的通訊方式,同一時刻只能傳輸一位(bit)資料。

並行通訊:是指使用 8、16、32 及 64 根或更多的資料線(有多少訊號為就需要多少訊號位)進行傳輸的通訊方式,可以同一時刻傳輸多個數據位的資料。

STM32串列埠通訊詳解

序列通訊與並行通訊的特性對比:

STM32串列埠通訊詳解

並行可以同時傳送多位資料所以速度比序列的速度要快很多,但並行要的資料線也更多相對成本會更高,而且並行傳輸對同步要求較高,且隨著通訊速率的提高,訊號干擾的問題會顯著影響通訊效能。

2。全雙工、半雙工及單工通訊

單工通訊:資訊只能單方向傳輸的工作方式,一個固定為傳送裝置,另一個固定為接收裝置,傳送端只能傳送資訊不能接收資訊,接收端只能接收資訊不能傳送資訊,只需一根訊號線

半雙工通訊:可以實現雙向的通訊,但不能在兩個方向上同時進行,必須輪流交替進行,其實也可以理解成一種可以切換方向的單工通訊,同一時刻必須只能一個方向傳輸,只需一根資料線

全雙工通訊:在同一時刻,兩個裝置之間可以同時收發資料,全雙工方式無需進行方向的切換,這種方式要求通訊雙方均有傳送器和接收器,同時,需要2根資料線。

STM32串列埠通訊詳解

常見串列埠通訊介面:

STM32串列埠通訊詳解

3。同步通訊與非同步通訊

同步通訊:收發裝置雙方會使用一根訊號線表示時鐘訊號,在時鐘訊號的驅動下雙方進行協調,同步資料,通訊中通常雙方會統一規定在時鐘訊號的上升沿或下降沿對資料線進行取樣,對應時鐘極性與時鐘相位。

I2C 的同步通訊:

STM32串列埠通訊詳解

非同步通訊:不需要時鐘訊號進行資料同步,它們直接在資料訊號中穿插一些同步用的訊號位,或者把主體資料進行打包,以資料幀(串列埠:起始位 資料 校驗位(可以沒有) 停止位)的格式傳輸資料,某些通訊中還需要雙方約定資料的傳輸速率(波特率),以便更好地同步。

STM32串列埠通訊詳解

二。串列埠通訊協議

通訊協議:分為物理層和協議層。物理層規定通訊系統中具有機械、電子功能部分的特性,確保原始資料在物理媒體的傳輸(通俗一點就是硬體部分)。協議層主要規定通訊邏輯,統一收發雙方的資料打包、解包標準(軟體)。

STM32串列埠簡介

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

序列通訊一般是以幀格式傳輸資料,即是一幀一幀的傳輸,每幀包含有起始訊號、資料資訊、校驗資訊(由我們自己設定)、停止訊號。

1。物理層

1)RS232標準

很多微控制器內部例如我們所用的STM32,以及一些感測器一般都是TTL電平。

RS232是一種序列資料傳輸形式,稱其為序列連線,最經典的標誌就是 9 針孔的 DB9 電纜RS232電壓表示邏輯 1 ,0的範圍大極大的增強了容錯率,主要用於工業裝置直接通訊。

STM32串列埠通訊詳解

由上圖可知,TLL與RS-232標準邏輯相反,而且電平也大不相同,若微控制器與微控制器或其他裝置TLL裝置通訊採用RS-232通訊(DB9),肯定先要進行電平的轉化TLL->RS232 RS232->TTL

STM32串列埠通訊詳解

兩個通訊裝置的“DB9 介面”之間透過串列埠訊號線建立起連線,串列埠訊號線中使用“RS-232 標準”傳輸資料訊號。由於 RS-232 電平標準的訊號不能直接被控制器直接識別,所以這些訊號會經過一個“電平轉換晶片”轉換成控制器能識別的“TTL 標準”的電平訊號,才能實現通訊。

BD9串列埠線:

STM32串列埠通訊詳解

2)USB轉串列埠(重點)

STM32串列埠通訊詳解

至於為什麼是重點因為這是我實驗用的方式重點介紹:

USB轉串列埠:主要用於裝置(STM32)與電腦通訊

電平轉換晶片一般有CH340、PL2303、CP2102、FT232

使用的時候電腦要按照電平轉換晶片的驅動(虛擬出一個串列埠)我這裡裝的是CH340

STM32串列埠通訊詳解

原理圖:一定要搞懂下面這張圖

STM32串列埠通訊詳解

這裡是拿的野火的原理圖,因為我覺得原子的圖畫的不好,不過原理是一致的。

3原生的串列埠到串列埠

STM32串列埠通訊詳解

原生的串列埠通訊主要是控制器跟串列埠的裝置或者感測器通訊他們但是TLL電平,不需要經過電平轉換晶片來轉換電平,直接就用TTL電平通訊,GPS模組、GSM模組、串列埠轉WIFI模組、HC04藍芽模組

2。協議層

串列埠通訊的協議層中,規定了資料包的內容,它由啟始位、主體資料、校驗位以及停止位組成,通訊雙方的資料包格式要約定一致(一樣的起始位 資料 校驗位 停止位)才能正常收發資料

STM32串列埠通訊詳解

1)通訊的起始和停止訊號

串列埠通訊的一個數據包從起始訊號開始,直到停止訊號結束。資料包的起始訊號由一個邏輯 0 的資料位表示,而資料包的停止訊號可由 0。5、1、1。5 或 2 個邏輯 1 的資料位表示

1個停止位:停止位位數的預設值。

2個停止位:可用於常規USART模式、單線模式以及調變解調器模式。

0。5個停止位:在智慧卡模式下接收資料時使用。

1。5個停止位:在智慧卡模式下發送和接收資料時使用。

2)有效資料

在資料包的起始位之後緊接著的就是要傳輸的主體資料內容,也稱為有效資料,有效資料的長度常被約定為 5、6、7 或 8 位長

3)資料校驗

偶校驗:校驗位使得一幀中的7或8個LSB資料以及校驗位中’1’的個數為偶數。

例如:資料=00110101,有4個’1’,如果選擇偶校驗(在USART_CR1中的PS=0),校驗位將是’0’,最後資料檢驗如果資料有偶數個1則資料傳輸沒有出錯(但不是絕對的,如果同時兩個資料為傳送錯誤(0變成1)則還是偶數個1)

STM32串列埠通訊詳解

奇校驗:此校驗位使得一幀中的7或8個LSB資料以及校驗位中’1’的個數為奇數。

例如:資料=00110101,有4個’1’,如果選擇奇校驗(在USART_CR1中的PS=1),校驗位將是’1’,最後資料檢驗如果資料有奇數個1則資料傳輸沒有出錯,但同樣不是絕對的(同時兩個1變成0)

STM32串列埠通訊詳解

STM32串列埠通訊詳解

傳輸模式:如果USART_CR1的PCE位被置位,如果奇偶校驗失敗USART_SR暫存器中的PE標誌被置’1’,並且如果USART_CR1暫存器的PEIE在被預先設定的話,中斷產生(我們可以在相應的中斷服務函式中,寫處理校驗失敗的程式碼)

STM32串列埠通訊詳解

STM32串列埠通訊詳解

三。USART 功能框圖(超級重要)

只要把功能框圖分析透徹,寫程式碼不就是信手拈來,一定一定要掌握!!!

STM32串列埠通訊詳解

1。功能引腳:

STM32串列埠通訊詳解

2。資料暫存器(重點)

STM32串列埠通訊詳解

STM32串列埠通訊詳解

STM32串列埠通訊詳解

下面這張圖也非常重要理解理解!!

STM32串列埠通訊詳解

3。控制單元(重點)

傳送器

傳送器根據M位的狀態傳送8位或9位的資料字。當傳送使能位(TE)被設定時,傳送移位暫存器中的資料在TX腳上輸出,相應的時鐘脈衝在CK腳上輸出。

一個字元幀傳送需要三個部分:起始位+資料幀(可能有校驗位)+停止位。每個字元(一個數據幀)之前都有一個低電平的起始位,之後跟著的停止位,其數目可配置,資料幀就是我們要傳送的 8 位或 9 位資料,資料是從最低位開始傳輸的,停止位是一定時間週期的高電平。

配置步驟:

透過在USART_CR1暫存器上置位UE位來啟用USART

STM32串列埠通訊詳解

程式設計USART_CR1的M位來定義字長。

STM32串列埠通訊詳解

在USART_CR2中程式設計停止位的位數。

STM32串列埠通訊詳解

如果採用多緩衝器通訊,配置USART_CR3中的DMA使能位(DMAT)。按多緩衝器通訊中的描述配置DMA暫存器,關於DMA下期再詳細講解。

STM32串列埠通訊詳解

利用USART_BRR暫存器選擇要求的波特率。

STM32串列埠通訊詳解

傳送和接收由一共用的波特率發生器驅動,當傳送器和接收器的使能位分別置位時,分別為其產生時鐘。

STM32串列埠通訊詳解

相關文章

頂部