0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用UART IDLE中斷接收不定長數據

jf_pJlTbmA9 ? 來源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-09-18 15:41 ? 次閱讀

前言

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

實驗環(huán)境

· STM32F411RE-NUCLEO

· STM32CubeMX

總線狀態(tài)分析

下圖是發(fā)送0xAA 0x55的所抓取到的波形。從圖中我們可以看到在發(fā)送該幀之前和之后,總線時鐘處于IDLE狀態(tài)。在該幀中,字節(jié)與字節(jié)之間,沒有IDLE狀態(tài)出現,即不會出現IDLE誤觸發(fā)的情況。

pYYBAGIB2ruAK7asAAAJ1iXmiBY719.png

不定長數據接收

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

使用 STM32CubeMX 生成實驗工程

工程的配置如下圖:

1. 系統(tǒng)始終配置為100MHz

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

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

poYBAGIB2ryAKS5xAADTPWjcfpA532.png

pYYBAGIB2r6AIsXyAACHbK8PFR4493.png

poYBAGIB2r-AZXcsAADD6STAHOc650.png

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

main.c-聲明

pYYBAGIB2sCAQo9RAAAQTYVDia4196.png

main.c-Code

poYBAGIB2sGAEYnOAAAXTk9Q6ZY189.png

修改工程代碼

增加接收Buffer

main.c

poYBAGIB2sKASZIAAAAJ_8lvAmw882.png

stm32f4xx_hal_uart.c

pYYBAGIB2sSAfq5UAAAE4CWSJUM525.png

在接收函數中使能IDLE中斷

stm32f4xx_hal_uart.c -> HAL_UART_Receive_DMA()函數

pYYBAGIB2sWAB1BGAAAIVE8Qk5Q721.png

處理IDLE中斷

stm32f4xx_hal_uart.c -> HAL_UART_IRQHandler ()函數

pYYBAGIB2saAMhvDAAAYwDy1wgA338.png

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

stm32f4xx_hal_uart.c -> HAL_UART_AbortReceive_IT ()函數

poYBAGIB2seASNN2AAAM7-VWD_U560.png

main.c

pYYBAGIB2siAFAo3AAAjfA7rieg785.png

使能接收

main.c

poYBAGIB2sqAEIhJAAALZw_Zw64305.png

實驗結果

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

poYBAGIB2suAKSwGAAAsSMEe1ec074.png

小結

合理使用串口總線空閑狀態(tài)中斷,在接收那些數據量不確定的場合會非常方便,同時也能很好地優(yōu)化代碼設計。

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17148

    瀏覽量

    351212
  • 數據
    +關注

    關注

    8

    文章

    7030

    瀏覽量

    89038
  • 參數
    +關注

    關注

    11

    文章

    1834

    瀏覽量

    32224
  • uart
    +關注

    關注

    22

    文章

    1235

    瀏覽量

    101397
收藏 人收藏

    評論

    相關推薦

    FreeRTOS串口中斷接收不定長數據與二值信號量的使用

    FreeRTOS例程,使用串口中斷接收不定長數據,以及二值信號量的使用
    的頭像 發(fā)表于 09-26 09:02 ?4265次閱讀
    FreeRTOS串口<b class='flag-5'>中斷</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b>的<b class='flag-5'>數據</b>與二值信號量的使用

    請問如何用uart使用udma接收不定長數據的方法?

    目前在做的一個項目會用uart接收移動模塊的數據,為了提高效率想使用uart配合udma收發(fā)數據,但是
    發(fā)表于 08-17 07:48

    stm32fo72用IDLE接收不定長數據

    求助??stm32fo72用IDLE接收不定長數據,
    發(fā)表于 08-18 06:48

    STM32單片機的接收不定長度字節(jié)數據的方法

    STM32串口使用IDLE中斷接收不定長數據原理與源程序轉載 2016年07月16日 18:20:24原文來自 今天說一下STM32單片機的
    發(fā)表于 08-04 09:05

    不定長數據接收的原理IDLE空閑中斷介紹

    (STM32Cube MCU Package for STM32F1xx Series)本文內容:不定長數據接收的原理IDLE空閑中斷介紹串
    發(fā)表于 08-16 07:42

    如何利用IDLE中斷進行串口不定長數據接收

    利用IDLE中斷進行串口不定長數據接收有何優(yōu)勢?如何利用IDLE
    發(fā)表于 12-08 07:04

    STM32單片機是如何利用IDLE中斷接收不定長字節(jié)數據

    IDLE中斷什么時候發(fā)生?如何配置好IDLE中斷?STM32單片機是如何利用IDLE中斷
    發(fā)表于 12-09 07:02

    UART是如何使用IDLE中斷去接收不定長度數據

    UART是什么?UART是如何使用IDLE中斷去接收不定長度數據的?
    發(fā)表于 12-10 07:43

    利用STM32單片機的IDLE空閑中斷接收不定長數據

    定長數據,無法穩(wěn)定接收不定長數據,本章介紹利用STM32單片機的IDLE空閑
    發(fā)表于 12-13 06:46

    求分享STM32_H750串口接收不定長數據及初始化進入idle中斷的解決方法

    求分享STM32_H750串口接收不定長數據及初始化進入idle中斷的解決方法
    發(fā)表于 12-16 07:40

    uart pdma方式接收不定長數據如何解決?

    目前測試過用uart接收超時中斷在pdma方式接收時不起作用,那么有其他方式來解決接收不定長
    發(fā)表于 08-23 08:25

    STM32CubeMX HAL庫串口+DMA+IDLE空閑中斷不定長度數據接收和發(fā)送

    (STM32Cube MCU Package for STM32F1xx Series)本文內容:不定長數據接收的原理IDLE空閑中斷介紹串
    發(fā)表于 12-07 11:36 ?25次下載
    STM32CubeMX HAL庫串口+DMA+<b class='flag-5'>IDLE</b>空閑<b class='flag-5'>中斷</b><b class='flag-5'>不定長度數據</b><b class='flag-5'>接收</b>和發(fā)送

    STM32之串口DMA接收不定長數據

    使用stm32或者其他單片機的時候,會經常使用到串口通訊,那么如何有效地接收數據呢?假如這段數據不定長的有如何高效接收呢?同學A:
    發(fā)表于 12-24 19:03 ?30次下載
    STM32之串口DMA<b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    使用UART IDLE中斷接收不定長數據

    在本文中,將介紹使用該中斷來進行不定長串口數據接收的辦法。通過該中斷,可以省卻用于檢測數據傳輸是
    發(fā)表于 02-08 15:29 ?6次下載
    使用<b class='flag-5'>UART</b> <b class='flag-5'>IDLE</b><b class='flag-5'>中斷</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    STM32CubeMX之串口接收不定長數據

    基本串口通信通常只能接收定長數據,無法穩(wěn)定接收不定長數據,本章介紹利用STM32單片機的
    的頭像 發(fā)表于 05-11 09:59 ?3397次閱讀
    STM32CubeMX之串口<b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>