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

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

[复制链接]
攻城狮Melo 发布时间:2023-12-11 14:45
: K) \5 R- s4 B  p8 ~3 q3 _0 i
微信图片_20231211144442.png
1 g# j: S+ d/ O; u: r( x! h. Z
/ n6 o, T$ o$ E# p: T0 I
有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?
4 y; }" i. ?4 H: o8 h+ w

# Y' v0 c2 k  _  Y( |+ k! n; l我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。# H( ]) O1 x6 O' j
/ b) ~  R# f. V4 X5 R3 P& V
微信图片_20231211144439.png
0 d) b$ M& n2 U. m# C- _6 X5 S( a8 l/ @9 _; R% Y+ \
很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。
5 ]7 y1 L4 ?! M/ x6 X! l' j9 B$ e  A/ e$ g' I$ R- c: q! R9 C
微信图片_20231211144435.png
6 A! x# o: l+ M; W' P2 [

) ]8 q* z6 j* l  L7 d' B现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。
! y; Y. i$ e% s# I0 G" b$ I

( `* P8 r6 N# G6 y% C' D 微信图片_20231211144432.png ; t5 K( Y$ |( `; T2 [" i
9 c  G  F2 @) C
这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】$ Q% Y; j! h! L

, T- H0 n+ q0 |- S& \ 微信图片_20231211144429.png 1 p, O, ~9 U+ u8 B  J- H
6 A$ S8 m% o4 X
我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。5 `/ o$ S# p  P3 f/ _6 d
6 ^, g; u9 n1 I1 V) k
微信图片_20231211144425.png
5 U( H) P8 p& E# T
3 Q! `) d3 j$ B/ I( i
基于重新调整中断优先级后的代码再做测试,结果就完全正常了。
2 _: u8 Y6 S) ~( y2 K2 @. [/ B/ p4 @4 |, @
微信图片_20231211144419.png
& u+ ^7 W# p# @5 Z$ Z  x
0 w- p" V' f) J9 O
当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。
1 Y% t2 f& q1 I( m( D# b9 X  L
. D! p- o! p8 i9 z! F0 v& v& `这里的核心问题是中断优先级没有合理安排好。STM32 ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。% o: V! }' L& Z3 Z1 s2 d

+ S0 x0 W6 z( h转载自: 茶话MCU* j1 X) a; W# c- r5 q
如有侵权请联系删除
% U5 Y; w$ W2 d- X" E' Q. N8 ]3 `# b8 A5 F/ |% z* o
0 t- }0 ^- {5 s3 T( `: U1 ?! m

2 d2 Z8 |+ N( d3 i6 z  a7 O
收藏 评论0 发布时间:2023-12-11 14:45

举报

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