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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

前言

在串口通信過程中,我們常常用到接受和發(fā)送中斷,相信大家都不陌生。這里還有另一個(gè)非常有用的中斷可能被大家所忽略,即總線空閑狀態(tài)IDLE中斷。當(dāng)一幀數(shù)據(jù)傳輸結(jié)束之后,總線會(huì)維持高電平空閑,此時(shí)會(huì)觸發(fā)MCU的IDLE中斷。在本文中,將介紹使用該中斷來進(jìn)行不定長(zhǎng)串口數(shù)據(jù)接收的辦法。通過該中斷,可以省卻用于檢測(cè)數(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ā)的情況。

pYYBAGIB2ruAK7asAAAJ1iXmiBY719.png

不定長(zhǎng)數(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

poYBAGIB2ryAKS5xAADTPWjcfpA532.png

pYYBAGIB2r6AIsXyAACHbK8PFR4493.png

poYBAGIB2r-AZXcsAADD6STAHOc650.png

為了方便打印接收到的相關(guān)信息,需要對(duì)生成的工程做如下修改來映射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

實(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é)果。

poYBAGIB2suAKSwGAAAsSMEe1ec074.png

小結(jié)

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

審核編輯:彭菁

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

    關(guān)注

    146

    文章

    16665

    瀏覽量

    347743
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6713

    瀏覽量

    88300
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1657

    瀏覽量

    31874
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1199

    瀏覽量

    100823
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    在本文中,將介紹使用該中斷來進(jìn)行不定長(zhǎng)串口數(shù)據(jù)接收的辦法。通過該中斷,可以省卻用于檢測(cè)數(shù)據(jù)傳輸是
    發(fā)表于 02-08 15:29 ?5次下載
    使用<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'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b>

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

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