0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用STM32F4芯片验证SPI功能的问题分析

茶话MCU 来源:茶话MCU 2023-12-11 09:20 次阅读

有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?

我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。

c695b4fe-9759-11ee-8b88-92fbcf53809c.png

很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。

c6a88070-9759-11ee-8b88-92fbcf53809c.png

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

c6bbc234-9759-11ee-8b88-92fbcf53809c.png

这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】

c6cd652a-9759-11ee-8b88-92fbcf53809c.png

我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。

c6e43552-9759-11ee-8b88-92fbcf53809c.png

基于重新调整中断优先级后的代码再做测试,结果就完全正常了。

c6fd7378-9759-11ee-8b88-92fbcf53809c.png

当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。

这里的核心问题是中断优先级没有合理安排好。STM32ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89600
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41023
  • 开发板
    +关注

    关注

    25

    文章

    4429

    浏览量

    93991
  • STM32F4
    +关注

    关注

    3

    文章

    192

    浏览量

    27676
  • HAL库
    +关注

    关注

    1

    文章

    112

    浏览量

    5878

原文标题:SPI传输时为何丢失2个数据?

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F4的USB功能

    关于STM32F4的USB功能,有以下问题想请教各位高手。硬件搭建环境: 电脑(USB host)STM32F4(USB1口)-STM32F4(USB2口) 打印机(USB devic
    发表于 11-16 08:49

    STM32STM32F4开发板简介 相关资料下载

    ALIENTEK 探索者 STM32F4 开发板,资源十分丰富,并把 STM32F407的内部资源发挥到了极致,基本所有 STM32F407 的内部资源,都可以在此开发板上验证,同时扩
    发表于 07-06 07:52

    STM32F4数据手册

    注:博主使用的是STM32F4探索者 一、参考资料1、STM32F4数据手册:STM32F407ZGT6.pdf2、STM32F4中文手册:STM3
    发表于 07-23 07:15

    STM32F4外部中断简介

    STM32F4外部中断简介 STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部IO口的中断功能,通过中断的代码主要分布在
    发表于 08-04 08:56

    基于STM32F4系列的芯片讲解

    前言:本文章所讲解的例程是基于STM32F4系列的芯片。首先从官网下载F4系列的固件包,网站如下:下载步骤如下:选项已用红色方框标定第一步:第二步:第三步:因为本文章使用的HAL库,所以选择HAL的固件包,用户可以根据自己需要的
    发表于 08-05 06:24

    STM32F4外部中断简介

    STM32F4外部中断简介STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部IO口的中断功能,通过中断的代码主要分布在固
    发表于 08-13 07:33

    STM32F4外部IO口的中断功能

    前言我们前面学习了通过IO的输入模式达到按键控制效果,这里我们将介绍 STM32F4 外部 IO 口的中断功能,通过中断的功能,达到同样的效果,即:通过板载的 4 个按键,控制板载的两
    发表于 08-16 06:39

    STM32F4开发板的资源图

    的资源图F4开发板图示如下:ALIENTEK 探索者 STM32F4 开发板,资源十分丰富,并把 STM32F407的内部资源发挥到了极致,基本所有 STM32F407 的内部资源,都
    发表于 08-19 09:36

    如何使用STM32F4芯片做开发?

    如何使用STM32F4芯片做开发?
    发表于 11-08 06:54

    STM32F4STM32F1怎么配置它的复用功能

    STM32F4STM32F1怎么配置它的复用功能
    发表于 11-25 07:50

    如何去看STM32F4芯片资源呢

    如何去看STM32F4芯片资源呢?一键下载电路的原理是什么?
    发表于 12-15 06:42

    如何使用STM32F4自带的SPI来实现对外部FLASH上?

    STM32F4SPI功能是什么?如何使用STM32F4自带的SPI来实现对外部FLASH上?STM32
    发表于 12-17 06:21

    STM32F4的ADC简介

    2.2.3 main函数代码2.2.4 验证步骤三:一些注意事项(程序运行不成功可以往这找)ADC设置方面:DMA设置方面数据处理方面一:STM32F4的ADC简介1.1 ADC简介(不看也行)简单来说ADC就是将模拟量电压转换...
    发表于 01-20 08:17

    STM32F4芯片的相关资料推荐

    有人利用STM32芯片做些DSP处理,在启用FPU单元进行调试、验证过程中可能会遇到些小问题、小困惑,这里通过STM32F4芯片一个具体的应
    发表于 02-07 07:30

    STM32F4 SPI-FLASH实验例程

    STM32F4 SPI-FLASH实验例程(java的哪个版本用于嵌入式开发)-STM32F4 SPI-FLASH实验例程,有需要的可以参考!
    发表于 07-30 16:01 20次下载
    <b class='flag-5'>STM32F4</b> <b class='flag-5'>SPI</b>-FLASH实验例程