如何快速确定STM32开发板对应的arm-none-eabi-gcc编译参数
关于STM32 ARM GCC编译参数的常见问题解答
一、示例Makefile中核心编译参数含义
你提到的架构相关编译参数含义如下:
-mthumb:指定使用ARM Thumb指令集,Cortex-M系列内核仅支持Thumb指令集,属于STM32开发必加参数-mlittle-endian:指定使用小端字节序,STM32全系列均为小端架构,所有型号通用-mcpu=cortex-m4:指定目标CPU内核型号,属于核心参数,不同内核的芯片需要对应修改,比如STM32F10x用的是Cortex-M3内核,这里就要改成-mcpu=cortex-m3-mthumb-interwork:支持Thumb和ARM指令集混合调用,Cortex-M系列不需要该配置也能正常运行,加了不会影响编译结果-mfloat-abi=hard:指定浮点运算的应用二进制接口,内核带FPU(浮点运算单元)时选hard可以获得最高的浮点运算性能,没有FPU的型号要改成soft,比如STM32F10x没有FPU,这里就要替换为-mfloat-abi=soft-mfpu=fpv4-sp-d16:指定FPU的硬件型号,仅内核带FPU时需要添加,Cortex-M4F内核搭载的就是fpv4-sp-d16类型的FPU,没有FPU的型号直接删除该参数即可-Tstm32_flash.ld:指定链接脚本,脚本内定义了目标芯片的Flash、RAM的地址映射和容量,不同存储容量的芯片需要对应修改该文件
二、特定型号编译参数确定方法
你可以按照以下步骤确认对应型号的编译参数:
- 查目标芯片的硬件规格:打开ST官方的芯片datasheet,在概述页可以直接看到内核型号(比如Cortex-M0/M0+/M3/M4/M7等)以及是否搭载FPU
- 确认对应内核的GCC参数:执行
arm-none-eabi-gcc --help=target命令,可以看到当前版本arm gcc支持的所有-mcpu、-mfpu可选值,匹配你芯片的内核参数即可 - 调整链接脚本:根据你芯片的实际Flash、RAM容量,修改链接脚本中对应的存储地址和容量数值,比如STM32F103C8T6为64K Flash、20K RAM,就要把链接脚本中Flash长度设为64K,RAM长度设为20K
三、不同型号的参数通用性说明
- 内核架构相同的芯片,内核相关编译参数完全通用:比如所有Cortex-M3内核的STM32(F1系列、L1系列等),
-mcpu=cortex-m3、-mfloat-abi=soft这些参数不需要修改 - 仅链接脚本、头文件路径、启动文件需要随型号调整:不同存储容量的芯片修改链接脚本即可,不同系列的芯片替换对应固件库的头文件和启动文件即可,内核相关参数不需要改动
四、STM32F10x的参考编译配置
针对STM32F10x系列的核心CFLAGS可以参考以下配置:
CFLAGS = -g -O2 -Wall -Tstm32f10x_flash.ld CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m3 CFLAGS += -mfloat-abi=soft CFLAGS += -I.
内容的提问来源于stack exchange,提问作者LunarEclipse
相关产品推荐
相关产品推荐

