STM32使用SPI通信时的一些常见问题及解决方法(主,从)

这篇具有很好参考价值的文章主要介绍了STM32使用SPI通信时的一些常见问题及解决方法(主,从)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        最近在做一个多MCU的项目时,MCU之间的数据传输使用了SPI通信,在做从机时遇到了一些 “疑难杂症”,研究了半天,总算是把故障排除了,就又总结了一下SPI常遇到的几种问题写出来整理一下。

目录

一、SPI简介:

 二、常见问题:

三、疑难杂症:

Q1:使用的HAL库,先开从机,然后再给主机上电,通信正常,但是同时上电,即便是给主机加了延时都通信异常。

Q2:使用的DMA收发,单独测试一切正常,但是只要跟其他DMA同时使用就死机

四、SPI的稳定性优化:


一、SPI简介:

        SPI是一种高速,全双工的串行通信协议,由Motorola首先提出,其通信速率可轻松超过10Mbps

(详见文章:STM32初学入门笔记(4):一文解析常见通信协议(USATR/UART,SPI,IIC))

 二、常见问题:

        从结果来看,常见的问题可大致分为两种:

        1:主从完全无法通信

        2:从机接收到的数据乱码,移位等数据异常

        第一种情况多是由硬件导致的,如SCK接到了MOSI,或者主从MOSI和MISO反接了(总之就是线没接对),也有可能是因为初始化时没有开启SPI的时钟,或是没有配置IO口等软件问题。

        其中我们经常遇到的是第二种,导致第二种的原因通常有:

        1、硬错误:即硬件连接出现的错误,如接触不良,接线过长,噪声过大等,常见于数据乱码,移位的问题中。

        2、软错误:若发生数据移位,且确定硬件无误,则优先排查主从机的数据长度是否一致,如主机发送的数据为16bits,从机接收的为8bits,如果从机项目使用了多个中断,应保证DMA的优先级最高,以保证能够完整获取数据包。此外,如果发送的是数组,还有可能数据内的数据出现错位,这种情况则应检查主从机数据包大小是否一致,如果使用的是DMA接收,则还有可能是因为在DMA传输完成中断中再次开启DMA时设置的数据包大小异常(总之就是数据包大小的问题)。数据乱码在本质上还是发生了数据移位,导致数据异常无法识别,从而引起乱码,使用移位的排查方法即可,这里不再重复。

三、疑难杂症:

Q1:使用的HAL库,先开从机,然后再给主机上电,通信正常,但是同时上电,即便是给主机加了延时都通信异常。

A:首先应排查硬件上的问题,如芯片间的去耦电容是否正常,电源是否稳定,如果确定了硬件没有问题,就使用硬件片选试试,非常稳定,主从同时上电即使主机不加延时也不会引起通信异常。具体原因不详,个人猜测应该是HAL库的问题

Q2:使用的DMA收发,单独测试一切正常,但是只要跟其他DMA同时使用就死机

A: 尝试增大堆栈,STM32死机很大一部分原因是堆栈溢出(DMA是要用到堆栈的)

四、SPI的稳定性优化:

1,通信速率:主机的通信速率尽量不要超过从机SPI的最大速率

2,CRC校验:如果工作环境较为恶劣,有较大的噪声干扰,推荐开启CRC校验

3,硬件片选虽然从理论上讲,只有主机和从机片选开不开无所谓,但是经过向多名开发者验证和我的多次测试,发现开启硬件片选可以大大提升SPI通信稳定性,甚至可以直接解决疑难杂症一文章来源地址https://www.toymoban.com/news/detail-832419.html

到了这里,关于STM32使用SPI通信时的一些常见问题及解决方法(主,从)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【【STM32-SPI通信协议】】

    STM32-SPI通信协议 •SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 •四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) •同步,全双工 •支持总线挂载多设备(一主多从) 既然是同步的,我们就会发

    2024年02月12日
    浏览(43)
  • STM32开发(十)STM32F103 通信 —— SPI通信编程详解

    👈《上一篇》  🏡《主目录》  👉《下一篇》 本实验通过STM32F103 的SPI功能,实现对W25Q64JVSSIQ (Flash芯片)芯片擦除,读数据,写数据等操作。 本实验内容知识点: 1、SPI通信协议介绍 2、

    2024年02月07日
    浏览(50)
  • 【STM32】学习笔记-SPI通信

    SPI通信(Serial Peripheral Interface)是一种同步的串行通信协议,用于在微控制器、传感器、存储器、数字信号处理器等之间进行通信。SPI通信协议需要使用4个线路进行通信:时钟线(SCLK)、主输入/主输出线(MISO)、主输出/主输入线(MOSI)和片选线(SS)。其中,SCLK由主设备提供,用于

    2024年02月09日
    浏览(45)
  • STM32-SPI通信(W25Q64芯片简介,使用SPI读写W25Q64存储器芯片)

    ​  SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)。 ​SPI通信具有以下特点: 同步,全双工; 支持总线挂载多设备(SPI仅支持一主多从); 在不

    2024年02月08日
    浏览(49)
  • 入门stm32:STM32hal库实现ESP8266与手机通信(不定长数据收发和ESP8266使用的一些问题)

    目录 前言 一、stm32cubeMX的串口配置 二、空闲中断+dma接收 三、ESP8266.c和ESP8266.h ESP8266.h ESP8266.c 注意事项 四、与手机通信例程 步骤:  例程代码main.c 运行结果 五、相关问题 总结 相关的app和源码         前提: 1.掌握串口通信和ESP8266的使用方法 串口通信:单片机串口通信

    2024年02月04日
    浏览(93)
  • STM32F429IGT6使用CubeMX配置SPI通信(W25Q256芯片)

    1、硬件电路 需要系统性的看一下W25Q256芯片手册  2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置SPI 4、生成工程配置   5、读写流程图 5、相关代码 6、实验现象 没有问题!

    2024年02月12日
    浏览(47)
  • STM32硬件SPI通信详解-------附代码

    1.STM32内部集成了 硬件SPI收发电路 ,可以由 硬件自动执行时钟生成 、 数据收发 等功能, 减轻CPU的负担 2.可配置 8位/16位数据帧 、 高位先行/低位先行 3. 时钟频率 : fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 4.支持 多主机模型 、 主或从操作 5.可精简为 半双工/单工通信 6. 支持DMA 7. 兼

    2024年04月27日
    浏览(46)
  • STM32 HAL库 SPI主从双机通信

    最近因为项目需求,需要在一块板子内实现一个主机和五个从机的通信; 主机平台选用的是STM32F407VGT6,从机平台选用的是STM32F103C8T6;通信总线选用的是SPI总线。在构想是觉得采用SPI进行主从通信会很简单,但在实际开发的过程中,各种坑,通信时而正常时而混乱。不过在不

    2024年01月17日
    浏览(40)
  • STM32与ESP32的硬件SPI通信(个人学习记录)

            STM32F103ZET6作为主机,使用SPI2,ESP32S2作为从机,进行SPI双向通信;硬件接线如下:                                                 主机                        从机 CS                                           PB12 ——————  14 MOSI         

    2024年02月07日
    浏览(42)
  • 基于SPI实现stm32与fpga通信(一)

    SPI通信协议有以下4种模式: 模式0:时钟极性为0,时钟相位为0,数据在时钟下降沿捕获,数据在时钟上升沿改变。 模式1:时钟极性为0,时钟相位为1,数据在时钟上升沿捕获,数据在时钟下降沿改变。 模式2:时钟极性为1,时钟相位为0,数据在时钟上升沿捕获,数据在时钟

    2024年04月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包