SPI始终返回0。此代码在STM32F4板上正常工作。我正在使用CMSIS SPI驱动程序,也测试了低级HAL_SPI函数,在两种情况下HAL_SPI_TransmitReceive_IT都会在RxBuffer中返回全0并返回而没有任何错误消息。 这是我的清单:
这是使用CMSIS驱动程序的初始化部分
uint32_t ret = SUCCESS;
SPIdrv = &Driver_SPI2;
/* Initialize the SPI driver */
ret = SPIdrv->Initialize(spi_callback);
/* Power up the SPI peripheral */
ret |= SPIdrv->PowerControl(ARM_POWER_FULL);
/* Configure the SPI to Master, 8-bit mode */
// SCLK will set to 4 MHz
ret |= SPIdrv->Control(ARM_SPI_MODE_MASTER | ARM_SPI_CPOL0_CPHA0 | ARM_SPI_MSB_LSB | ARM_SPI_SS_MASTER_SW | ARM_SPI_DATA_BITS(8),4000000);
/* SS line = INACTIVE = HIGH */
ret |= SPIdrv->Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_ACTIVE);
mdelay(100);
ret |= SPIdrv->Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_INACTIVE);
当我将spi buadrate增加到100 MHz时,会出现其他问题,在这种情况下,初始化返回OK,但传输始终返回HAL_BUSY,理论上我应该能够将100MHz与MCLK在400Mhz和BaudRatePrescaler = 4一起使用。
我强调一个事实,该代码在STM32F4板上运行良好,只有区别是CubeMX HAL_STM32H7库而不是HAL_STM32F4生成的部分。