ST意法半导体
直播中

lalajie

8年用户 1216经验值
擅长:模拟技术 存储技术
私信 关注
[问答]

FreeRTOS中的HAL_UART_Transmit_DMA问题如何处理?

我遇到了一个奇怪的问题,希望得到帮助。
我想通过 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。









回帖(1)

殷晓婷

2023-1-9 10:57:26
缩小堆大小后现在可以了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分