RM新时代网站-首页

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

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

3天內(nèi)不再提示

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

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

前言

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

實驗環(huán)境

· STM32F411RE-NUCLEO

· STM32CubeMX

總線狀態(tài)分析

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

pYYBAGIB2ruAK7asAAAJ1iXmiBY719.png

不定長數(shù)據(jù)接收

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

使用 STM32CubeMX 生成實驗工程

工程的配置如下圖:

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

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

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

poYBAGIB2ryAKS5xAADTPWjcfpA532.png

pYYBAGIB2r6AIsXyAACHbK8PFR4493.png

poYBAGIB2r-AZXcsAADD6STAHOc650.png

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

main.c-聲明

pYYBAGIB2sCAQo9RAAAQTYVDia4196.png

main.c-Code

poYBAGIB2sGAEYnOAAAXTk9Q6ZY189.png

修改工程代碼

增加接收Buffer

main.c

poYBAGIB2sKASZIAAAAJ_8lvAmw882.png

stm32f4xx_hal_uart.c

pYYBAGIB2sSAfq5UAAAE4CWSJUM525.png

在接收函數(shù)中使能IDLE中斷

stm32f4xx_hal_uart.c -> HAL_UART_Receive_DMA()函數(shù)

pYYBAGIB2sWAB1BGAAAIVE8Qk5Q721.png

處理IDLE中斷

stm32f4xx_hal_uart.c -> HAL_UART_IRQHandler ()函數(shù)

pYYBAGIB2saAMhvDAAAYwDy1wgA338.png

接收完成處理(IDLE產(chǎn)生,一幀數(shù)據(jù)傳輸完成)

stm32f4xx_hal_uart.c -> HAL_UART_AbortReceive_IT ()函數(shù)

poYBAGIB2seASNN2AAAM7-VWD_U560.png

main.c

pYYBAGIB2siAFAo3AAAjfA7rieg785.png

使能接收

main.c

poYBAGIB2sqAEIhJAAALZw_Zw64305.png

實驗結果

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

poYBAGIB2suAKSwGAAAsSMEe1ec074.png

小結

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

審核編輯:彭菁

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

    關注

    146

    文章

    17123

    瀏覽量

    350980
  • 數(shù)據(jù)

    關注

    8

    文章

    7002

    瀏覽量

    88940
  • 參數(shù)
    +關注

    關注

    11

    文章

    1829

    瀏覽量

    32195
  • uart
    +關注

    關注

    22

    文章

    1235

    瀏覽量

    101354
收藏 人收藏

    評論

    相關推薦

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

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

    請問如何用uart使用udma接收不定長數(shù)據(jù)的方法?

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

    stm32fo72用IDLE接收不定長數(shù)據(jù)

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

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

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

    不定長數(shù)據(jù)接收的原理IDLE空閑中斷介紹

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

    如何利用IDLE中斷進行串口不定長數(shù)據(jù)接收

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

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

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

    UART是如何使用IDLE中斷去接收不定長度數(shù)據(jù)

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

    利用STM32單片機的IDLE空閑中斷接收不定長數(shù)據(jù)

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

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

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

    uart pdma方式接收不定長數(shù)據(jù)如何解決?

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

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

    (STM32Cube MCU Package for STM32F1xx Series)本文內(nèi)容:不定長數(shù)據(jù)接收的原理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'>不定長度數(shù)據(jù)</b><b class='flag-5'>接收</b>和發(fā)送

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

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

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

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

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

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