标题:
SPI无法收到数据问题,该如何调试?附MCU程序
[打印本页]
作者:
rctty
时间:
2022-10-28 11:44
标题:
SPI无法收到数据问题,该如何调试?附MCU程序
1.png
(15.06 KB, 下载次数: 32)
下载附件
2022-10-28 16:00 上传
逻辑分析仪的波形和解析是正确的,
2.png
(12.91 KB, 下载次数: 30)
下载附件
2022-10-28 16:00 上传
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线拉高后才会变成高电平,所以到单片机引脚的电平应该是对的
作者:
rctty
时间:
2022-10-28 11:47
补上逻辑分析仪和调试的图
作者:
yzwzfyz
时间:
2022-10-29 09:14
1、搞清SPI通讯原理。
2、有示波器更好了,可以证明,数据的确是正确地出现在数据线上了。
3、读通CPU芯片手册上,关于SPI的通讯章节。
4、去除程序中所有与SPI无关的部分(排除干扰)
5、检查程序有无准确地按照【3、】中的说明去做。
6、走单步调试。
作者:
rctty
时间:
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口出现变化
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1