野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6135|回复: 1

FLASH操作导致串口数据丢失,如何解决

[复制链接]
发表于 2022-8-17 19:08:45 | 显示全部楼层 |阅读模式

单片机型号:STM32F030F4P6
现象如下:串口接收到数据过程中,发现有数据丢掉
程序内容:
1.MCU串口采用中断接收,波特率9600。电脑端每1s发送一个8字节数据帧

2.主函数中定时操作FLASH(擦除、写入)

原因分析:
1.调试发现,当第FLASH擦除时,遇到串口接收到数据,串口数据溢出(ORE)置位;
2.原因是FLASH擦除耗时约30ms,串口传输一个字节的时间约为1ms。此时FLASH接口被占用,导致串口无法从数据寄存器(RDR)中读取数据,下一个字节到来时,串口数据被覆盖。

解决方法
1.DMA传输。没传输一个字节产生一次DMA中断,利用定时器确定帧结束(当约定时间比如50ms无新数据,认为帧接收).
2.中断服务函数放到RAM执行,中断向量表放到RAM中。

对应问题点:
1.DMA传输每次产生中断,又需要从FLASH取指令来处理该中断,当FLASH还在擦除时,该终端依旧无法及时响应,最终导致数据丢失。
2.DMA传输接收多个字节时,又不能确定每次该接收多少个,导致一直等待
3.中断服务函数放到RAM执行,中断向量表放到RAM中。产生中断时又会往FLASH中取入口地址,还是要等待FLASH擦除完毕才能执行

回复

使用道具 举报

发表于 2022-8-20 13:49:02 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 20:52 , Processed in 0.026607 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表