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

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

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

2 d, q  I- }! q$ {1 N7 A# h) X! T

0 G  q- y# E1 a, J2. 问题% O% m" P- V* e: ^/ [
2.1. 问题起源
! j8 H) v) U( C5 J% y7 l客户在使用 STM32L072RBT6 的时候,使用 STM32CubeL0 库,在程序编写时,发现执行关闭 SPI 代码时,会导致 Flash 的写保护错误标志 WRPERR 置位,导致其后面准备写 EEPROM 的时候,就无法对 EEPROM 写入了。0 G$ E# g; B! F% a5 A3 T. o
客户使用两个标志 flag1 和 flag2,来观察 WRPERR 标志的变化。代码如图 1 所示。3 a  F) [2 F, ^2 e

3 h5 D2 s* w9 o" ~( `- ?
0 v3 I- J  u6 c+ P1 V$ K
~~4`H1JGDRM[6V4YL$%C}PJ.png 2 I6 Q, G) |, U( R0 z

0 z" s; r' c+ m0 K0 p( p

! s" [* ^0 L5 V) t" Q% X' E6 [ 在执行这个代码时,前面 flag1 还等于 0,执行到 flag2 那句,就变成 flag2 等于 1 了,同样地取了 WRPERR 标志位的值。所以客户就怀疑执行__HAL_SPI_DISABLE()会把Flash 的 WRPERR 标志置 1 了。
5 I5 H6 b2 c# @& P因为在对 EEPROM 编程中,需要先调用位于 stm32l0xx_hal_flash.c 中的FLASH_WaitForLastOperation()函数,此函数中,将会对 Flash 所有错误标志进行检查,如果出现了错误,它则返回 HAL_ERROR,导致后续对 EEPROM 的编程不会被执行。
0 ~% J' W. }6 ]
1 s0 [6 Y# q% E2.2. 问题重现1 h8 L$ M% {: _5 W* }. M
使用 NUCLEO-L053R8 来验证客户的这个问题。在\STM32Cube_FW_L0_V1.10.0\Projects\STM32L053R8-Nucleo\Examples\SPI\SPI_FullDuplex_ComPolling 例程中直接进行修改测试。首先,把客户的测试代码加到例程中 SPI 初始化之后的位置。如图 2 所示。 0 h, ^' p6 W2 P! k9 h9 g% D4 X& g6 n
# s& F# ~$ \4 B6 r

, o! G; W1 L- p1 ?0 J: D6 d8 } SIR`2[{UWG0Y0`2GAY(B}8O.png 9 o+ m& X2 O/ `7 j# I
0 l9 u  ~, Q5 L# z' O% n7 `
2 C) s( C0 ?3 P+ G* l4 q- M
编译,并在线调试,发现并没有出现客户所描述的问题。如图 3 所示。 6 g: n6 F' m' e2 y" a1 h/ l
3 i+ b+ B2 h5 T* _. A
  |$ d1 S1 L! w, x" _
4)~{T)IY4QVPAM4}`)GIQ}2.png
( p  b9 J/ O# }+ \
! c7 r2 p8 q% ]2 w9 j; P; d

: l% i3 M9 g' h& ?* U可以看到,WRPERR 的值并没有被置 1,flag1 和 flag2 的值也都是 0。那么,为什么客户说他那边会有这个问题呢?
4 r0 c2 B, `6 J- _再回头仔细看一下客户的测试代码,发现客户的测试代码中并没有对 SPI 进行初始化,其__HAL_SPI_DISABLE()代码是放在其他外设初始化之后的。, E1 C3 o- ~0 b. @
好,那么再来修改一下测试代码,把客户这三句测试代码挪动到 SPI 初始化之前,如图 4 所示。
* `# y: ~; F7 Y3 W, \
$ C6 ]" r! V7 b( Z0 F9 J2 a; e3 _

) K5 G4 @. v. j- p/ }. C
1 U4 k+ L# O/ x+ {8 @9 [: `9 J

/ [1 i3 W! w0 E% |7 E GVO92SZY7{MX63HF${UYF9B.png 3 s( K, Z+ K! b# q3 Q& e

* J& o1 _2 F( K3 q; k

' F2 U2 c4 N, m8 {) t% @( I编译,并在线调试,这时,会惊奇地发现客户所描述的问题来了。其结果如图 5 所示。
3 O) p0 u+ T- ]- L( k. @
3 J/ y" e4 P0 ]" @' B0 n+ @
  d0 F# i5 f3 z9 b
) n. o% R# B2 ]
完整版请查看:附件 关闭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 手机版