硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1109|回复: 6
收起左侧

[技术讨论] STM32F1内部Flash写特别注意

[复制链接]

77

主题

691

回帖

922

积分

金牌会员

积分
922
发表于 2022-7-22 10:40:31 | 显示全部楼层 |阅读模式
项目中出现写Flash的时候出现串口数据丢失的情况,最终在官方手册找到原因:写Flash的时候总线被挂起,CPU无法在Flash取值执行,所以串口接收中断不会被响应。
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2022-7-22 10:49:33 | 显示全部楼层
确实是的。 写内部flash的时候,内核是暂停的。但是中断会不会挂起等待,就不清楚了。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-7-22 13:56:32 | 显示全部楼层
这个问题在F1系列上勉强可以接受,Flash扇区擦写时间20~50ms左右。对于F4系列而言,简直神坑,128KB扇区擦写时间约1.3~2.6s,设备如果使用外部硬件看门狗芯片,flash擦写时会导致看门狗溢出复位。
想用内部flash保存数据只能放在16KB的扇区部分,或者外挂EEPROM。设备OTA升级功能则直接用不了。
MAX706、MAX823等主流看门狗芯片溢出时间约1.6s左右。
回复

使用道具 举报

77

主题

691

回帖

922

积分

金牌会员

积分
922
 楼主| 发表于 2022-7-23 19:27:30 | 显示全部楼层
江南月 发表于 2022-7-22 13:56
这个问题在F1系列上勉强可以接受,Flash扇区擦写时间20~50ms左右。对于F4系列而言,简直神坑,128KB扇区擦 ...

F1在通信的时候,如果上位机处理不好也是不能接受的。
回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
发表于 2022-7-23 21:10:22 | 显示全部楼层
我记得DMA是可以工作的,所以建议用串口+DMA的方式
回复

使用道具 举报

0

主题

58

回帖

58

积分

初级会员

积分
58
发表于 2022-7-24 08:56:43 | 显示全部楼层
caicaptain2 发表于 2022-7-22 10:49
确实是的。 写内部flash的时候,内核是暂停的。但是中断会不会挂起等待,就不清楚了。

不是内核暂停,是擦写FLASH时无法从FLASH读取指令,有些系列多个FLASH区域,写数据区不影响指令区
另外可以把串口接收函数放到RAM中运行,这样擦写FLASH期间串口接收正常,也要注意串口接收函数不要调用FLASH中的函数,最好就操作寄存器
其他重要的操作函数也可以放RAM中,在中断中调用
回复

使用道具 举报

39

主题

199

回帖

326

积分

高级会员

积分
326
发表于 2022-11-8 08:15:55 | 显示全部楼层
可不可以一页一页擦除,每页之间加一次喂狗。

OTA协议设计重传机制,必须单片机回复了接收成功,才会发下一包。
然后OTA的时候,每包数据之间加一次喂狗。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 08:45 , Processed in 0.229495 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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