You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM GCC编译STM32F4项目生成有效二进制文件失败求助

STM32F401RE(Cortex-M4)在CodeBlocks+arm-none-eabi GCC环境下运行异常求助

我正在将所有STM32项目迁移到CodeBlocks IDE + arm-none-eabi GCC编译器环境,流程为:用STM32CubeMX生成基础代码,再合并到包含CodeBlocks项目文件、.s启动文件、.ld链接脚本等的指定目录。目前Cortex-M0架构的项目编译运行完全正常,但针对STM32F401RE(Cortex-M4架构)的项目,编译生成的可执行文件运行时出现大量异常,怀疑是GCC调用方式或配置错误导致,特此求助。

当前配置

预定义宏:
STM32F401xE

编译器选项:
(注:目标架构为Cortex-M4,当前错误设置为cortex-m0)

  • -mcpu=cortex-m0
  • -ffunction-sections
  • -fdata-sections
  • -fno-common
  • -s

链接器选项:

  • -Wl,--gc-sections
  • -Wl,-Map,default/ggmeg.map
  • -T ./STM32F401RETx_FLASH.ld
  • -Wl,--print-memory-usage,--gc-sections,--relax

调试限制与步骤

使用旧版Segger Jlink作为SWD接口,无法进行实时调试。调试步骤为:在HAL_Init(); SystemClock_Config(); MX_GPIO_Init();之后将某GPIO置1并进入while(1){}循环,以此确认代码执行进度。

异常现象

  • 使用-mcpu=cortex-m4编译时,代码在到达调试步骤前崩溃;
  • 错误使用-mcpu=cortex-m0编译(目标为M4架构)时,情况稍好但仍存在问题;
  • 若在MX_GPIO_Init()内部末尾将GPIO置1,GPIO成功被置1,运行正常;
  • 若在MX_GPIO_Init()之后将GPIO置1,代码在到达该步骤前崩溃。

初步结论

MX_GPIO_Init()函数返回时发生崩溃,存在严重问题。

内容的提问来源于stack exchange,提问作者ggadde29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:57:16