【菜鸟必看】STM32 串口接收不定长数据中断检测相关问题
2025-10-30 来源:bilibili
今天给大家介绍STM32串口接受不定长数据中断检测的相关问题。能够推测,在UART收到最后一帧数据后,假如随后的一个数据帧的时长内未收到新的数据,则IDLE信号有效.假如数据包之间间隔大于一个数据帧,就能够用IDLE信号作为检测数据包完毕的标志.
运用DMA接管UART-Rx数据,当检测到DMA数据满,或DMA数据半满,或UART的IDLE时,读取DMA数据.假如DMA缓存空间足够大(大于最大的数据包长度),也能够只以IDLE信号为标志.
运用类似的思维,能够用3种方式达到.
启用UART的RXNE中断,运用RXNE中断检测第一数据帧,并读取第一个数据,其次启动DMA接管(DMA设置为Normal模式)和IDLE中断,并关闭RXNE中断.随后收到的数据由DMA读取,数据接管完毕时产生IDLE信号,停下DMA接管,对DMA缓存进行读取.其次能够反复以上过程.该方法的达到能够参照,他运用的是F0系列的超时标志,与IDLE信号类似
二. 启用DMA接管(DMA设置为Circular模式)和IDLE中断,并且开启DMA的半满(HT)和全满(TC)中断,检测到上述三个中断中的任一一个,就对DMA缓存进行读取.该方法的达到能够参照
三. 运用HAL新增的HAL_UARTEx_ReceiveToIdle_DMA函数和与之对应的回调函数HAL_UARTEx_RxEventCallback.这个功能在F4的HAL驱动中是随着1二.6版本(STM32Cube_FW_F4_V一.2六.0)更新带来的.
单片机串口接管不定长数据时,必需面对的一个问题为:怎么判断这一包数据接管完成了呢?常见的方法主要有以下两种:
一.在接管数据时启动一个定时器,在指定时长间隔内没有接管到新数据,认为数据接管完成;
二.二.在数据中加入帧头、帧尾,通过在程序中判断是否接管到帧尾来确定数据接管完毕。这两种方法的缺少点为,须要主程序来判断和处理,对主程序造成不小压力。
STM32单片机空闲检测中断能够很好的攻克这个问题。他的工作原理为:
当STM32的串口接管完一包数据后,会产生一个空闲中断。这个中断在串口其他任何状态都不产生,只会在接管完一包数据后才会产生,一包数据能够是1个字节或者多个字节。因此,我们能够在这个空闲中断函数中,设置一个接管完成标志位。那么,我们只须要在主程序中检测这个标志位就知道数据是否接管完成了。详细应该怎么操作呢?其他不表,直接上代码:
上述代码几乎是STM32串口的常规配置,无需赘述。增加了第47行的空闲中断使能语句,允许它中断即可:
USART_ITConfig(DEBUG_USARTx, USART_IT_IDLE, ENABLE);//空闲中断使能
下面是主程序和串口中断函数:
先来看第30-36行的中断函数内容,首先是把接管到的字节存到rx_buff中,并且数据长度rx_cnt++,接着调用库函数革除接管中断标志位,属于常规的数据接管操作。
不同的是第38-46行:
判断是不是产生了串口空闲中断(USART_IT_IDLE),其次就是置位接管完成标志位rx_done = 1,并且革除空闲中断标志位。
注意事项:
调用库函数USART_ClearITPendingBit(DEBUG_USARTx, USART_IT_IDLE);是不会革除空闲中断标志位的。应该采用42-43两条语句达到,否则会一直进入中断函数。
temp = USART1->SR; //先读SR,再读DR才能完成idle中断的清零,否则一直进入中断。temp = USART1->DR;
第9-24行的主函数进行相应的处理便可。
- 意法半导体中国本地造STM32微控制器启动规模量产
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 基于机智云与STM32的智能拐杖安全监测系统在养老物联网中的应用
- 内置全栈安全,一站式满足CRA法案与IEC 62443标准——米尔STM32MP257核心板
- 如何用 STM32 FLASH 实现等效 100 万次擦写的 EEPROM 功能?
- 实战解析:通过一个小项目掌握STM32所有外设
- STM32学了两年半,却还是不会做项目
- 意法半导体推出最新STM32MP21微处理器,兼具高性价比、低功耗、高灵活性
- 基于STM32的矿井作业环境监测系统设计与实现
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




