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

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

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

, n. C7 C3 k: c$ c6 u7 a2. 问题
8 R' X3 f, `' R2.1. 问题起源: l, U$ [7 }6 c: U; n9 W7 h
客户在使用 STM32L072RBT6 的时候,使用 STM32CubeL0 库,在程序编写时,发现执行关闭 SPI 代码时,会导致 Flash 的写保护错误标志 WRPERR 置位,导致其后面准备写 EEPROM 的时候,就无法对 EEPROM 写入了。
! b5 O2 h, L2 c! }# U$ ]客户使用两个标志 flag1 和 flag2,来观察 WRPERR 标志的变化。代码如图 1 所示。
& V6 `& y* o% p  V2 o4 A, S* F9 P  R6 Y+ v* u

5 d( p7 k4 |: F( d. H% s/ z ~~4`H1JGDRM[6V4YL$%C}PJ.png 4 P# P+ D0 v* L; [

0 b: _8 G9 p2 J! k- c7 [$ l# H
+ M+ u. \. Q4 e* O0 ^- h
在执行这个代码时,前面 flag1 还等于 0,执行到 flag2 那句,就变成 flag2 等于 1 了,同样地取了 WRPERR 标志位的值。所以客户就怀疑执行__HAL_SPI_DISABLE()会把Flash 的 WRPERR 标志置 1 了。( I7 v1 P4 G4 \8 p$ v1 ]
因为在对 EEPROM 编程中,需要先调用位于 stm32l0xx_hal_flash.c 中的FLASH_WaitForLastOperation()函数,此函数中,将会对 Flash 所有错误标志进行检查,如果出现了错误,它则返回 HAL_ERROR,导致后续对 EEPROM 的编程不会被执行。$ k$ \- r7 f9 P) C
* @" T7 m  G) n' z! u1 P
2.2. 问题重现
1 f+ y. B/ `4 K1 l" D' `使用 NUCLEO-L053R8 来验证客户的这个问题。在\STM32Cube_FW_L0_V1.10.0\Projects\STM32L053R8-Nucleo\Examples\SPI\SPI_FullDuplex_ComPolling 例程中直接进行修改测试。首先,把客户的测试代码加到例程中 SPI 初始化之后的位置。如图 2 所示。
: x- z! M6 F' b# v+ U4 c! ?/ D! ]8 P" r+ }% H
' v4 F. I  }& V5 C" `$ K% c
SIR`2[{UWG0Y0`2GAY(B}8O.png
5 |% [) @0 _2 E# h. K$ {
( G# d/ x2 Q! `% z- k, G$ p. g
& V! i! A/ v3 [4 d6 x1 t6 Y# F; b
编译,并在线调试,发现并没有出现客户所描述的问题。如图 3 所示。
8 f, l/ g+ u& T7 W8 e2 U' z6 a- {2 S

6 ]! T8 {  Q- p 4)~{T)IY4QVPAM4}`)GIQ}2.png 8 \2 ?) `, A# K% O2 K, ?
9 q6 I& ^+ e' H5 |+ ~# j
5 O9 i( a0 \) @* `6 o$ p
可以看到,WRPERR 的值并没有被置 1,flag1 和 flag2 的值也都是 0。那么,为什么客户说他那边会有这个问题呢?
2 u- Z9 L4 b, [+ g7 F* ?再回头仔细看一下客户的测试代码,发现客户的测试代码中并没有对 SPI 进行初始化,其__HAL_SPI_DISABLE()代码是放在其他外设初始化之后的。
) f" o, A* H; G+ L0 }$ L' x4 c3 O好,那么再来修改一下测试代码,把客户这三句测试代码挪动到 SPI 初始化之前,如图 4 所示。( o8 u( T  {! _" i/ k9 V5 Y7 B
" h& H# Q/ x# V9 d: U" ?2 m
5 G- @8 U! b5 C0 D- u- ]9 k2 G

9 k$ L2 O: L- d" ~! t  r) u9 t
& S, ?3 U3 {. _6 B
GVO92SZY7{MX63HF${UYF9B.png
9 v5 D, J% E1 S4 |8 s4 W: K
! t" u5 b' Z) h7 C+ u5 _- T
0 p( k( t/ Q* P; @
编译,并在线调试,这时,会惊奇地发现客户所描述的问题来了。其结果如图 5 所示。
, D. p  U% c) J& ^  M" H) R) ?% ]% [" r* ~4 V" u
5 P% ^, l% k( z

3 ^4 t: q2 I+ G* Z* R" L完整版请查看:附件 关闭SPI会导致WRPERR错误的问题分析_v1.0.pdf (483.01 KB, 下载次数: 0)
收藏 评论0 发布时间:2023-2-14 16:04

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版