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

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

[复制链接]
攻城狮Melo 发布时间:2023-12-11 14:45

7 u* w8 V5 h' @3 [: R
微信图片_20231211144442.png
( b1 y& n' @3 I6 x4 o8 c
  ^; J; Z6 f, }: g" v' I
有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?
' m( ]( `1 M( a& R* A
0 f1 t* P9 h( L' a
我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。4 N+ n" W( v. k( i; J% J+ ^" z

6 f$ a: j5 R% d3 K9 w, H 微信图片_20231211144439.png
0 w* t' }4 A* |3 q$ f$ u+ j0 e0 _# {7 X" i
很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。
  n. H* o# [# c$ a& w! |! D
' K4 s1 r8 P4 n$ T 微信图片_20231211144435.png
$ j& O8 Y6 N4 z" C9 v

( I2 d. Y. @/ W$ N现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。  R9 p# Y7 N$ T$ y3 `

7 C$ \# K. d& V$ {5 i 微信图片_20231211144432.png 7 G( c0 G3 L3 c

3 c- Q! y4 X2 J; S# r; m# H0 ]# E这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】
; |/ W( I1 w5 d/ T* s) ^! ?
! V: ], ^4 r% ^) Z
微信图片_20231211144429.png
# F+ f2 N. O. \7 {9 ^( _# ^; r

, j- a( c$ |4 h$ y' A我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。+ _! @0 g! p) }. p9 \( L$ ]7 s$ W
% P" y: c6 l. S2 l
微信图片_20231211144425.png
$ s8 K- r9 Y4 R+ b* A

: d) ~. @; o5 ]6 M9 ?基于重新调整中断优先级后的代码再做测试,结果就完全正常了。0 B9 E/ ?( ?8 S6 D' S6 P* I8 j

' x) |; B- `. t4 P/ T8 J  o4 y 微信图片_20231211144419.png
& ?* t: \, n6 h, O( _' z
* l& ?/ r* r! p( u1 s" g
当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。# o0 O2 F+ w5 |# L/ U0 F

5 N- w$ u8 m8 U这里的核心问题是中断优先级没有合理安排好。STM32 ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。6 b( q6 z  g' `" J+ m

6 K, h+ d# y4 d' \9 i1 i& C转载自: 茶话MCU, O4 c1 |# V6 U* W; X' ]& s) {
如有侵权请联系删除% h" R/ X: t0 k9 `
, J  w+ Z: M& F6 s9 k5 D- n
  o! ^, \, s  c2 V' K

$ V  ~" U6 p& X0 c2 ]; ?6 k
收藏 评论0 发布时间:2023-12-11 14:45

举报

0个回答

所属标签

相似技术帖

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