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

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

[复制链接]
攻城狮Melo 发布时间:2023-12-11 14:45
) }6 B) ?5 D4 C& O  l" V* c
微信图片_20231211144442.png
, k* ^5 q$ M  p( c5 q( h# C
( Q0 S6 p) F! i* e) z
有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?0 ^/ y: |4 b! H! v3 m
5 X: b; t% i% U( d7 B. ~
我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。
% Q# ?' L+ Y, a9 A7 I+ ]$ g' E( O/ G

2 H% O8 f5 a6 q' E. I 微信图片_20231211144439.png $ [$ n) }# F$ f' n# d
8 D2 I. ?6 |+ P1 V# k
很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。) n4 d; ~' k) h. ~

: [+ e1 ?: r3 I7 h, L& _1 Z/ X8 w 微信图片_20231211144435.png . _( T! t' K+ s3 b9 n6 I$ F

$ Z4 r3 V& x$ \现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。6 x6 G# E% w# b
' M- a* I! y9 s  T" U
微信图片_20231211144432.png
. ]9 L! j( V- W% Y0 b; S2 M: [% r. P  y9 W/ k0 }
这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】8 B. p4 e9 a, d+ }6 p' O( l) U
1 w- I, S; L4 T
微信图片_20231211144429.png
3 e. @6 \# n3 D3 Y0 ]

7 p5 [, H- }. h& y# j我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。
) |7 Q4 y$ q9 @' g* x$ {* p- D
5 `. b) P% i. I) l9 R" x# e, ^. d
微信图片_20231211144425.png ! r1 Z+ f+ l; q8 E7 a

9 B# D5 j0 i) {$ {基于重新调整中断优先级后的代码再做测试,结果就完全正常了。$ `; f* n% Z6 o) \- Q1 o

4 }" V/ |  [1 p  p 微信图片_20231211144419.png 0 [1 t. k) ^- W1 ?9 e2 O" r. x
- a* f7 p0 V5 T1 k: H. O
当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。
) j! D2 H7 e- Q6 w3 q; `
8 ~0 G0 s( u2 O; v( L* y: K这里的核心问题是中断优先级没有合理安排好。STM32 ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。. A# ]# R3 i6 z# I
+ w, \. p) e5 {' }% o4 ?% h
转载自: 茶话MCU/ I5 Y3 {9 Y, r& c  n4 u% Q" d
如有侵权请联系删除
: U+ z0 Z+ \4 C8 [2 B) u$ K" A
- {" k/ D; L3 y0 D2 R' C' I
( `! i) D9 X: q3 J, G4 ?. q

( }) s, o1 K, [0 Y4 i# U5 v5 U7 G
收藏 评论0 发布时间:2023-12-11 14:45

举报

0个回答

所属标签

相似技术帖

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