那曲檬骨新材料有限公司

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

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

3天內不再提示

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

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

前言

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

實驗環境

· STM32F411RE-NUCLEO

· STM32CubeMX

總線狀態分析

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

pYYBAGIB2ruAK7asAAAJ1iXmiBY719.png

不定長數據接收

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

使用 STM32CubeMX 生成實驗工程

工程的配置如下圖:

1. 系統始終配置為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的虛擬串口發送數據,MCU會返回接收多少個字節的數據,并將接收到的數據打印出來。下圖是發送0xAA 0x55的實驗結果。

poYBAGIB2suAKSwGAAAsSMEe1ec074.png

小結

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

審核編輯:彭菁

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

    關注

    146

    文章

    17317

    瀏覽量

    352618
  • 數據
    +關注

    關注

    8

    文章

    7137

    瀏覽量

    89562
  • 參數
    +關注

    關注

    11

    文章

    1859

    瀏覽量

    32424
  • uart
    +關注

    關注

    22

    文章

    1243

    瀏覽量

    101760
收藏 人收藏

    評論

    相關推薦

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

    FreeRTOS例程,使用串口中斷接收不定長數據,以及二值信號量的使用
    的頭像 發表于 09-26 09:02 ?4382次閱讀
    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收發數據,但是
    發表于 08-17 07:48

    stm32fo72用IDLE接收不定長數據

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    (STM32Cube MCU Package for STM32F1xx Series)本文內容:不定長數據接收的原理IDLE空閑中斷介紹串
    發表于 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>和發送

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

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

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

    在本文中,將介紹使用該中斷來進行不定長串口數據接收的辦法。通過該中斷,可以省卻用于檢測數據傳輸是
    發表于 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之串口接收不定長數據

    基本串口通信通常只能接收定長數據,無法穩定接收不定長數據,本章介紹利用STM32單片機的
    的頭像 發表于 05-11 09:59 ?3566次閱讀
    STM32CubeMX之串口<b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>
    威尼斯人娱乐城赌博网| 24山风水实例| 圣安娜百家乐官网包杀合作| 百家乐官网群boaicai| 百家乐官网翻天youtube| 366百家乐官网赌博| 金城百家乐官网买卖路| 百家乐官网微笑打| 太子百家乐官网娱乐城| 百家乐二人视频麻将| 百家乐注码技术打法| 百家乐博彩的玩法技巧和规则 | 通化大嘴棋牌官方下载| 大赢家博彩| 扎兰屯市| 百家乐官网的路单怎样看| 百家乐官网赌场网| 百家乐官网平注资讯| 百家乐仿水晶筹码| 杰克百家乐玩法| 二八杠单机游戏| 百家乐特殊计| 豪门国际| 高级百家乐官网出千工具| 游戏机百家乐官网的玩法技巧和规则 | 江城足球网| 百家乐官网可以算牌么| 百家乐官网小揽| 百家乐自动下注| 全讯网353788| 新营市| 百家乐官网api| 沙龙百家乐怎申请| 华泰百家乐的玩法技巧和规则| 棋牌游戏源码| 百家乐官网开户投注| 利都百家乐官网国际娱乐平台| 百家乐里和的作用| 大发888游戏代充| 淘金百家乐官网现金网| 金锁玉关24山砂水断|