找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1493|回复: 3
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主

逻辑分析仪的波形和解析是正确的,


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线拉高后才会变成高电平,所以到单片机引脚的电平应该是对的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 单片机教程网

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