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

基于STM32 擦除flash失败问题的经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-21 17:48
硬件平台STM32F407VE,HAL库。标准库不会有此问题
2 J6 y8 L- _! I0 l; Y5 F* J
' m) x- i$ {6 {: h3 K$ K  [& y: I软件跑freertos) X  R; ^; a9 j! e. i
' f* @3 w& Z- Z( F9 z. [5 Y
问题描述:STM32 擦除flash失败,CPU跳不出串口中断,看门狗重启。
2 v. W0 ]6 N' g7 F" p4 q

0 U% Q$ Z8 S5 ]( l" M5 m5 O  O8 P问题一、FlashStatus!=HAL_OK解决办法:
" G/ @! n! S. ?$ u, o: b  O# o6 `1 [; |; i3 a( u
1、flash擦写前禁止flash数据缓存,操作完后恢复, |) M1 f$ w$ h! f$ x* K$ i

) ]- W. v- z! i& L' c/* Disable data cache */6 c- p; G: ~( n# Q% N) M3 ~
      __HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期间,必须禁止数据缓存
$ E+ d+ Y; g) O3 U) M6 e+ S; X# L
        /* Enable data cache */
* o- y9 W8 d: N! D( `' @    __HAL_FLASH_DATA_CACHE_ENABLE();//开启数据缓存0 O- ]9 O9 j/ a$ x1 J- N

# G  {) _0 i7 K& G+ k" L

0 T3 o6 J7 V# F% e& C( m8 Q2、如果上述办法还不行可以在操作flash前增加清标志操作
" W+ m1 b4 b" I: d% R, ?9 ?6 h+ C
  /* Clear pending flags (if any) */
' u4 X9 Y4 `- h# W# G6 V" o+ A  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP    | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \: W1 n) y5 i8 A) O/ ^! z
                         FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);: }9 e. q+ ?" y" X- M1 Z1 s5 b$ X$ {/ y

: s" w" U# Z  @  a6 e
- I1 A" C8 U" X$ C
3、看门狗影响1 x3 `, A& b3 x
操作flash期间不要调用HAL_IWDG_Refresh(&hiwdg);, g! d" l4 M- d' l9 e/ u/ J

3 P9 e+ g0 d& r, _7 Z2 Q! D; b8 t' [并且看门狗未开启或者屏蔽MX_IWDG_Init();的初始化( N2 {+ y) ^/ a
/ t+ C9 Y0 _1 J* [# `3 P2 B0 X
软件最好不调用HAL_IWDG_Refresh(&hiwdg);% j2 |8 u+ n: n5 o1 @

) r8 f9 e; d3 c3 m& v& @: j
e05570f93a9d4b45af6c28789ac8b3b8.png : _0 j2 i- U7 w: b3 j

+ r# |: c0 g0 o" I; ^* T* Q/ h0 d
问题二:擦除flash失败,死机问题' [) X4 Q" a( \( j/ V
我用了串口空闲中断+DMA接收、发送模式% `* A% w, f; n5 W" o
" E# n8 K* c* K# t$ h
软件仿真发现很容易在擦flash的时候CPU频繁进入串口中断(其他任务无法进入),最后复位
/ L# ]  C" e9 |5 _
3 s, m, W0 t( t0 a7 x
关键问题是:
( {/ A# `" @; X" F. U$ K. C4 i: z9 T
3 ~0 Y# f) q( k8 F3 T
HAL_UART_IRQHandler(&huart2);必须在中断里优先执行,放在最前端,不能放在用户程序以后。2 ^2 w1 `  I; y0 |0 i3 B. y" O# _

* t; e* Z9 i( {# N! @) {2 g# X
如果不用flash擦写,顺序其实关系不大。
8 R/ D! ^& j( ]1 k
$ k6 J' n# r9 \' |
可能跟芯片也有关系(之前用F429就没这个问题)
6 @5 q3 S& U9 E; u! C3 T# }1 y" t& L: N% e# F8 W1 F) r% [; z
e8c79ff264e7403b859febd2154ff4da.png
4 b; \& d7 |4 P1 J# l" @
! v, s# A! k+ u# O* k& s+ {4 @& O
# N' `. F4 G/ M0 h) x4 i6 I
————————————————
$ |' ~: n1 h5 }* W) e, ^: ^" y版权声明:axsdffff1; Q2 r' |) w6 d) N1 v3 }) G- e
如有侵权请联系删除2 G. R& J" T2 Z- [2 D
. o7 G" w8 o3 E7 }! d

2 |' n4 m5 j. p4 Y6 |0 n& P+ \/ ^: T* C- F! G& m! T
收藏 评论0 发布时间:2023-3-21 17:48

举报

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