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

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

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

: p2 f. I) }% v3 ^' E) X2. 问题$ D  O2 A! C( G7 g# k$ J4 \2 Q7 y
2.1. 问题起源, i1 ~5 N9 A, O& a
客户在使用 STM32L072RBT6 的时候,使用 STM32CubeL0 库,在程序编写时,发现执行关闭 SPI 代码时,会导致 Flash 的写保护错误标志 WRPERR 置位,导致其后面准备写 EEPROM 的时候,就无法对 EEPROM 写入了。
9 C" }" g4 _: a& p! A3 G客户使用两个标志 flag1 和 flag2,来观察 WRPERR 标志的变化。代码如图 1 所示。, v8 V5 G! j& |
! R( C; Q2 a& I

3 i  n* Z1 v! _3 d ~~4`H1JGDRM[6V4YL$%C}PJ.png 9 Q  f& b+ s5 m1 a( F2 P

: V% z% v4 p7 k& d8 A
3 s, p# [' O' e! z3 o
在执行这个代码时,前面 flag1 还等于 0,执行到 flag2 那句,就变成 flag2 等于 1 了,同样地取了 WRPERR 标志位的值。所以客户就怀疑执行__HAL_SPI_DISABLE()会把Flash 的 WRPERR 标志置 1 了。8 Y$ h0 ^+ c6 K( v& H
因为在对 EEPROM 编程中,需要先调用位于 stm32l0xx_hal_flash.c 中的FLASH_WaitForLastOperation()函数,此函数中,将会对 Flash 所有错误标志进行检查,如果出现了错误,它则返回 HAL_ERROR,导致后续对 EEPROM 的编程不会被执行。
: @+ w% T- @& g4 G! t" x5 E
, F& t  o# e! D& [0 Z9 }3 r! l2.2. 问题重现. W$ Y* _. g2 |9 u
使用 NUCLEO-L053R8 来验证客户的这个问题。在\STM32Cube_FW_L0_V1.10.0\Projects\STM32L053R8-Nucleo\Examples\SPI\SPI_FullDuplex_ComPolling 例程中直接进行修改测试。首先,把客户的测试代码加到例程中 SPI 初始化之后的位置。如图 2 所示。
( u+ h' P+ P& O% l7 [2 v0 G# ~
% g  {& h( P8 H- ?0 k8 Y

( w, {/ S4 d; o! L9 L SIR`2[{UWG0Y0`2GAY(B}8O.png ( E  a* p1 ~% t4 @

+ v7 O  [3 J% i7 K  z. W' _- F* Z) T

$ M) K, u4 g) J编译,并在线调试,发现并没有出现客户所描述的问题。如图 3 所示。 $ w/ M& z* X3 w4 Z
8 D( K/ C5 D( L* x5 w. p

% e' S, u; P9 f 4)~{T)IY4QVPAM4}`)GIQ}2.png / c9 s: u- w. T+ k. j, g
1 t  m& x. u! }) n1 M
) M% E  n; F3 o+ G% _4 e. b0 ?
可以看到,WRPERR 的值并没有被置 1,flag1 和 flag2 的值也都是 0。那么,为什么客户说他那边会有这个问题呢?
* D$ }/ k5 t9 B/ Z: k$ w再回头仔细看一下客户的测试代码,发现客户的测试代码中并没有对 SPI 进行初始化,其__HAL_SPI_DISABLE()代码是放在其他外设初始化之后的。
" ?/ F; O4 [- }# w% G7 V好,那么再来修改一下测试代码,把客户这三句测试代码挪动到 SPI 初始化之前,如图 4 所示。
4 k' O8 h' m/ `' d  I; Z' X% ^$ d/ W. p

* B4 D$ m1 l+ P& ~, g6 U0 A4 j9 z/ V6 f+ X4 B6 Q0 q7 |! z* ~

4 G# t7 [, }9 s! Q) R GVO92SZY7{MX63HF${UYF9B.png 2 ~" m8 J: K7 c$ q- h

% d' y% R8 w( K+ \7 G- r

) j& Z; K9 q5 Q6 S& L编译,并在线调试,这时,会惊奇地发现客户所描述的问题来了。其结果如图 5 所示。 + ?$ Z) R; s. }3 K

9 |4 w/ u+ p& `  Q) l) A5 M3 ]! Y( c- _
8 T& b4 ~; }& ]; U
完整版请查看:附件 关闭SPI会导致WRPERR错误的问题分析_v1.0.pdf (483.01 KB, 下载次数: 0)
收藏 评论0 发布时间:2023-2-14 16:04

举报

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