Linux 下 VScode + gcc + cmake 实现 stm32 标准库开发 (f103)
2025-10-29 来源:bilibili
1. 配置环境
1.1 安装编译工具链 gcc-arm-none-eabi
在终端输入
git clone https://github.com/MagiL0/stm32_gcc_template.git
或直接前往 网页( https://github.com/MagiL0/stm32_gcc_template ) 下载源码并解压。
打开 网页 (https://developer.arm.com/downloads/-/gnu-rm) 根据自己的版本选择对应的 gcc-arm-none-eabi 工具链下载。
前往下载到的目录,打开终端
tar -zxvf *文件名* sudo mv *文件夹名* /opt/gcc-arm-none-eabi sudo vim ~/.bashrc
在最后一行添加
export PATH=$PATH:/opt/gcc-arm-none-eabi/bin
保存并退出,之后重启终端,输入
arm_none_eabi-gcc -v
显示版本号即安装成功 如果出错,请直接搜索 “linux 安装 gcc-arm-none-eabi”
1.2 安装 cmake
sudo apt install cmake -y
1.3 安装 openocd
参考 https://docs.espressif.com/projects/esp-idf/zh_CN/v3.3.4/api-guides/jtag-debugging/setup-openocd-linux.html
cut-off
2. 使用工程
2.1 编译
在终端输入
git clone https://github.com/MagiL0/stm32_gcc_template.git
在该文件夹打开终端,输入
cd build cmake .. make
终端输出无 warning 及 error 时说明没有问题,生成的 .hex .elf 等文件在你的当前文件夹 (build) 中。
2.2 烧录
连接 jlink 或 stlink。
在终端输入
openocd -f jlink.cfg -f stm32f1x.cfg
# 如果使用 stlink,则输入:
openocd -f stlink.cfg -f stm32f1x.cfg
不要退出,打开新的命令行终端,输入
telnet localhost 4444
输入 program led_test.elf 开始烧录
烧录成功后,输入 restart 程序开始执行
更多详细的步骤如调试等,请查询 openocd 教程
cut-off
3. 修改工程
3.1 修改工程名称
打开 CMakeLists.txt ,修改第 7 行中的 led_test 为你自己的工程名
删除 build 文件夹中的所有内容
重新编译 (参考 1.1)
3.2 添加文件
3.2.1 不修改文件夹目录
无需修改,直接把所需 .c, .h 文件扔进子目录 (如 USER/) 即可
如果是细分了 src inc 的文件夹,.s, .c 扔进 src,.h 扔进 inc
3.2.2 修改文件夹目录
添加源文件时,编辑 CMakeLists.txt。在 65 行:file(GLOB_RECURSE SOURCES 后添加 .c 文件所在的目录。
添加头文件时,编辑 CMakeLists.txt。在第 55 行 include_directories 的括号后添加 .h 文件目录即可。
添加汇编语言文件时,编辑 CMakeLists.txt。在第 82 行 list 的括号中末尾处添加 .s 文件路径即可
以上修改时可以不加引号,但若文件目录名称中含有空格,则必须添加引号。3.2 修改文件夹名称
如:在 USER 中新建 src 目录存放 .c 文件,则需修改为:
file(GLOB_RECURSE SOURCES "CORE/*.c" "SYSTEM/delay/*.c" "SYSTEM/usart/*.c" "SYSTEM/sys/*.c" "USER/*.c" "STM32F10x_FWLib/src/*.c" "USER/src/*.c" )
当添加文件夹后在新增的文件夹里添加工程文件时,需作以下修改:
当修改文件夹名称时,将 CMakeLists.txt 中的所有被修改的文件夹名称全部修改为被修改后的。
3.3 修改单片机型号
使用 stm32f103 中的 c, d, e, f, g 系列时无需修改。
使用 stm32f103 中的 8, b 系列时需打开 CMakeLists.txt,修改第 22 行的 STM32F10X_HD 为 STM32F10X_MD
- SUSE 被曝以 60 亿美元估值寻找新买家
- Linux嵌入式开发必备命令速查表
- 使用JTAG在Zynq UltraScale+ MPSoC上引导嵌入式Linux系统
- Linux 内核将引入缓存感知调度,性能最高提升 44%
- Linux 之父罕见发声:GPLv2 许可仅限软件开源,不管硬件解锁
- AGL 发布 SoDeV 开源方案,加速软件定义汽车落地
- Linux 内核首个涉及 Rust 代码的安全漏洞公开:源于开发者在 unsafe 代码逻辑疏漏
- 基于安路DR1M90 FPSoC的Linux系统全流程开发指南(第四部分)
- 基于迅为iTOP-3568开发板的Linux驱动开发实战:menuconfig图形化配置实验
- 员工代码写不够就解雇!Linux创始人炮轰马斯克太愚蠢
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




