我是
STM32的新手。我正在将我的代码从 ATMega128 移植到 STM32 以加快速度。我必须将 W5500 连接到 SPI2 上的 STM32F103。
为了测试我编译后对STM32上SPI的理解,while循环中的一个小测试代码。
SPI_Write(S0_CR,CR_CLOSE); //#define S0_CR 0x0001, CR_CLOSE 0x10;
data_read = SPI_Read(S0_CR);
使用了以下子功能
void SPI_Write(int addr,char data)
{
SPI_选择
HAL_SPI_Transmit(&hspi2, ((addr & 0xFF00) >> 8), 1, 100);
HAL_SPI_Transmit(&hspi2, (addr & 0x00FF),1,100);
HAL_SPI_Transmit(&hspi2, (WRITE_OPCODE_S0),1,100);
HAL_SPI_Transmit(&hspi2, 数据, 1, 100);
SPI_取消选择
}
char SPI_Read(int 地址)
{
SPI_选择
HAL_SPI_Transmit(&hspi2,((地址 & 0xFF00) >> 8),1,100);
HAL_SPI_Transmit(&hspi2,(地址 & 0x00FF),1,100);
HAL_SPI_Transmit(&hspi2,(READ_OPCODE_S0),1,100);
HAL_SPI_Receive(&hspi2,spi_rec,1,100);
SPI_取消选择
返回 spi_rec;
}
data_read 中应为 0x10 (16),但结果为零。通过串口。尝试诊断
如果(错误!= HAL_OK)
当首行地址不为0x00时,SPI_Write作用于HAL_OK;
DSO 为 0x00 时不显示 SCK 脉冲,尽管 CS 变低。
同样在 SPI_Read 中;行——HAL_SPI_Receive(&hspi2,spi_rec,1,100); 在 UART 上给出 !=HAL_OK
我的下一步行动取决于消除这些疑虑。请请求帮助。