日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何接收串口数据_UART IDLE 中断使用接收不定长串口数据

發布時間:2023/12/9 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何接收串口数据_UART IDLE 中断使用接收不定长串口数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在串口通信應用中,我們常使用接受和發送中斷,相信大家都不陌生。這里有個非常有用的中斷可能被大家所忽略,即總線IDLE中斷。當一幀數據傳輸結束之后,總線會維持高電平狀態,此時,就可以觸發MCU的IDLE中斷。在本文中,將介紹使用該中斷來進行不定長串口數據接收的辦法。通過該中斷,可以省卻很多用于檢測數據傳輸是否完成的判斷動作。

實驗環境

  • STM32F411RE-NUCLEO

  • STM32CubeMX

總線狀態分析

下圖是發送0xAA 0x55的所抓取到的波形。從圖中我們可以看到在發送該幀之前和之后,數據線處于IDLE的狀態。在該幀中,字節與字節之間,沒有IDLE狀態出現,即不會出現IDLE誤觸發的情況。

不定長數據接收

本次制作的工程是基于HAL庫。在原生的HAL庫中,并沒有集成IDLE中斷的處理。所以,在本文我們介紹的方法中,需要修改一些庫文件來實現。

使用STM32CubeMX生成實驗工程

工程的配置如下圖:

1.系統始終配置為100MHz

2.配置USART2為Asynchrones,管腳配置為PA2,PA3。

3.USART2參數:9600Bits/s, 8bits, None, 1Stop

為了方便打印接收到的相關信息,需要對生成的工程做如下修改來映射print函數。

main.c-聲明

main.c-Code

修改工程代碼

增加接收Buffer

main.c

stm32f4xx_hal_uart.c

在接收函數中使能IDLE中斷

stm32f4xx_hal_uart.c? HAL_UART_Receive_DMA()函數

處理IDLE中斷

stm32f4xx_hal_uart.c? HAL_UART_IRQHandler ()函數

接收完成處理(IDLE產生,一幀數據傳輸完成)

stm32f4xx_hal_uart.c? HAL_UART_AbortReceive_IT ()函數

main.c

使能接收

main.c

實驗結果

使用串口調試串口,通過STLINK的虛擬串口發送數據,MCU會返回接收多少個字節的數據,并將接收到的數據打印出來。下圖是發送0xAA 0x55的實驗結果。

小結

IDLE作為指示總線空閑狀態的中斷,合理的使用能夠很大程度的節省代碼程序設計工作量。這里只是做個簡單示范,拋磚引玉,實際應用中希望大家可以靈活使用滿足所需。

總結

以上是生活随笔為你收集整理的如何接收串口数据_UART IDLE 中断使用接收不定长串口数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。