找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 2107|回复: 3
收起左侧

SPI无法收到数据问题,该如何调试?附MCU程序

[复制链接]
ID:1045628 发表于 2022-10-28 11:44 | 显示全部楼层 |阅读模式
1.png
逻辑分析仪的波形和解析是正确的,

2.png
MCU程序:
但是调试的DR寄存器一直是FF,SPI接收函数按道理应该没有问题
uint8 SPI_SendByte(SPI_TypeDef * SPIx, uint8 byte)
{
          while (SPI_I2S_GetFlagStatus(SPIx,SPI_I2S_FLAG_TXE) == RESET);
          SPI_I2S_SendData(SPIx, byte);

          while (SPI_I2S_GetFlagStatus(SPIx,SPI_I2S_FLAG_RXNE) == RESET);
          return SPI_I2S_ReceiveData(SPIx); // 获取接收寄存器中的数据
}

当我在发送结束拉高CS线前打个断点,能看到MISO对应的IO脚是低电平,CS线拉高后才会变成高电平,所以到单片机引脚的电平应该是对的
回复

举报

ID:1045628 发表于 2022-10-28 11:47 | 显示全部楼层
补上逻辑分析仪和调试的图
回复

举报

ID:123289 发表于 2022-10-29 09:14 | 显示全部楼层
1、搞清SPI通讯原理。
2、有示波器更好了,可以证明,数据的确是正确地出现在数据线上了。
3、读通CPU芯片手册上,关于SPI的通讯章节。
4、去除程序中所有与SPI无关的部分(排除干扰)
5、检查程序有无准确地按照【3、】中的说明去做。
6、走单步调试。
回复

举报

ID:1045628 发表于 2022-10-31 08:54 | 显示全部楼层
解决了,
因为我初始化了好几个SPI,且标准包程序宏定义有迷惑性
#define GPIO_AF_SPI4         ((uint8_t)0x05)
#define GPIO_AF_SPI5         ((uint8_t)0x05)
这是AF5,SPI5实际上是AF6,
#define GPIO_AF6_SPI5         ((uint8_t)0x06)
是因为SPI5初始化时把SPI4的初始化覆盖了一部分,导致SPI4MISO口出现变化
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表