如何重新排序CubeID自动生成的外设初始化代码

问题描述 投票:0回答:1

我用的是STM32CubeIDE v1.12.1(lasted version),STM提供的IDE。 最近我开始了一个新项目,它是一个使用液晶显示器的产品。

我正在添加外部 SDRAM 并将其连接到 FMC 并将其与 LTDC 一起使用。 在先添加其他外围设备并最后实现与 LCD 相关的设备驱动程序时,我们遇到了一个问题,即设备在上电时不断进入硬故障。

在分析原因时,发现IDE自动生成的设备初始化代码部分如下

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_QUADSPI_Init();
  MX_SPI1_Init();
  MX_I2C1_Init();
  MX_DMA2D_Init();
  MX_I2C2_Init();
  MX_RTC_Init();
  MX_USART1_UART_Init();
  MX_USART6_UART_Init();
  MX_LTDC_Init();
  MX_FMC_Init();
  MX_SPI6_Init();
  MX_SDMMC1_SD_Init();
  MX_FATFS_Init();
  /* USER CODE BEGIN 2 */

我怀疑是 LCD 的初始化代码太落后(特别是 FMC 初始化函数)导致了问题,所以我修改了如下顺序。

  MX_GPIO_Init();
  MX_DMA_Init();
  MX_FMC_Init();
  MX_QUADSPI_Init();
  MX_SPI1_Init();
  MX_SPI6_Init();
  MX_I2C1_Init();
  MX_I2C2_Init();
  MX_USART1_UART_Init();
  MX_USART6_UART_Init();
  MX_LTDC_Init();
  MX_DMA2D_Init();
  MX_SDMMC1_SD_Init();
  MX_FATFS_Init();
  MX_RTC_Init();

问题从此消失了! 原因不明,但我们最好的猜测是在初始化序列期间发生了严重错误。

问题是每次 CubeID 自动生成代码时,初始化代码的顺序都被还原了。我暂时禁用了使用预处理器自动生成的代码,如下所示,但这是一个临时措施。

    /**
     *          MX_FMC_Init() positioning problem
     *          this function must be immediately after MX_DMA_Init().
     */
    MX_GPIO_Init();
    MX_DMA_Init();
    MX_FMC_Init();
    MX_QUADSPI_Init();
    MX_SPI1_Init();
    MX_SPI6_Init();
    MX_I2C1_Init();
    MX_I2C2_Init();
    MX_USART1_UART_Init();
    MX_USART6_UART_Init();
    MX_LTDC_Init();
    MX_DMA2D_Init();
    MX_SDMMC1_SD_Init();
    MX_FATFS_Init();
    MX_RTC_Init();
#if 0
    /* USER CODE END SysInit */
    
    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    MX_DMA_Init();
    MX_QUADSPI_Init();
    MX_SPI1_Init();
    MX_I2C1_Init();
    MX_DMA2D_Init();
    MX_I2C2_Init();
    MX_RTC_Init();
    MX_USART1_UART_Init();
    MX_USART6_UART_Init();
    MX_LTDC_Init();
    MX_FMC_Init();
    MX_SPI6_Init();
    MX_SDMMC1_SD_Init();
    MX_FATFS_Init();
    /* USER CODE BEGIN 2 */
#endif

有什么办法可以指定CubeIDE自动生成的初始化代码的顺序吗?

initialization stm32 auto-generate stm32cubeide
1个回答
1
投票

是的,有办法。

在 STM32CubIDE 中,打开您的 .ioc 文件,单击顶部的项目管理器选项卡,然后单击左侧的高级设置框。

这将为您提供生成的函数调用列表。每个人都有一个与之关联的等级,这决定了它们被调用的顺序。

根据需要分配 Rank 字段,以确保您的外围设备按照您需要的顺序进行初始化。

© www.soinside.com 2019 - 2024. All rights reserved.