很多開發者第一次接觸 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文章
11641瀏覽量
218195 -
STM32
+關注
關注
2307文章
11128瀏覽量
371487 -
編譯
+關注
關注
0文章
689瀏覽量
34972
發布評論請先 登錄
智能車淺談——手把手讓車跑起來(電磁篇)
如何讓你的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 程序
評論