本帖最后由 内核558 于 2025-7-30 21:01 编辑
在使用SPI的DMA传输函数(HAL_SPI_Transmit_DMA())时需要注意什么?我正在用STM32F405的SPI接口控制一个屏幕。我试过"HAL_SPI_Transmit()"和"HAL_SPI_Transmit_IT()",都能正常工作。但当我尝试"HAL_SPI_Transmit_DMA()"时却不行。于是我写了以下代码来比较UART和SPI的DMA传输功能,发现"hspix.State"始终是"HAL_SPI_STATE_BUSY_TX",而UART却没有任何问题。
有人知道我的代码哪里出错了吗?或者使用"HAL_SPI_Transmit_DMA()"有什么需要特别注意的地方吗?
char debugInfo[] = "Debug Info\r\n"; while (1) {#if 1 // testing SPI transmitting function in DMA mode HAL_SPI_Transmit_DMA(&hspi4, (uint8_t *)debugInfo, strlen(debugInfo) + 1); while(hspi4.State != HAL_SPI_STATE_READY); // program will stuck here#else // testing UART transmitting function in DMA mode HAL_UART_Transmit_DMA(&huart1, (uint8_t *)debugInfo, strlen(debugInfo) + 1); while(huart1.gState != HAL_UART_STATE_READY || huart1.RxState != HAL_UART_STATE_READY); // program won't stuck#endif HAL_Delay(500); }
|
|