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

基于STM32的SPI传输时会丢失数据吗?

[复制链接]
攻城狮Melo 发布时间:2023-12-11 14:45
8 q: N% o% f2 ]2 l8 _6 e* \
微信图片_20231211144442.png

$ n/ n$ M$ c' A5 @! f. h; g
% I- J$ D. x+ i有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?
# o2 `- a* u0 G- q7 P2 n* L- h
8 Y& P" R: O8 u1 ]9 c
我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。8 p3 s1 j5 H0 a" B9 f$ h

; \5 a; h, \' e6 D 微信图片_20231211144439.png 6 ?& W  H% X( S* c9 y6 O

6 S# L) C8 |- n很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。
2 i" B$ ^% A7 Y/ c% _7 A6 M' X; }2 f; |& y2 k
微信图片_20231211144435.png 2 `6 O6 z4 {/ h! D
$ t! I- @  H6 q# u
现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。
  r1 P; ~: {; h4 P8 B0 ]6 P, }9 q
# I9 ^! k( l5 I% O/ _0 Q5 I' L
微信图片_20231211144432.png
1 G& i; b8 k: I6 y" s7 X5 `
! T/ i% a. @; S9 m; [* `" `这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】5 x. B& y5 n# ~$ D, C

( x$ i% c! X) L' `5 m/ @ 微信图片_20231211144429.png
% _; ]) h2 m2 r9 z

) P5 N" R* `6 L' Z. ~: L- ?; C我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。5 o- h" `! n7 K2 l

) e: _2 t, U" ~+ X- l 微信图片_20231211144425.png
; V) {: f6 g7 O# j4 M0 F- a

/ k6 h3 }6 v( k5 p- f& w基于重新调整中断优先级后的代码再做测试,结果就完全正常了。
5 I$ A, ]5 ?- s' y# X
3 L, {8 l' E6 t, w- `+ b 微信图片_20231211144419.png
7 y* s: L5 j8 G* ^- s6 a( r

/ I$ G5 m6 T; o* {* ]当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。, I1 c. L. p. w) f8 v* X
3 U# U, K, N) X
这里的核心问题是中断优先级没有合理安排好。STM32 ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。
! f7 X+ B% z. L  A' Y1 r4 m
. c7 J, @7 o& R7 ]" ]2 H
转载自: 茶话MCU4 i# _; L. ^! W
如有侵权请联系删除
, O" g# C/ J$ B4 f: _% s: z; a( |+ p

& A2 l6 W9 Q# S# a- k' V7 Z! ~' i. ?4 s) G) q  U, @: k; x! z4 j9 |
赞 收藏 评论0 发布时间:2023-12-11 14:45

举报

0个回答

所属标签

相似技术帖

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