【问题标题】:Why does the sequence of init calls matter in STM32CubeIDE?为什么 init 调用的顺序在 STM32CubeIDE 中很重要?
【发布时间】:2021-10-29 10:36:04
【问题描述】:

使用 CubeIDE 1.7.0 为使用 DMA 的 Nucleo-H723ZG 板编写一个简单的 UART 程序。发出 UART DMA 接收调用,等待来自 Mac OSX 主机 (CoolTerm) 上的串行端口应用程序的输入。回调回显接收到的数据。

当向板子发送一条短信时,除了零之外什么都没有回显。

我注意到 CubeMX 在 UART 初始化调用 (MX_USARTx_UART_Init()) 之后生成了 DMA 初始化调用 (MX_DMA_Init())。

通过颠倒这两个调用的顺序,代码可以完美运行!

这是我的错误,设置中遗漏了什么,还是 MX 错误?

【问题讨论】:

    标签: stm32cubeide


    【解决方案1】:

    此问题仅影响 MacOSX Big Sur 上的 CubeIDE 1.7.0 用户。在 Windows 下没有问题,代码生成器正确地将 DMA 初始化调用定位在 USART 之前。

    使用 MX 配置器时,外围设备初始化调用按输入的顺序生成。设置 USART 以使用 DMA 执行数据传输时,需要生成两个外设的初始化:USART 和 DMA 设备。由于 USART 是选择的两个外设中的第一个,因此 USART 初始化调用在 DMA 初始化调用之前生成。

    但是,当时我不知道,USART 需要设置一个 DMA 寄存器,该寄存器必须启用其时钟。因此,DMA 初始化必须在 USART 初始化之前完成。这就是我的问题。

    了解这一点后,在 MX 项目管理器选项卡中,高级设置选项卡提供了重新排列这些 init 调用顺序的选项,一切顺利!

    所以这是一个错误。但是,使用带有 USART DMA 的 Nucleo-H743ZI2 不会出现乱序初始化问题。到目前为止,该错误仅限于 Nucleo-H723ZG!

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多