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

关闭 SPI 会导致 WRPERR 错误的问题分析

[复制链接]
STMCU小助手 发布时间:2023-2-14 16:04
1. 引言在 STM32 的应用中,SPI 算是用的比较多的外设了,也是单片机最常见外设之一。客户说它执行了关闭 SPI 的代码,竟然会导致 Flash 中的 WRPERR 标志置位,致使应用碰到一些问题。这就奇怪了,SPI 和内部 Flash 看起来是风马牛不相及的事情,为什么会发生这种事呢?一起来看看吧。( x* e( h8 A) k$ v/ F# t

" w6 a" C9 Q' t7 G3 _; e5 }; P) T3 S

6 J2 m+ j, y% x# M5 _" X7 o2. 问题: F. p! W  n' K9 q; R. t. u
2.1. 问题起源
" b* ~( ?6 E) B1 c6 J& P客户在使用 STM32L072RBT6 的时候,使用 STM32CubeL0 库,在程序编写时,发现执行关闭 SPI 代码时,会导致 Flash 的写保护错误标志 WRPERR 置位,导致其后面准备写 EEPROM 的时候,就无法对 EEPROM 写入了。
6 v, K8 p8 z& |! {5 y, h客户使用两个标志 flag1 和 flag2,来观察 WRPERR 标志的变化。代码如图 1 所示。
0 a" a4 n2 n2 [% a; X6 F( u" X. _5 L& u
8 Y  l6 p8 Z, b3 i. o4 e
~~4`H1JGDRM[6V4YL$%C}PJ.png 4 S( |* ~* C+ _2 X3 l
/ V9 ]; b+ r/ S% H% L0 b' c

' `4 k  f! d/ I2 h6 g2 Q9 c3 b8 | 在执行这个代码时,前面 flag1 还等于 0,执行到 flag2 那句,就变成 flag2 等于 1 了,同样地取了 WRPERR 标志位的值。所以客户就怀疑执行__HAL_SPI_DISABLE()会把Flash 的 WRPERR 标志置 1 了。
0 u0 k# ~. w. B5 K因为在对 EEPROM 编程中,需要先调用位于 stm32l0xx_hal_flash.c 中的FLASH_WaitForLastOperation()函数,此函数中,将会对 Flash 所有错误标志进行检查,如果出现了错误,它则返回 HAL_ERROR,导致后续对 EEPROM 的编程不会被执行。1 }5 P5 z7 A1 [9 c/ O) F9 U( N6 f6 Y/ q
: m: r& E6 J+ ?- s8 X- A$ m
2.2. 问题重现. V0 G; p5 |! j& G1 l% ?( K% U1 [
使用 NUCLEO-L053R8 来验证客户的这个问题。在\STM32Cube_FW_L0_V1.10.0\Projects\STM32L053R8-Nucleo\Examples\SPI\SPI_FullDuplex_ComPolling 例程中直接进行修改测试。首先,把客户的测试代码加到例程中 SPI 初始化之后的位置。如图 2 所示。
) A6 A3 z. v" b* g; w  Y& O) x. H

" r6 K  S  ^, K) f6 U' i) x, S SIR`2[{UWG0Y0`2GAY(B}8O.png & B; q* S1 B* b) S
3 Z" R7 g6 t* v
( b4 w% Y* W% w7 @6 }# V6 O& o
编译,并在线调试,发现并没有出现客户所描述的问题。如图 3 所示。 5 V# n6 _- o/ A

9 F6 e0 I/ l% E2 B/ B
* m1 s# q5 W, E2 P+ t5 k
4)~{T)IY4QVPAM4}`)GIQ}2.png
# V3 H9 Z+ V( v- S  f* T
3 g. X1 x  h( {6 L8 G( u/ l) j

9 {6 v: p5 O5 [2 J" |可以看到,WRPERR 的值并没有被置 1,flag1 和 flag2 的值也都是 0。那么,为什么客户说他那边会有这个问题呢?
% T/ E2 X: }9 ]6 t' X) N再回头仔细看一下客户的测试代码,发现客户的测试代码中并没有对 SPI 进行初始化,其__HAL_SPI_DISABLE()代码是放在其他外设初始化之后的。! O# Q8 }$ V& K& G/ A% j# g% t
好,那么再来修改一下测试代码,把客户这三句测试代码挪动到 SPI 初始化之前,如图 4 所示。" E1 d2 c) K8 `. R+ k  ?* A. T
) G3 p# H! K0 _+ R( g
. o$ G8 f; P7 y4 A! }5 v# H
/ ]6 D, c! ?, q* n
. Q3 [- h; t: v. x
GVO92SZY7{MX63HF${UYF9B.png
3 x6 W! R1 @( [4 d* K  ]' p# _: ]0 k7 ^* D" n4 d1 z3 r

4 y, q6 t" Z" [3 r- m9 Z编译,并在线调试,这时,会惊奇地发现客户所描述的问题来了。其结果如图 5 所示。 2 x! V  w3 k, Q3 F

3 O; g3 {  z, n% |2 o, K/ a5 l0 I3 k& h* W
' ], f& s. J6 n
完整版请查看:附件 关闭SPI会导致WRPERR错误的问题分析_v1.0.pdf (483.01 KB, 下载次数: 0)
赞 收藏 评论0 发布时间:2023-2-14 16:04

举报

0个回答

所属标签

相似技术帖

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