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

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

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

( a, P( K" p: i  c
微信图片_20231211144442.png
0 h) C  r" @8 V: w3 A, r

# E; n3 h' L; {$ W4 }6 f有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?
0 y4 L" ?' X! z. m! z+ D
0 H+ ^( E. S4 ]2 g* n
我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。
5 v- u2 k/ L- f& f+ D
7 R/ F( f; g& ~, |# c; J
微信图片_20231211144439.png $ Y/ d% s$ r# E
+ W. e8 }* n* o3 j1 R# [
很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。
$ O5 ]- z2 u% @
7 Y7 N+ u- U- S. F! I- ^ 微信图片_20231211144435.png
/ J- ~" N. L' @+ Z
+ N5 n, R( r7 K" _/ C. W7 b4 G
现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。
! g, j* _0 N/ W+ S" p; s% s

: N! G4 O1 I: O: n6 h6 x) ] 微信图片_20231211144432.png
4 F  r  h1 n- ]# w5 S% O) U6 T& Z. D! M- n
这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】; u- Y' Z- d& @, ^& a* ]& _, ^

% F( n4 }) [% D# F8 C/ ~8 x 微信图片_20231211144429.png   c+ Q# p* S& j+ X

" d( P$ A6 p# N$ a, J我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。
0 g! q+ A' K3 h  ?+ D
: F$ i' y. @4 j5 e
微信图片_20231211144425.png ( L6 M; C2 v# B( P+ v9 W

- ?3 V4 m  P" j- f基于重新调整中断优先级后的代码再做测试,结果就完全正常了。2 z2 m1 e% r% J5 L( k
* p+ X7 k* f8 H4 B2 ^- O; ~4 u+ r
微信图片_20231211144419.png & N! k( J# K. b8 A& i( k, F" v
7 i8 \/ S* P- y7 l
当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。) k9 ]6 n- ]; w7 c
  N& c+ \0 J, u7 G
这里的核心问题是中断优先级没有合理安排好。STM32 ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。
! S! K; U4 t, W" N% B

+ [% m' g0 D$ k+ ]# b1 T* C转载自: 茶话MCU
. r% L2 R8 Q6 \8 @  E2 k9 |, m如有侵权请联系删除
3 o  @* v# ~  _' Y  E0 x0 l! [$ J0 Z7 N8 Y

2 p" a4 v" f- [, I! S; S- [! @) Y9 Q& P9 b5 N
赞 收藏 评论0 发布时间:2023-12-11 14:45

举报

0个回答

所属标签

相似技术帖

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