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

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

3天内不再提示

提高SPI时钟时通信异常的案例分享

茶话MCU 来源:ST MCU 信息交流 2020-07-13 11:41 次阅读

有人采用STM32H743ZI芯片的SPI外设跟ADC器件通信,发现一旦SPI的SCK时钟超过25MHz时,比如50Mhz,就会发生读取数据失败,并提示Busy忙信息或ERR错误信息。反正只要串行时钟不超过25Mhz,收发都很正常。

但是STM32H743芯片手册上明白地说了SPI时钟最高可达150MHz,这会是什么原因呢?

根据他所提到的异常现象初步判断,不论他的硬件方面还是软件配置方面都应该没有很大的问题,不然根本没法通信。像这种情况有可能是下面几种原因之一或组合原因【当然不仅限于这些】:

第一种情况就是通信速率明显提高时,由于通信速率加快,而接收处理的相关代码本身所用时间相对固定,这样可能导致不能及时读走数据而发生溢出,尤其是基于查询方式或中断方式接收处理时。这时我们可以考虑对接收代码做进一步的精简优化,压缩接收处理时间,或者改用DMA方式进行数据的收发。

第二种情况就是当通信速率明显提高时,跟外设复用的GPIO输出速率档位的配置没有跟上来。以本案例来说,当我们将SPI的时钟上到50MHz甚至更高时,若相应的GPIO的输出速率配置还维持在相对低速水平,与实际输出需求不相匹配时往往就会出现异常。

关于这个配置,如果使用STM32CubeMx配置的话就非常简单,通过菜单选择即可完成。如下图所示:

第三种情况就是当通信速率明显提高时,即使相应的GPIO输出能力配置也匹配了,但有些情况下还是有可能出通信异常的问题。我们知道,当GPIO输出速率越来越高的时候,GPIO模块带来的噪声也越大,作为通信口时其信号质量也会随着通信速率的提升而变差,当然,此时芯片所需的功耗也随之增大。对于很多STM32系列芯片,当GPIO输出速率达到一定程度时,建议开启片内GPIO补偿单元。【下面截图是两个STM32系列关于GPIO补偿单元的介绍文字】

该GPIO补偿单元的作用就是通过控制IO口的输出斜率,降低GPIO的噪声对整个电源的影响并尽力改善信号质量,所以当我们基于STM32芯片实现较高速率的通信时,比方50Mhz甚至上百兆的SPI或USB通信时,如果芯片有GPIO补偿单元的话,建议将其开启。顺便提醒下,使用GPIO补偿单元的话,往往对电源电压有相应要求,具体依手册而定。

下面是分别基于STM32F4和STM32F7系列的HAL库相关开启GPIO补偿单元的函数。

至于本案例异常的真正原因是什么呢?后来经确认属于上面提到的第二种情况,GPIO输出速率挡位选择与实际输出需求不匹配,稍加调整配置就好。

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

    关注

    2270

    文章

    10901

    浏览量

    356233
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1707

    浏览量

    91645
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52133

原文标题:提高SPI时钟时通信异常的案例分享

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

收藏 人收藏

    评论

    相关推荐

    KeyStone架构串行外设接口(SPI)手册

    SPI(Serial Peripheral Interface)是一种高速、全双工、同步的串行通信协议,它允许微控制器与一个或多个外围设备进行通信SPI
    发表于 12-16 10:33 0次下载

    ADS8688IDBT SPI读取数据波形异常,为什么?

    我司AGV项目中使用了TI的ADS8688IDBT,目前调试中遇到SPI读取数据波形异常情况(数据在时钟下降沿跳变), 读取数据值不对的情况, 麻烦确认下问题。
    发表于 12-06 06:43

    通信协议之SPI总线硬件篇

    SPI:Serial Peripheral Interface,串行外围设备接口。 是由摩托罗拉在20世纪80年代中期开发的同步串行总线接口规范(带有时钟信号,通过时钟极性和时钟相位
    的头像 发表于 11-25 17:56 558次阅读
    <b class='flag-5'>通信</b>协议之<b class='flag-5'>SPI</b>总线硬件篇

    spi master接口的fpga实现

    前言 当你器件的引脚贼少的时候,需要主机和从机通信spi就派上了用场,它可以一对多,但只是片选到的从机能和主机通信,其他的挂机。 spi:serial peripheral inte
    的头像 发表于 11-16 10:35 427次阅读
    <b class='flag-5'>spi</b> master接口的fpga实现

    DS1302芯片与FPGA之间SPI通信原理

    本文通过以DS1302芯片为基础,介绍该芯片与FPGA之间SPI通信原理,详细描述硬件设计原理及FPGA SPI接口驱动设计。
    的头像 发表于 10-24 14:16 480次阅读
    DS1302芯片与FPGA之间<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>原理

    SPI通信协议的基本概念和工作模式

    SPI(Serial Peripheral Interface)通信协议,即串行外围设备接口,是一种高速、全双工、同步通信总线,由摩托罗拉公司提出并广泛应用。SPI以其高效的数据传输能
    的头像 发表于 09-09 17:04 1573次阅读

    单片机SPI通信实现

    在深入探讨单片机(如基于STM32、AVR、PIC等)如何通过SPI(Serial Peripheral Interface)进行通信之前,我们先概述SPI通信的基本原理,随后以STM
    的头像 发表于 09-09 17:00 537次阅读

    探索SPI单线传输模式中时钟线与数据传输的简化

    探索SPI单线传输模式:时钟线与数据传输的简化之道 在当今的嵌入式系统和微控制器通信中,串行外设接口(SPI)因其高速、全双工和同步的特点而广受欢迎。然而,随着设备尺寸和复杂性的不断减
    的头像 发表于 05-28 18:26 1184次阅读

    CYW20829调试SPI通信时,遇到的两个问题求解

    使用函数cyhal_spi_slave_write向master发送数据时,没有等待master拉低片选取并生成时钟信号,导致接收数据异常。 尝试:使用Cy_GPIO_读取CS引脚,直到该引脚被拉低
    发表于 05-28 07:14

    STM8L001J3单片机SPI丛机通信数据异常怎么解决?

    最近在做一个项目,选择STM8L001J3外挂做数据处理,由于通信速度和准确性考虑,没有用STM8L001J3的I2C和USART接口,采用SPI做丛机和主机进行通信,意法的单片机以前没用过S
    发表于 04-24 07:55

    关于SMT32F103 Usart3同步模式与SPI1的通信问题求解

    本人使用一颗STM32F103的usart3同步模式与其SPI1进行通信,当CPOL+CPHA的配置为00、01、10、11时,出现一些异常现象: 00、01、10配置:TX上发数据时,CK无
    发表于 04-19 06:48

    请问STM32F405RGT6的SPI通信最高时钟频率是多少?

    STM32F405RGT6的SPI通信最高时钟频率是多少?
    发表于 03-15 08:23

    SPI双机通信中,时钟信号由主机提供,那么从机向主机发送数据时需要时钟信号吗?

    SPI双机通信中,时钟信号由主机提供,那么从机向主机发送数据时需要时钟信号吗?从机是怎样通知主机产生时钟信号的?
    发表于 03-14 06:49

    超详细的SPI原理和通信模式

    SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),
    发表于 02-29 12:33 4628次阅读
    超详细的<b class='flag-5'>SPI</b>原理和<b class='flag-5'>通信</b>模式

    SPI全双工模式下数据接收异常的一个原因

    前面给小伙伴讲过串口发送和接收异常的可能原因,今天我们讲下SPI全双工模式下数据接收异常的一个原因。
    的头像 发表于 01-23 09:31 1359次阅读
    <b class='flag-5'>SPI</b>全双工模式下数据接收<b class='flag-5'>异常</b>的一个原因