你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何解决STM32F10x Flash写操作导致中断不响应问题

[复制链接]
攻城狮Melo 发布时间:2023-3-30 18:40
昨天遇到一个问题,在写入数据到STM32F103单片机的Flash中时会出现串口中断接收数据丢失现象,但是我设置的串口接收中断优先级是最高的,并且没有哪里将全局中断关闭很长时间(除了操作系统部分内核代码执行的时候关闭全局中断,但是没有占用很长时间,不会导致丢失串口数据)。在正常情况下在没有写数据到Flash中去的时候所有串口数据都能正常接收,没有数据丢包现象,但是当执行一次写入操作(写一个页256个字的数据)就会导致串口数据丢失,导致接收帧错误。
- q* j% z7 t7 u' F2 u一开始我猜测是不是在擦除和写入Flash的时候系统会屏蔽所有中断,但是没有哪个参考文档中找到这样的说明。后来查阅了一下官方文档PM0042《STM32F10xxx闪存编程手册.en》,在Page11中有一段话很重要:
. L4 |4 i9 k; d/ F2 N2 u  }& V! |7 hDuring a write operation to the Flash memory, any attempt to read the Flash memory will0 x, {% x$ I/ K
stall the bus. The read operation will proceed correctly once the write operation has
! B. I) R- d5 [0 ?completed. This means that code or data fetches cannot be made while a write/erase. m% N& A; J$ z3 N- g
operation is ongoing.
9 h, ~% b2 O. h5 V; D% lFor write and erase operations on the Flash memory (write/erase), the internal RC oscillator6 h$ Z4 R$ Y5 L% g1 u
(HSI) must be ON.
5 N1 J  ?  i3 S. ]6 q0 [7 v# M: cThe Flash memory can be programmed and erased using in-circuit programming and in-
( O4 x# Q, ?5 p" |application programming.
5 i: j- A$ L9 R. w5 ]
% D; W- r7 M: c& l" {( i
: y$ J. C- V% Z, t7 r
中文翻译第一段话:在Flash写入操作过程中,任何试图读取Flash的操作都会锁定住总线,在完成Flash写操作之后读取Flash操作会继续执行,这意味着写入Flash期间无法访问Flash中的代码和数据。
& \2 D9 h* X1 o% C! S3 P+ I3 k3 a, g, C' A0 L

8 ^: n# Q- b. G* Z5 @( `这段话让人茅塞顿开,也就是在写入数据到Flash中去的时候无法读取flash中保存的任何数据,包括代码和常量,所以当在写入flash数据的时候如果发生了串口中断的话系统是无法执行中断服务代码的。如果长时间无法执行中断服务代码就会导致数据丢失(写入一个页的数据使用的时长太长了)。" _+ i3 G0 ?+ w4 M5 d
————————————————
4 r0 ~2 S7 d3 I版权声明:哐哐哐 Quan9 T8 ?0 `6 ?! c  W; u. ]5 l
如有侵权请联系删除
9 r7 y2 r3 F- m0 v8 w6 p! o. K" E$ ]5 j5 j
2 K9 x& T9 N) U4 J' }3 S
收藏 评论0 发布时间:2023-3-30 18:40

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版