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

    文章

    17109

    浏览量

    350894
  • 数据
    +关注

    关注

    8

    文章

    6986

    浏览量

    88931
  • 参数
    +关注

    关注

    11

    文章

    1825

    浏览量

    32183
  • uart
    +关注

    关注

    22

    文章

    1235

    浏览量

    101334
收藏 人收藏

    评论

    相关推荐

    FreeRTOS串口中断接收不定长数据与二值信号量的使用

    FreeRTOS例程,使用串口中断接收不定长数据,以及二值信号量的使用
    的头像 发表于 09-26 09:02 4127次阅读
    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 3355次阅读
    STM32CubeMX之串口<b class='flag-5'>接收</b><b class='flag-5'>不定长</b><b class='flag-5'>数据</b>