很多开发者第一次接触 STM32,总会被“交叉编译”、“烧录程序”等概念绕晕。其实方法很简单:在 Linux 下配置交叉编译环境,编写简单程序,然后烧录到 STM32,就可以看到成果了。本文带你从零开始跑起来你的第一个 STM32 程序。
一、准备工作
在开始之前,需要准备:
1、Linux 开发环境
Ubuntu、Debian 或其他主流发行版都可以。
2、ARM GCC 交叉编译工具链
- sudo apt update
- sudo apt install gcc-arm-none-eabi gdb-arm-none-eabi
2.1 STM32 开发板
例如 STM32F103C8T6(“蓝板”)或 Nucleo 系列。
2.2 调试工具
ST-LINK、JTAG/SWD 调试器。
2.3 串口线或 USB 连接线
用于打印输出或烧录程序。
小贴士:如果你的开发板自带 ST-LINK,可以省去额外购买调试器的麻烦。
二、创建工程
- 新建工程目录:
- mkdir stm32_demo
- cd stm32_demo
- 创建最简单的main.c文件:
- #include"stm32f1xx.h"
- intmain(void){
- // 1. 初始化 LED GPIO
- RCC->APB2ENR|=RCC_APB2ENR_IOPCEN;// 使能 GPIOC 时钟
- GPIOC->CRH&=~GPIO_CRH_MODE13;
- GPIOC->CRH|=GPIO_CRH_MODE13_0;// 输出模式
- GPIOC->CRH&=~GPIO_CRH_CNF13;// 通用推挽
- while(1){
- GPIOC->ODR^=GPIO_ODR_ODR13;// 翻转 LED
- for(inti=0;i<500000;i++);// 简单延时
- }
- }
小贴士:STM32F103C8T6 板载 LED 在 PC13 引脚,通过翻转寄存器可以直接点亮/熄灭。
三、编写 Makefile
Makefile 可以简化编译流程:
- CC=arm-none-eabi-gcc
- CFLAGS=-mcpu=cortex-m3-mthumb-O2-Wall
- LDFLAGS=-T stm32f103c8t6.ld-nostartfiles
- all:main.elf
- main.elf:main.c
- $(CC)$(CFLAGS)$^-o $@ $(LDFLAGS)
- clean:
- rm-f*.elf*.bin
- flash:main.elf
- st-flash write main.bin0x8000000
- main.bin:main.elf
- arm-none-eabi-objcopy-O binary main.elf main.bin
小贴士:Makefile 的flash目标可以直接把程序烧录到 STM32,无需手动输入命令。
四、交叉编译
在工程目录执行:
- make
如果没有报错,会生成main.elf和main.bin。
小贴士:
- .elf文件是可调试的二进制文件,可以在调试器中使用。
- .bin是裸机烧录文件,用于 ST-LINK 或其他烧录工具。
五、烧录程序
使用 ST-LINK 烧录:
- make flash
或者直接使用 st-flash 工具:
- st-flash write main.bin0x8000000
程序烧录完成后,板载 LED 将开始闪烁。
小贴士:
- 确认开发板供电和连接正确,否则烧录失败。
- 对于 Nucleo 板,板载 ST-LINK 也能直接通过 USB 下载。
六、串口调试(可选)
如果希望观察程序运行状态,可以在main.c中加入 UART 打印:
- #include"stm32f1xx_hal.h"
- #include
- UART_HandleTypeDef huart1;
- intfputc(intch,FILE*f){
- HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,HAL_MAX_DELAY);
- returnch;
- }
- intmain(void){
- HAL_Init();
- MX_USART1_UART_Init();
- printf("STM32 is running...\r\n");
- while(1){
- printf("Looping...\r\n");
- HAL_Delay(1000);
- }
- }
在 Linux 终端查看:
- screen/dev/ttyUSB0115200
小贴士:
- 打印日志会占用 CPU,注意不要打印过多影响实时性。
- 可用串口观察 LED 翻转计数或程序状态,方便调试。
七、总结
通过以上步骤,你已经完成了:
- Linux 下安装 ARM 交叉编译工具链
- 编写第一个 STM32 程序
- 使用 Makefile 编译并生成.elf和.bin
- 烧录程序到 STM32 开发板
- (可选)通过串口调试程序状态
这套流程是 STM32 项目开发的基础,熟练掌握后,可以快速开发更复杂功能,如 RTOS、多外设驱动、传感器数据采集等。
-
Linux
+关注
关注
88文章
11627浏览量
217888 -
STM32
+关注
关注
2305文章
11120浏览量
371045 -
编译
+关注
关注
0文章
687浏览量
34935
发布评论请先 登录
智能车浅谈——手把手让车跑起来(电磁篇)
如何让你的ESP32跑起来
怎样让自己编译的uboot跑起来
程序能跑起来就是很好的c代码吗
STM32如何区分程序跑起来用的是HSE还是HSI呢?
让NPU跑起来迅为RK3588开发板设置交叉编译器
Zynq 7015 linux跑起来之导入之BOOT.bin生成详解
windows安装ubuntu并让pioneer1应用程序跑起来的过程
TI CC3200 WIFI实训开发套件(OURS-SDK-WFB)IAR for ARM7.8调试2————对IAR for ARM的熟悉,并在开发板上跑起来第一个

Linux 下交叉编译实战:跑起来你的第一个 STM32 程序
评论