STM32F767ZI的STM32CubeIDE代码生成(版本1.7.0更新到1.8.0)中的CubeMX代码生成存在bug。(STM32Cube FW_F7 V1.16.2)
该错误是通过调试一个不工作的自动生成的代码发现的,该代码使用 DMA 循环缓冲区从 uart 读取。
在自动生成的硬件初始化代码中,函数调用的顺序是:
- MX_GPIO_Init();
- MX_USART3_UART_Init();
- MX_DMA_Init();
因为 DMA_Init 启动了 dma 的时钟,所以在初始化使用 DMA 的 uart 时,dma 没有计时。
这会导致 DMA 传输不起作用,并且会触发 uart 溢出错误,因为没有从 uart 外设读取任何内容。
作为一项工作,您可以编写:
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
在具有 MX 初始化函数的块之前,或者您可以交换对 dma init 和 uart init 的调用。