我使用以下代码在STM32F103CBT6,可以正常读出W25Q128的id。就是同样的读ID代码,同样的hal库,同样的硬件,但是在STM32G070CBT6就无法读出,显示FFFFFF.
STM32CubeMx,也是同样的配置。还有我尝试过软件SPI,也能读出ID.实在找不到哪里有问题了,求助大佬们!🚀️
 
uint32_t W25Q128_ReadID(void)
{
uint8_t cmd = 0x9F; // JEDEC ID指令
uint8_t rcv_data[3] = {0};
uint32_t id = 0;
// 拉低CS选通芯片
HAL_GPIO_WritePin(W25Q128_CS_GPIO_Port, W25Q128_CS_Pin, GPIO_PIN_RESET);
// 发送读ID指令
if (HAL_SPI_Transmit(&hspi2, &cmd, 1, 100) != HAL_OK)
{
// 传输错误处理(可选:添加日志或错误标志)
HAL_GPIO_WritePin(W25Q128_CS_GPIO_Port, W25Q128_CS_Pin, GPIO_PIN_SET);
return 0;
}
// 接收3字节ID数据(HAL_SPI_Receive会发送哑元数据0xFF生成时钟)
if (HAL_SPI_Receive(&hspi2, rcv_data, 3, 100) != HAL_OK)
{
HAL_GPIO_WritePin(W25Q128_CS_GPIO_Port, W25Q128_CS_Pin, GPIO_PIN_SET);
return 0;
}
// 释放CS引脚
HAL_GPIO_WritePin(W25Q128_CS_GPIO_Port, W25Q128_CS_Pin, GPIO_PIN_SET);
// 组合ID:Manufacturer(ID0) + Device(ID1 << 8 | ID2)
id = (rcv_data[0] << 16) | (rcv_data[1] << 8) | rcv_data[2];
return id;
}
|
配置方面保证跟其它系列的配置一样,无非SPI模式的选择。
硬件连接的话,检查是否接对了、然后是否接好了。
有时候一些硬件问题会比较直观反映出来。
命令不长,也可以用示波器看一下。
是的,我和其他系列配置的一模一样,硬件也连接的没有错,因为用软件模拟SPI,就能读出,然后STM32CubeMx也是配置的一模一样。是否是STM32 HAL库有问题呀??确实找不到什么原因了
还有就是我发现MISO 线在STMG070是配置的输出模式。是否会影响
没有逻辑分析仪,哥。就是配置的一模一样的HAL库,也是同样的代码。在STM32F103上就能读出W25Q128的ID.
这是硬件连接。检查十几遍了。没有问题。
[md]MISO线在STMG070是配置的输出模式,这个肯定不行啊
[md]你不是说SPI配置跟其它系列一样吗? 一般来讲,复用功能脚多配置成了PP模式,你手动将MISO配置输入模式也是可以的。
保证MOSI MISO 还有 片选脚别接错了,片选脚能起作用。
用示波器看一下几个脚的信号,就知道配置是否正常。
否则检查代码,很难看出外部是否有异常。
HAL库自动配置成复用推挽输出的,然后我手动配置成输入模式,也是没有反应