STM32H7 SPI传输始终返回0

时间:2018-08-14 17:47:53

标签: spi cmsis

STM32H734I-Eval板上的

SPI始终返回0。此代码在STM32F4板上正常工作。我正在使用CMSIS SPI驱动程序,也测试了低级HAL_SPI函数,在两种情况下HAL_SPI_TransmitReceive_IT都会在RxBuffer中返回全0并返回而没有任何错误消息。 这是我的清单:

  1. 硬件GPIO,它们都按预期工作。
  2. NSS信号,工作正常
  3. 由CubeMX生成的低级别HAL_SPI_MspInit函数看起来不错,并且所有引脚均按预期进行了初始化。
  4. SPI初始化不返回错误(无论是CMSIS驱动程序还是HAL_SPI_Init())

这是使用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生成的部分。

0 个答案:

没有答案