什么是STM32串口通信協(xié)議?它的基本原理有哪些?
STM32是一款由STMicroelectronics生產的微控制器系列,具有高性能、低功耗和豐富的外設資源。其中,串口通信是一種常用的通信方式,可以實現與其他設備之間的數據傳輸。在本文中,我將詳細介紹STM32的串口通信原理和使用方法,并附上相關的代碼示例。
串口通信是一種利用串行通信協(xié)議進行數據傳輸的方式。它通過單一的數據線來傳輸數據,相比并行通信,串口通信具有線路簡單、傳輸距離遠的優(yōu)勢。STM32的串口通信主要通過USART(通用同步/異步收發(fā)器)外設來實現,每個STM32微控制器都配備了至少一個USART外設。
以下是使用STM32的串口通信的步驟:
第一步:初始化串口外設
首先,需要選擇一個可用的USART外設,并將其與GPIO引腳進行映射。在STM32的寄存器中,我們可以設置波特率、數據位數、停止位數、校驗位等參數。此外,還要使能外設時鐘,并啟用對應的中斷。
串口在嵌入式系統(tǒng)當中是一類重要的數據通信接口,其本質功能是作為 CPU 和串行設備間的編碼轉換器。當數據從 CPU 經過串行端口發(fā)送出去時,字節(jié)數據轉換為串行的位;在接收數據時,串行的位被轉換為字節(jié)數據。應用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求(打開串口),通信完成后必須釋放資源(關閉串口)。典型地,串口用于 ASCII 碼字符的傳輸。通信使用3根線完成:地線,發(fā)送數據線,接收數據線。串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。對于兩個進行通行的端口,這些參數必須匹配:波特率是一個衡量通信速度的參數,它表示每秒鐘傳送的 bit 的個數;數據位是衡量通信中實際數據位的參數,當計算機發(fā)送一個信息包,標準的值是 5,7 和 8 位。如何設置取決于你的需求;停止位用于表示單個包的最后一位,典型的值為 1,1.5和 2 位,停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會;奇偶校驗位是串口通信中一種簡單的檢錯方式,有四種檢錯方式——偶、奇、高和低,也可以沒有校驗位。
對于通訊協(xié)議,我們也以分層的方式來理解,最基本的是把它分為物理層和協(xié)議層。
物理層:物理層上我們這里拿出標準的RS232串口和USB轉串口進行分析、講解。在物理層上我們用到最多的還是USB轉串口。
RS232:
在原理圖上我們可以看到右側RS232串口上兩個通訊設備的“DB9 接口”之間通過串口信號線建立起連接,串口信號線中使用“RS-232 標準”傳輸數據信號。由于 RS-232 電平標準的信號不能直接被控制器直接識別,所以這些信號會經過一個“電平轉換芯片(MAX3232CSE)”轉換成控制器能識別的“TTL 校準”的電平信號才能實現通訊。
我們知道常見的電子電路中常使用 TTL 的電平標準,理想狀態(tài)下,使用 5V 表示二進制邏輯 1,使用 0V 表示邏輯 0;而為了增加串口通訊的遠距離傳輸及抗干擾能力,它使用-15V 表示邏輯 1,+15V 表示邏輯 0。由于控制器一般使用 TTL 電平標準,所以常常會使用 MA3232 芯片對 TTL 及 RS-232 電平的信號進行互相轉換。即:
USB轉串口:
這個通訊方式是在單片機中最經常運用到的通訊方式。USB轉串口主要用于設備跟電腦通信。
這里原理圖上用到的電平轉換芯片主要是CH340G。一般我們主要運用的電平轉換芯片有:CH340、PL2303、CP2102、FT232。
協(xié)議層:我們在使用串口的時候主要還是用到“通用異步通訊”——可以參考通訊基本概念基礎。這篇講解了通訊的一些基本原理。所以在協(xié)議層上就不多講解這個概念問題了。
協(xié)議層是指串口通訊的數據包由發(fā)送設備通過自身的 TXD 接口傳輸到接收設備的 RXD 接口。在串口通訊的協(xié)議層中,規(guī)定了數據包的內容,它由啟始位、主體數據、校驗位以及停止位組成,通訊雙方的數據包格式要約定一致才能正常收發(fā)數據。如圖所示:
二、usart功能框圖
在功能框圖上把其劃分為四個部分——GPIO引腳、數據寄存器、控制器、波特率。我們在這里就主要講解前三大功能,波特率一般可以在stm32上自主設置波特率的值(一般常用9600、15200)。
GPIO引腳:在功能框圖上對應的1框圖上我們看到主要有Tx、Rx、SW_RX、nRTS、nCTS、SCLK六個功能引腳,在stm32上這些功能引腳當中最常用的是Tx、Rx引腳。
TX:發(fā)送數據輸出引腳。
RX:接收數據輸入引腳。
SW_RX:數據接收引腳,只用于單線和智能卡模式,屬于內部引腳,沒有具體外部引腳(很少用到)。
nRTS:請求以發(fā)送 (Request To Send),n 表示低電平有效。如果使能 RTS 流控制,當 USART 接收器準備好接收新數據時就會將nRTS引腳變成低電平;當接收寄存器已滿時,nRTS 將被設置為高電平。該引腳只適用于硬件流控制。
nCTS:清除以發(fā)送 (Clear To Send),n 表示低電平有效。如果使能 CTS 流控制,發(fā)送器在發(fā)送下一幀數據之前會檢測nCTS引腳,如果為低電平,表示可以發(fā)送數據,如果為高電平則在發(fā)送完當前數據幀之后停止發(fā)送。該引腳只適用于硬件流控制。
SCLK:發(fā)送器時鐘輸出引腳。這個引腳僅適用于同步模式。
注意:在stm32的UART 只是異步傳輸功能,所以沒有SCLK、nCTS 和nRTS 功能引腳。
數據寄存器:數據寄存器控制usart的讀取還是發(fā)送。在官方的參考手冊上對于數據寄存器(USART_DR)是這樣描述的——包含接收到數據字符或已發(fā)送的數據字符,具體取決于所執(zhí)行的操作是“讀取”操作還是“寫入”操作。
因為數據寄存器包含兩個寄存器,一個用于發(fā)送 (TDR),一個用于接收 (RDR),因此它具有 雙重功能(讀和寫)。
設備之間通信的方式
一般情況下,設備之間的通信方式可以分成并行通信和串行通信兩種。并行與串行通信的區(qū)別如下表所示。
串行通信的分類
1、按照數據傳送方向,分為:
單工:數據傳輸只支持數據在一個方向上傳輸;
半雙工:允許數據在兩個方向上傳輸。但是,在某一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信;它不需要獨立的接收端和發(fā)送端,兩者可以合并一起使用一個端口。
全雙工:允許數據同時在兩個方向上傳輸。因此,全雙工通信是兩個單工通信方式的結合,需要獨立的接收端和發(fā)送端。
2、按照通信方式,分為:
同步通信:帶時鐘同步信號傳輸。比如:SPI,IIC通信接口。
異步通信:不帶時鐘同步信號。比如:UART(通用異步收發(fā)器),單總線。
在同步通訊中,收發(fā)設備上方會使用一根信號線傳輸信號,在時鐘信號的驅動下雙方進行協(xié)調,同步數據。例如,通訊中通常雙方會統(tǒng)一規(guī)定在時鐘信號的上升沿或者下降沿對數據線進行采樣。
在異步通訊中不使用時鐘信號進行數據同步,它們直接在數據信號中穿插一些用于同步的信號位,或者將主題數據進行打包,以數據幀的格式傳輸數據。通訊中還需要雙方規(guī)約好數據的傳輸速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。
在同步通訊中,數據信號所傳輸的內容絕大部分是有效數據,而異步通訊中會則會包含數據幀的各種標識符,所以同步通訊效率高,但是同步通訊雙方的時鐘允許誤差小,稍稍時鐘出錯就可能導致數據錯亂,異步通訊雙方的時鐘允許誤差較大。
常見的串行通信接口
STM32串口通信基礎
STM32的串口通信接口有兩種,分別是:UART(通用異步收發(fā)器)、USART(通用同步異步收發(fā)器)。而對于大容量STM32F10x系列芯片,分別有3個USART和2個UART。
UART引腳連接方法
RXD:數據輸入引腳,數據接受;
TXD:數據發(fā)送引腳,數據發(fā)送。
對于兩個芯片之間的連接,兩個芯片GND共地,同時TXD和RXD交叉連接。這里的交叉連接的意思就是,芯片1的RxD連接芯片2的TXD,芯片2的RXD連接芯片1的TXD。這樣,兩個芯片之間就可以進行TTL電平通信了。STM32與51單片機串口通信相關實例,請移步此處:STM32與51單片機串口通信實例。
若是芯片與PC機(或上位機)相連,除了共地之外,就不能這樣直接交叉連接了。盡管PC機和芯片都有TXD和RXD引腳,但是通常PC機(或上位機)通常使用的都是RS232接口(通常為DB9封裝),因此不能直接交叉連接。RS232接口是9針(或引腳),通常是TxD和RxD經過電平轉換得到的。故,要想使得芯片與PC機的RS232接口直接通信,需要也將芯片的輸入輸出端口也電平轉換成RS232類型,再交叉連接。
經過電平轉換后,芯片串口和RS232的電平標準是不一樣的:
單片機的電平標準(TTL電平):+5V表示1,0V表示0;
RS232的電平標準:+15/+13 V表示0,-15/-13表示1。
RS-232通訊協(xié)議標準串口的設備間通訊結構圖如下:
所以單片機串口與PC串口通信就應該遵循下面的連接方式:在單片機串口與上位機給出的RS232口之間,通過電平轉換電路(如下面圖中的Max232芯片) 實現TTL電平與RS232電平之間的轉換。STM32與PC之間通信實例,請移步此處:STM32實例-用按鍵控制串口發(fā)送數據,文末附代碼。
RS232串口簡介
臺式機電腦后面的9針接口就是com口(串口) 在工業(yè)控制 數據采集上應用廣泛上圖中,最右邊的是串口接口統(tǒng)稱為RS232接口,是常見的DB9封裝。