我正在为
STM32F407-disco 板上的 SPI Master 接收而苦苦挣扎。
我计划使用 SPI2 主接收接口连接到麦克风。
我设置了 DMA,但我总是进入 HAL_SPI_ErrorCallback()。
我使用 Nucleo-G474 设置了相同的设置,但它可以转到 HAL_SPI_RxCpltCallback()。
我对 G474 和 F407 使用了相同的代码。
- HAL_SPI_Receive_DMA(&hspi2, receive_data, 5);
- void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
- {
- printf("SPI Received!
"); - }
- void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
- {
- printf("TRANSFER_ERROR!
"); - }
我正在使用 CubeMX 来设置 F407,如下所示。
F407参数设置
F407 DMA 设置
我在 G474 上使用了相同的,如下所示。
G474参数设置
G474 DMA 设置
基本上一切都差不多。
调试时,我检查了 SPI 和 DMA 寄存器数据的 HAL_SPI_Receive_DMA() 之前和之后,如下所示。
HAL_SPI_Receive_DMA() 之前的 G474 DMA1
HAL_SPI_Receive_DMA() 之后的 G474 DMA1
HAL_SPI_Receive_DMA() 之前的 G474 SPI2
HAL_SPI_Receive_DMA() 之后的 G474 SPI2
F407 HAL_SPI_Receive_DMA() 之前的 DMA1
F407 HAL_SPI_Receive_DMA() 之后的 DMA1
知道我错过了什么吗?我正在使用 CubeIDE 1.7.0 和 STM32Cube_FW_F4_V1.26.2 和 STM32Cube_FW_G4_V1.4.0。
这是两个设备的 IOC 文件。