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

FLASH写入数据前必须等HAL_FLASHEx_Erase返回OK

[复制链接]
奏奏奏 发布时间:2019-8-13 11:13
踩过的坑分享出来:
. d; P4 h! Q' g( ?0 T# a& O* H官方FLASH写入数据的例程是没错的,
0 e+ F" V7 T) S- P+ |- C但是遇到复杂情况! L8 f7 H" ^7 b& N0 a
HAL_FLASHEx_Erase返回结果不是HAL_OK怎么办?% G! z" i4 Q9 L4 Q$ j2 |2 F; _) X
我天真的直接搬运过去用了。5 i2 U0 T9 T3 g6 a! U$ ?( U5 t

8 S. _5 R* }* |& s- \
) {, U* {" l$ T% b
官方例程部分源代码是
& M0 Q" K! i4 i

7 X& t% \; J, ^6 {$ ]3 n
  1.   if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)% S  [3 @. |( g4 l8 F' ^! w/ A8 O
  2.   {, D7 C) q* A' G; [8 B: ]( O
  3.     /*
    ) }8 Z0 {' e* r  d0 Y; K
  4.       Error occurred while page erase.
    & t% ^, x" X8 }# D
  5.       User can add here some code to deal with this error.5 O2 l" X6 |1 e, W
  6.       PAGEError will contain the faulty page and then to know the code error on this page,* a4 [. r0 X5 y* _% M6 ~
  7.       user can call function 'HAL_FLASH_GetError()'4 R9 o) i! h7 l$ }
  8.     */
    / ^3 L* P' a( R$ \# c% |3 W: l
  9.     /* Infinite loop */
    , Y, S) j9 _* P) U7 |/ m9 p

  10. 6 Z/ d8 R  ?: h6 t: P: k* m
  11.         printf("\n\r        Error occurred while page erase.        \n\r");3 }! g8 T! k+ V) Z1 h0 N* Q
  12.   }
    5 c+ {2 c# [- V7 g9 @1 x
复制代码
, M' J8 u+ g, i' f& R7 J: Y

3 ^# e. X' a9 f+ t$ }, Z: ~* r按照我经验必须修改为下面代码
4 n+ L/ Q- T& h0 b. _1 o# y
' Q1 Q8 N9 {. k$ y: n+ J- P) H+ ^* o8 S
  1.     while(HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
    & x  E( ^1 a: B/ p1 o
  2.                                 {
    ; V9 J5 |; M: ~1 N" t: q
  3.                                         //
    4 {, b( Z9 s7 N3 z" Y7 n) K2 s; b0 z
  4.                                         __nop();2 l, }8 `; _. F
  5.                                 }
    9 p! I1 m7 v6 t- ]$ b! y9 P
复制代码

: Z: y1 N6 z( A4 A$ A; I( U* N% I, W$ T: d& q+ w* |, F( f

$ q$ P3 B; J+ ]( E2 u/ n为什么我会踩到这个坑呢?
9 E" A5 w- j8 F# D* U4 h因为我做OTA升级,APP部分跑的任务比较多,必须运行到第2次HAL_FLASHEx_Erase才能返回HAL_OK,于是就循环等待咯。- F9 U; a8 V) k( n' L" J9 @
, w* s5 ]8 d* a9 j0 i- K" }8 S
; L2 a2 q: i6 [8 k

7 i) c$ V: o) h$ u  |1 ?" }& m) K  Z0 D1 x' W0 A. c- @
& w, C' |0 Q1 D" Z0 M
7 N8 E. V$ a/ e

: ^8 v0 j! p0 T$ q- q1 d8 ]  \7 _+ }2 }% r  W% z
赞 收藏 评论1 发布时间:2019-8-13 11:13

举报

1个回答
雨一直下_ 回答时间:2020-8-31 14:36:26
刚遇到这个坑,谢谢分享~
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版