STM32低功耗串口接受数据异常
Posted JeckXu666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32低功耗串口接受数据异常相关的知识,希望对你有一定的参考价值。
文章目录
低功耗串口接受数据异常
一、异常信息
1.1 硬件环境
小熊派 STM32L4 单片机
1.2 软件环境
STM32CubeMX 6.2.1
MDK 5.3
1.3 问题描述
使用 STM32CubeMX 配置 STM32 的 LPUART 后,生成代码使用串口 DMA 接受数据,在开启数据接受后,指定接受的数据长度,接受完成后,串口继续接受数据,在开启下一个串口接受时则会读取之前的数据,例如:
串口使能接受 5 个数据,然后上位机发送 ABCDEFG,本次串口 DMA 在接受到 ABCDE 时就会产生接受完成标志,调用回调函数,至于 FG 则不会接受丢弃掉,但我如果在设置接受 2 个数据,这两个数据居然还能接受到
在仿真调试里面运行程序时这两个数据不会接受到,很正常,符合逻辑,但一旦实际下载到单片机里面实际运行就会出现错误
二、问题分析
根据实验现象,仿真是很正常的,但实际下载运行就会出现问题,推测编译器或者生成的代码有问题
理论上第一次接受数量达标后,代码会将接受完成标志置位,然后串口的缓存区不会再接受任何数据,出现这种情况的原因可能是接受完成后数据 DMA 和串口没有关闭
三、解决方式
在调用之前我们将 DMA 的缓存区清空即可,例如我下面的代码,使用 memset 清空缓存区
以上是关于STM32低功耗串口接受数据异常的主要内容,如果未能解决你的问题,请参考以下文章