ST意法半导体
直播中

刘高

11年用户 1021经验值
擅长:嵌入式技术
私信 关注
[问答]

在CubeMX代码生成中,DMA传输不起作用怎么解决?

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 的调用。







回帖(1)

袁丹

2022-12-14 14:35:33
当使用 DMA 时,MX_DMA_Init 始终在任何其他 HAL_***_Init之前被调用 (其中 *** 是硬件依赖于 DMA 初始化代码的任何外设)。
在之前的 STM32CubeMX 版本 6.3.0 ( STM32CubeIDE 版本:1.7.0  中检测到回归, 生成错误的初始化函数顺序,并且似乎已针对某些用例进行了更正。
例如,从头开始一个项目并一次性配置 I2S 和 DMA(在配置 I2S DMA 请求之前不切换到项目管理器视图),MX_DMA_Init 函数调用将处于其正确位置。
举报

更多回帖

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