ST意法半导体
直播中

凌流浪

9年用户 1063经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

STM32 touch 4.24.2生成代码,但是keil编译不通过怎么解决?

我是用STM32 touch 4.24.2 生成了一个 驱动STM32F469-disco的底层驱动,代码编译不过去?提示缺少文件,或者是打不开文件,但是我已经添加了文件?如下图所示:


大家有人遇到过类似的问题吗?这个touch gfx 软件生成的底层驱动代码?在生产时候需要特别主义的地方吗?



回帖(1)

敷衍作笑谈

2025-5-7 17:58:22

针对使用STM32 TouchGFX 4.24.2生成的代码在Keil中编译失败的问题,以下是逐步解决方案:




1. 检查文件路径和包含设置




  • 步骤1:验证头文件路径

    在Keil中,右键点击项目 -> Options for Target -> C/C++ -> Include Paths,确保以下路径已正确添加(根据实际项目路径调整):


    TouchGFX/generated/gui_generated/include
    TouchGFX/gui/include
    Drivers/STM32F4xx_HAL_Driver/Inc
    Drivers/CMSIS/Device/ST/STM32F4xx/Include
    Drivers/CMSIS/Include

    注意:如果路径中存在空格或特殊字符,建议将整个项目移动到纯英文路径下。




  • 步骤2:检查文件是否被添加进项目

    在Keil的Project面板中,展开文件组(如Application/UserDrivers),确认生成的.c/.cpp.h文件已包含在内。若缺失,右键点击对应文件组 -> Add Existing Files 手动添加。






2. 验证库依赖和版本



  • 步骤3:更新HAL/CMSIS库  

    • TouchGFX生成的代码可能依赖特定版本的STM32CubeF4库。  

    • 从ST官网下载最新的STM32CubeF4,替换项目中的Drivers/STM32F4xx_HAL_DriverDrivers/CMSIS文件夹。

    • 或通过STM32CubeMX重新生成代码:  

      1. 在CubeMX中配置外设和时钟。

      2. 生成代码时选择Copy only necessary library files以减少冗余。






3. 检查预定义宏



  • 步骤4:设置全局宏定义

    在Keil的 Options for Target -> C/C++ -> Preprocessor Symbols 中确保包含以下宏:
    STM32F469xx, USE_HAL_DRIVER

    如果使用FreeRTOS或其他中间件,添加对应的宏如USE_FREERTOS





4. 修复生成代码的路径问题



  • 步骤5:检查文件引用是否为相对路径  

    • 打开Keil项目文件(.uvprojx)用文本编辑器查看,确认文件路径是否为相对路径(如.TouchGFXgenerated...),而非绝对路径(如C:...)。

    • 若存在绝对路径,手动修改为相对路径,或重新生成项目。





5. 重新生成TouchGFX项目



  • 步骤6:清理并重新生成代码  

    1. 删除项目中的TouchGFX文件夹和generated文件夹。

    2. 重新打开TouchGFX Designer,确保目标硬件选择STM32F469-Disco

    3. 生成代码时勾选Generate for Keil MDK选项。

    4. 将新生成的代码复制到Keil项目目录,覆盖旧文件。





6. 验证启动文件和链接脚本




  • 步骤7:确认启动文件匹配MCU型号  



    • 检查Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm中是否存在startup_stm32f469xx.s

    • 在Keil的Startup文件组中添加此启动文件。




  • 步骤8:检查链接脚本  



    • 确保STM32F469NIHx_FLASH.ld(或.sct文件)存在于项目中,并与STM32F469的Flash/RAM大小匹配。






7. 其他常见问题




  • 问题:未安装Device Family Pack  



    • 打开Keil -> Pack Installer -> 搜索并安装STM32F4xx_DFP(确保版本与工程匹配)。




  • 问题:C++兼容性错误  



    • 在Keil的 Options for Target -> C/C++ -> Misc Controls 中添加:
      --cpp11

    • 确保所有C++源文件(如TouchGFX代码)的扩展名为.cpp而非.c






8. 参考错误信息针对性解决




  • 示例错误1:fatal error: 'touchgfx/hal/HAL.hpp' file not found

    原因:TouchGFX框架路径未包含。

    解决:在Include Paths中添加Middlewares/ST/touchgfx/include




  • 示例错误2:undefined reference to 'HAL_GPIO_Init'

    原因:未链接HAL库或宏USE_HAL_DRIVER未定义。

    解决:检查宏定义并确认stm32f4xx_hal_gpio.c已添加到项目。






最终建议


如果以上步骤仍无法解决,尝试以下操作:



  1. 在STM32CubeMX中重新生成代码,选择Generate Under Root(避免嵌套路径问题)。

  2. 使用STM32CubeIDE替代Keil,验证是否为IDE配置问题。

  3. ST社区或TouchGFX官方论坛搜索类似问题。


通过系统性地排查路径、依赖和配置,通常可以解决TouchGFX生成代码的编译问题。

举报

更多回帖

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