我已经开始了一个新项目,使用的是我昨天下载的 STM32CubeIDE,并且检查更新说我是最新的。漂亮而简单的 LED 闪光灯和 UART 上的 Hello world。使用 STM32H753II。
我正在使用 USART2,设置为异步。我尝试过使用和不使用 DMA。禁止我的闪烁代码,一切都是由 CubeIDE 自动生成的。
在所有情况下,程序都会在 MX_USART2_UART_Init() 内部的 HAL_UART_Init(&huart2) 调用中陷入无限循环。
深入挖掘,我发现它卡在 HAL_UART_Init(&huart2) 中的位置是:
return (UART_CheckIdleState(huart));
里面是它的调用:
/* Wait until TEACK flag is set */
if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
{
/* Timeout occurred */
return HAL_TIMEOUT;
}
TEACK 标志似乎永远不会被重置。令人困惑的是,注释说的是 SET,但函数调用说的是 RESET。我不确定这是否是问题所在。
如果有人能指出我的设置出错的方向,我将不胜感激。我以为建立一个新项目来做一个“hello world”会很简单!
笔记; 我熟悉 STM32,但正在考虑将我的项目从 TrueStudio 转移过来。
链接到我已将项目作为附件上传的 STM32 论坛上的问题。
编辑; 我现在也尝试了 UART4 和 UART8,同样的问题仍然存在。与 IDE 中的 UART_printf 示例项目类似。