STM32G051K8U7项目切换Arm Compiler v6后启动文件编译报错求助
问题描述
在Keil uVision IDE中使用Arm Compiler v6.20.1创建STM32G051K8U7微控制器项目,初始编译、调试均正常。切换至Arm Compiler v5.06编译也无问题,但切回v6.20.1及所有v6.2x版本时,项目无法编译,启动文件startup_stm32g051xx.s出现247个错误,项目目录文件未修改,两台不同MDK版本的电脑均出现此问题。
编译输出示例:
Build started: Project: ICFW70102 *** Using Compiler 'V6.20.1', folder: 'C:\Keil_v5\ARM\ARMCLANG-v6.20.1\Bin' Build target 'STM32G051K8Ux' compiling ICFW70102_it.c... compiling main.c... RTE/Device/STM32G051K8Ux/startup_stm32g051xx.s(1): error: unexpected token at start of statement ;****************************************************************************** ^ ...(省略重复错误) ".\Objects\ICFW70102.axf" - 247 Error(s), 0 Warning(s). Target not created. Build Time Elapsed: 00:00:02
解决方法
- 检查启动文件的编译属性:右键项目中的
startup_stm32g051xx.s文件,选择「Options for File 'startup_stm32g051xx.s'」,在弹出窗口的Assembler选项卡下,确认未勾选「Assemble for ARM Compiler 5」。Arm Compiler v6采用clang汇编语法,强制用v5规则编译会触发大量语法错误。 - 替换适配v6的启动文件:Arm Compiler v5与v6的汇编语法存在差异(如注释、伪指令格式),可通过STM32CubeMX重新生成项目,在「Project Manager」的「Toolchain/IDE」中指定编译器为「MDK-ARM v5」并选择「Arm Compiler v6」,生成适配v6的启动文件后替换原文件。
- 重置项目编译器全局设置:进入项目的「Options for Target」窗口,在「Target」选项卡确认「Arm Compiler」选择v6.x版本;切换到「Asm」选项卡,移除所有v5特有的宏定义或编译选项,确保参数适配v6。
- 清理残留文件后重新构建:删除项目目录下的
Objects和Listings文件夹,点击Keil工具栏的「Rebuild」按钮重新编译,避免切换编译器后残留的中间文件干扰编译流程。
内容的提问来源于stack exchange,提问作者RytisBe
相关产品推荐
相关产品推荐

