串行通信與并行通信
設(shè)備之間的通信方式可以分為串行通信和并行通信,這兩種通信方式各有優(yōu)缺點(diǎn)。串行通信是將數(shù)據(jù)按位順序傳輸,這樣做的優(yōu)勢是占用的引腳資源少,對(duì)于引腳資源緊張的MCU來大有益處,但是由于每次只能傳輸一個(gè)數(shù)據(jù),造成了傳輸速度較慢的劣勢(相對(duì)并行傳輸)。并行通信就是數(shù)據(jù)的各個(gè)位同時(shí)傳輸,優(yōu)點(diǎn)是數(shù)據(jù)傳輸快,缺點(diǎn)是占用引腳資源較多。
串行通信按照傳輸方向又分為單工、半雙工和全雙工。單工可以理解為只能向著一個(gè)方向傳輸數(shù)據(jù),半雙工就是可以雙向傳輸,但每次只能有一個(gè)傳輸方向,全雙工就是既可以雙向傳輸,它又可以同時(shí)有兩個(gè)傳輸方向。按照通信方式又可以分為同步通信和異步通信;同步通信需要時(shí)鐘線(用作時(shí)鐘信號(hào)的同步)的參與,例如SPI和IIC通信接口,而異步通信就是不帶時(shí)鐘線的,例如UART和one-wire。
STM32提供了UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步異步收發(fā)器)兩種串口通信接口,用于實(shí)現(xiàn)與其他設(shè)備之間的數(shù)據(jù)交換。本文將介紹STM32串口通信的基礎(chǔ)知識(shí),幫助讀者理解和掌握其基本原理和配置方法。
STM32串口通信
STM32的串口通信模塊主要包括UART和USART兩種接口。
UART是一種異步通信協(xié)議,它使用起始位、數(shù)據(jù)位、校驗(yàn)位和停止位來定義一個(gè)字符的傳輸格式。USART則是一種同步/異步通信協(xié)議,它支持全雙工通信,并具備更高的數(shù)據(jù)傳輸速率和更好的抗干擾能力。
在常見的STM32F103C8T6中,根據(jù)芯片手冊可以得知該型號(hào)具備3個(gè)USART,但也可以作為UART使用。UART引腳TXD為數(shù)據(jù)輸出引腳,RXD為數(shù)據(jù)輸入引腳,兩個(gè)設(shè)備之間的UART連接為TXD和RXD交叉連接,也需要將GND連接在一起。在需要將UART設(shè)備連接其他通信接口設(shè)備連接時(shí),則需要電平轉(zhuǎn)換芯片,例如CH340(USB轉(zhuǎn)TTL)、MAX485(UART轉(zhuǎn)485)等。
STM32串口通信參數(shù)配置
在進(jìn)行STM32串口通信之前,需要對(duì)串口通信參數(shù)進(jìn)行配置。這些參數(shù)包括波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等。其中,波特率表示每秒鐘傳輸?shù)腷it,在STM32F103系列中,最高可達(dá)4.5Mbps;數(shù)據(jù)位表示每個(gè)字符的數(shù)據(jù)長度(8位或者9位),停止位用于表示字符的結(jié)束(1bit或者2bit),校驗(yàn)位用于檢查數(shù)據(jù)傳輸?shù)恼_性(無校驗(yàn)、奇校驗(yàn)或者偶校驗(yàn))。在STM32中,這些參數(shù)可以通過配置相應(yīng)的寄存器來實(shí)現(xiàn)。例如,通過配置USART_BRR寄存器可以設(shè)置波特率,通過配置USART_CR1和USART_CR2寄存器可以設(shè)置數(shù)據(jù)位、停止位和校驗(yàn)位等參數(shù)。
STM32串口通信編程實(shí)現(xiàn)
在進(jìn)行STM32串口通信編程時(shí),需要使用HAL庫或標(biāo)準(zhǔn)外設(shè)庫等提供的API函數(shù)來配置串口通信參數(shù)和發(fā)送/接收數(shù)據(jù)。以下是一個(gè)簡單的串口通信編程示例:
初始化串口通信參數(shù):使用HAL庫或標(biāo)準(zhǔn)外設(shè)庫提供的函數(shù)配置串口通信參數(shù),如波特率、數(shù)據(jù)位、停止位和校驗(yàn)位等。
發(fā)送數(shù)據(jù):使用HAL庫或標(biāo)準(zhǔn)外設(shè)庫提供的發(fā)送函數(shù)將數(shù)據(jù)寫入串口發(fā)送緩沖區(qū),然后等待數(shù)據(jù)發(fā)送完成。在發(fā)送數(shù)據(jù)時(shí),需要注意數(shù)據(jù)的長度和格式,以確保數(shù)據(jù)的正確傳輸。
接收數(shù)據(jù):使用HAL庫或標(biāo)準(zhǔn)外設(shè)庫提供的接收函數(shù)從串口接收緩沖區(qū)讀取數(shù)據(jù)。在接收數(shù)據(jù)時(shí),需要判斷接收緩沖區(qū)是否有數(shù)據(jù)可讀,并讀取相應(yīng)的數(shù)據(jù)長度和格式。
錯(cuò)誤處理:在串口通信過程中,可能會(huì)出現(xiàn)各種錯(cuò)誤情況,如發(fā)送超時(shí)、接收溢出等。在編程時(shí),需要添加相應(yīng)的錯(cuò)誤處理代碼,以處理這些異常情況。
STM32串口通信編程示例
以HAL庫,基于STM32CubeMX配置軟件,示例一個(gè)簡單的STM32串口例程。
1.創(chuàng)建CUBE工程:File->New Projiect
2.型號(hào)選擇
3.時(shí)鐘RCC配置和SYS配置
4.UART參數(shù)配置
5.時(shí)鐘樹配置
6.工程管理
7.程序修改
Main函數(shù)修改如下:
int main(void){
/* USER CODE BEGIN 1 */ uint8_t testbuf[] = {"stm32 uart\r\n"}; /* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */ SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ HAL_UART_Transmit(&huart1,testbuf,sizeof(testbuf),0xFFFF); HAL_Delay(1000); } /* USER CODE END 3 */}
編譯并下載至MCU,使用串口調(diào)試助手,即可看到MCU在輸出testbuf內(nèi)的內(nèi)容。
結(jié)論
STM32串口通信是嵌入式系統(tǒng)開發(fā)中不可或缺的一部分。通過掌握STM32串口通信的基礎(chǔ)知識(shí)和編程實(shí)現(xiàn)方法,可以更加高效地進(jìn)行嵌入式系統(tǒng)開發(fā)。
-
STM32
+關(guān)注
關(guān)注
2269文章
10884瀏覽量
355503 -
uart
+關(guān)注
關(guān)注
22文章
1233瀏覽量
101316 -
串口通信
+關(guān)注
關(guān)注
34文章
1623瀏覽量
55492 -
并行通信
+關(guān)注
關(guān)注
1文章
31瀏覽量
10820
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論