Keil环境下配置GCC编译器以开发STM32 C语言项目:探讨C语言特性及第23条指南
Keil 配置 GCC 编译器用于 STM32 和 C++23 特性
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工程


步骤四 这个窗口先忽略,点OK关掉它

管理工程
添加分组Core/Src

选择对应的文件,按Ctrl+A全选,然后Add添加就可以了

添加分组Core/Startup
启动汇编
这里记得选择文件类型
添加分组Drivers/STM32F1xx_HAL_Driver
这里和分组Core/Src的添加步骤一致,进入对应的文件目录后按Ctrl+A全选添加即可
设置GCC工具链(关键)

配置编译目标(重要)
配置编译生成的文件目录
配置C、C++选项
从上到下分别添加
USE_HAL_DRIVER,STM32F103xB
参考设置:
.\Core\Inc
.\Drivers\STM32F1xx_HAL_Driver\Inc
.\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy
.\Drivers\CMSIS\Device\ST\STM32F1xx\Include;
.\Drivers\CMSIS\Include;
如果使用了FreeTROS:
.\Middlewares\Third_Party\FreeRTOS\Source\include
.\Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2
.\Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_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灯在闪烁。
完整的工程下载
我这里提供了完整的工程。点这里跳转 Github 链接
由于工具链体积较大,请移步到ARM官网下载
作者:Oβすヌすヌすヌす