我遇到了一个奇怪的问题,希望得到帮助。
我想通过 UART 连接 PC。我尝试使用 DMA 但失败了。
以下是我对 DMA 的测试代码。
主要的 () {
来自 CubeMX 的初始化代码
HAL_UART_Transmit_DMA(&UART_Handle_Console, (uint8_t*)(listbuffer), len);
while ( HAL_UART_GetState(&UART_Handle_Console) != HAL_UART_STATE_READY);
HAL_UART_Transmit_DMA(&UART_Handle_Console, (uint8_t*)(listbuffer), len);
while ( HAL_UART_GetState(&UART_Handle_Console) != HAL_UART_STATE_READY);
vTaskStartScheduler();
}
把vTaskStartScheduler注释掉就OK了。
如果离开 vTaskStartScheduler,第一个 DMA 语句可以运行,但 PC 什么也得不到。第二个 DMA 语句无法运行,因为 HAL_UART_GetState(&UART_Handle_Console) 一直忙于 TX。
以上是我的测试代码。我的目的是使用二进制信号量来控制连接到 PC 的 UART DMA。