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

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

[复制链接]
攻城狮Melo 发布时间:2023-12-11 14:45
5 U* g+ K" F7 N  Q, i
微信图片_20231211144442.png

6 ]. {; n' d4 F" a* Q" e3 J
, U% b0 w( B% a3 [+ L; H8 u. W有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?
" i3 X. D; o" D6 j) U

* A0 G4 P8 ?: }  P" O我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。
; c& q  p, e% y; O

" `' K. }% u% L* l& S" i8 k 微信图片_20231211144439.png : r6 J/ x+ x* [& D# ]

: j0 P# a$ i8 U! I很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。
# ]8 Y  l9 U' g& o, |- v7 ~' N' e
& `! {2 L2 Z" J' Q- k: F; S 微信图片_20231211144435.png 7 z( S4 l" C3 K& J6 `" {( I8 [* S, P5 V
  ^4 h2 M1 t  B1 E6 I6 T' m
现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。* h$ t( ?: X8 ?7 U

+ w1 D* B- M6 x5 c1 M; t" i( X 微信图片_20231211144432.png
% Y& D3 y  ^/ A% t; B! O  U/ |# |/ t% ~2 R+ B) Z1 E
这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】
+ w4 A* m) a8 }; Q

! b: M* ~' N7 g 微信图片_20231211144429.png + j& W! J3 R9 u2 h

) x1 r+ u6 |$ f3 h4 w我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。" u2 i+ @+ x3 W6 w+ t; P
  k# m+ P  E( U8 D9 ]* M3 o
微信图片_20231211144425.png + T. x2 F% J6 v

$ d+ C) v2 ^* K6 L  C% I基于重新调整中断优先级后的代码再做测试,结果就完全正常了。
& `$ g) \& j/ n- f& ^. w4 e4 `( ]3 h# V6 s/ Q4 u' o6 _
微信图片_20231211144419.png
/ a1 G; W6 |/ ]5 |+ k5 h
* S0 m! i! y7 P0 f
当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。5 M: {( b' M- t( K& T: O

* M. A4 q# ], b. o9 M- F) H' o这里的核心问题是中断优先级没有合理安排好。STM32 ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。9 G& c$ n) }6 }- N. v3 b6 R! F- k

  P5 L; ?* C) v$ h3 P3 t- z* F: d转载自: 茶话MCU, w! Q' W! V$ F& E
如有侵权请联系删除
; C" [$ \5 D5 j1 B; Y/ a; w* V0 ~+ A- v( G$ S( s7 _" ?% \* j5 _
) q3 C+ p/ U) ]% C
( p# a3 }! u7 @1 _: i3 B% L1 b
收藏 评论0 发布时间:2023-12-11 14:45

举报

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