Keil环境下配置GCC编译器以开发STM32 C语言项目:探讨C语言特性及第23条指南
2025-10-11 来源:cnblogs
Keil 配置 GCC 编译器用于 STM32 和 C++23 特性
Keil 配置 GCC 编译器
安装工具链 Arm GNU Toolchain arm-none-eabi
创建Keil工程
前置步骤:获取依赖代码
方式1 使用STM32CubeMX辅助生成
方式2 Github
创建Keil工程
管理工程
添加分组Core/Src
添加分组Core/Startup
添加分组Drivers/STM32F1xx_HAL_Driver
设置GCC工具链(关键)
配置编译目标(重要)
配置编译生成的文件目录
配置C、C++选项
配置汇编选项
配置链接选项
添加函数
完成创建
测试工程
添加LED灯闪烁代码
设置调试器
完整的工程下载
Keil MDK (必需)
芯片支持包 Keil.STM32F1xx_DFP.2.4.0.pack (必需,请忽略版本,不要太旧即可)
STM32CubeMX(非必需)
STM32F103C8T6核心板(非必需)
任意烧录器,如DAPLink(非必需)
注意:下载页面会提供非常多的选项给你,这里一定不要选错,你需要注意的点:
1.选择Windows 不要选错其它操作系统的类型,除非你的Keil可以在Mac或者Linux上运行
2.选择(mingw-w64-x86_64) 而不是 (mingw-w64-i686),这里是你电脑的CPU架构类型,选64位可以更好利用CPU资源,提高编译速度
3.选择AArch32,因为STM32是32位Cortex M架构

步骤一 在Keil软件中创建新工程

步骤二 命名后保存到前置步骤中,你放HAL库代码的地方
步骤三 选择芯片

步骤四 这个窗口先忽略,点OK关掉它
这里按照文件夹中的代码来添加分组即可
这里双击1把分组改名为Core/Src

选择对应的文件,按Ctrl+A全选,然后Add添加就可以了
这里第三步选择我们之前安装的GCC工具链目录(arm-none-eabi)

预定义宏 Defines
头文件包含路径 Include Path(参考文件夹目录自行完成添加)
参考设置:编译器选项 Misc Contros
传递给汇编编译器的选项 Misc Contros
选择链接脚本
传递给链接器的选项
Keil 配置 GCC 编译器
我这里使用STM32F103C8T6演示
如果你想复现本文过程,你需要准备以下清单:
安装工具链 Arm GNU Toolchain arm-none-eabi
下载地址:
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
我这里选择可执行文件exe安装,当然你也可以选择下载压缩包zip直接解压到你想要的目录
创建Keil工程
前置步骤:获取依赖代码
我这里提供两种方式
方式1 使用STM32CubeMX辅助生成
配置好时钟、烧录方式以及你所需的功能之后
选择 STM32CubeIDE 或者 CMake 生成代码
你会问,Keil工程为什么不直接选MDK-ARM?
因为我们需要汇编启动文件startup_stm32f103c8tx.s以及链接脚本STM32F103C8TX_FLASH.ld
方式2 Github
Github获取HAL库代码
https://github.com/STMicroelectronics/stm32f1xx-hal-driver
创建Keil工程
管理工程

添加分组Core/Src
添加分组Core/Startup
启动汇编
这里记得选择文件类型

添加分组Drivers/STM32F1xx_HAL_Driver
这里和分组Core/Src的添加步骤一致,进入对应的文件目录后按Ctrl+A全选添加即可
设置GCC工具链(关键)
配置编译目标(重要)

配置编译生成的文件目录

配置C、C++选项

从上到下分别添加
USE_HAL_DRIVER,STM32F103xB
.CoreInc
.DriversSTM32F1xx_HAL_DriverInc
.DriversSTM32F1xx_HAL_DriverIncLegacy
.DriversCMSISDeviceSTSTM32F1xxInclude;
.DriversCMSISInclude;
如果使用了FreeTROS:
.MiddlewaresThird_PartyFreeRTOSSourceinclude
.Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2
.MiddlewaresThird_PartyFreeRTOSSourceportableGCCARM_CM3
-mcpu=cortex-m3 -mthumb -mthumb-interwork -ffunction-sections -fdata-sections -fno-common -fmessage-length=0 -specs=nosys.specs -Wl,-nostartfiles
配置汇编选项

-mcpu=cortex-m3 -mthumb -mthumb-interwork
配置链接选项

.STM32F103C8TX_FLASH.ld
. 表示当前目录,即 与Keil工程文件处于同一目录下的 STM32F103C8TX_FLASH.ld 文件
-Wl,-gc-sections,–print-memory-usage
添加函数
在任意C文件中添加以下函数:
void _init(void) {}
如果是C++文件,需要增加 extern “C” 修饰:
extern “C” void _init(void) {}
完成创建
恭喜你,到此Keil项目已创建完毕,此时你编译会得到下图结果:
测试工程
添加LED灯闪烁代码
在main函数中添加以下代码测试板载LED灯能否工作
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
while(1) (
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(200);
)设置调试器
我这里选择DAPLink,根据你手上的调试工具选择即可
编译并烧录后,可以看到板载LED灯在闪烁。
- STM32的项目创建——基于Keil MDK环境
- 使用Makefile在Windows环境下编译STM32F103C8T6标准库工程,脱离Keil的指南
- STM32 HAL开发环境搭建指南:Keil MDK-ARM、STM32F1xx DFP与ST-Link工具链配置详解,结合STM32CubeMX使
- stm32单片机在Keil环境下定义的变量都存储到哪去了?(以STM32f1系列为例)
- 《SLAM导航机器人基础》第三章:单片机与STM32:单片机概述和Keil开发环境配置
- freeRTOS V10.0.1移植到STM32F407标准库 - 环境Keil5
- 《RT-Thread开发笔记》 第1章 RT-Thread 开发环境搭建 (Keil+env)
- 【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(1)使用Keil开发GD32
- STM32 FreeRTOS Keil环境搭建
- GCC编译器原理(二)------编译原理一:ELF文件(1)
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策




