前言
在串口通信過程中,我們常常用到接受和發(fā)送中斷,相信大家都不陌生。這里還有另一個(gè)非常有用的中斷可能被大家所忽略,即總線空閑狀態(tài)IDLE中斷。當(dāng)一幀數(shù)據(jù)傳輸結(jié)束之后,總線會(huì)維持高電平空閑,此時(shí)會(huì)觸發(fā)MCU的IDLE中斷。在本文中,將介紹使用該中斷來進(jìn)行不定長串口數(shù)據(jù)接收的辦法。通過該中斷,可以省卻用于檢測數(shù)據(jù)傳輸是否完成的判斷操作。
實(shí)驗(yàn)環(huán)境
· STM32F411RE-NUCLEO
· STM32CubeMX
總線狀態(tài)分析
下圖是發(fā)送0xAA 0x55的所抓取到的波形。從圖中我們可以看到在發(fā)送該幀之前和之后,總線時(shí)鐘處于IDLE狀態(tài)。在該幀中,字節(jié)與字節(jié)之間,沒有IDLE狀態(tài)出現(xiàn),即不會(huì)出現(xiàn)IDLE誤觸發(fā)的情況。
不定長數(shù)據(jù)接收
本次制作的工程是基于HAL庫的。在原生的HAL庫中,并沒有集成IDLE中斷的處理。所以,在本文我們介紹的方法中,需要修改一些庫文件來實(shí)現(xiàn)。
使用 STM32CubeMX 生成實(shí)驗(yàn)工程
工程的配置如下圖:
1. 系統(tǒng)始終配置為100MHz
2. 配置USART2為Asynchrones,管腳配置為PA2,PA3。
3. USART2參數(shù):9600Bits/s, 8bits, None,1Stop
為了方便打印接收到的相關(guān)信息,需要對(duì)生成的工程做如下修改來映射print函數(shù)。
main.c-聲明
main.c-Code
修改工程代碼
增加接收Buffer
main.c
stm32f4xx_hal_uart.c
在接收函數(shù)中使能IDLE中斷
stm32f4xx_hal_uart.c -> HAL_UART_Receive_DMA()函數(shù)
處理IDLE中斷
stm32f4xx_hal_uart.c -> HAL_UART_IRQHandler ()函數(shù)
接收完成處理(IDLE產(chǎn)生,一幀數(shù)據(jù)傳輸完成)
stm32f4xx_hal_uart.c -> HAL_UART_AbortReceive_IT ()函數(shù)
main.c
使能接收
main.c
實(shí)驗(yàn)結(jié)果
使用串口調(diào)試,通過STLINK的虛擬串口發(fā)送數(shù)據(jù),MCU會(huì)返回接收多少個(gè)字節(jié)的數(shù)據(jù),并將接收到的數(shù)據(jù)打印出來。下圖是發(fā)送0xAA 0x55的實(shí)驗(yàn)結(jié)果。
小結(jié)
合理使用串口總線空閑狀態(tài)中斷,在接收那些數(shù)據(jù)量不確定的場合會(huì)非常方便,同時(shí)也能很好地優(yōu)化代碼設(shè)計(jì)。
審核編輯:彭菁
-
mcu
+關(guān)注
關(guān)注
146文章
17970瀏覽量
366588 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7255瀏覽量
91819 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1867瀏覽量
33071 -
uart
+關(guān)注
關(guān)注
22文章
1276瀏覽量
103904
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問如何用uart使用udma接收不定長數(shù)據(jù)的方法?
STM32單片機(jī)的接收不定長度字節(jié)數(shù)據(jù)的方法
不定長數(shù)據(jù)接收的原理IDLE空閑中斷介紹
如何利用IDLE中斷進(jìn)行串口不定長數(shù)據(jù)的接收呢
STM32單片機(jī)是如何利用IDLE中斷接收不定長字節(jié)數(shù)據(jù)的
利用STM32單片機(jī)的IDLE空閑中斷接收不定長數(shù)據(jù)
求分享STM32_H750串口接收不定長數(shù)據(jù)及初始化進(jìn)入idle中斷的解決方法
uart pdma方式接收不定長數(shù)據(jù)如何解決?
STM32CubeMX HAL庫串口+DMA+IDLE空閑中斷不定長度數(shù)據(jù)接收和發(fā)送

STM32之串口DMA接收不定長數(shù)據(jù)

使用UART IDLE中斷接收不定長數(shù)據(jù)

STM32CubeMX之串口接收不定長數(shù)據(jù)

評(píng)論