很多開發(fā)者第一次接觸 STM32,總會被“交叉編譯”、“燒錄程序”等概念繞暈。其實(shí)方法很簡單:在 Linux 下配置交叉編譯環(huán)境,編寫簡單程序,然后燒錄到 STM32,就可以看到成果了。本文帶你從零開始跑起來你的第一個(gè) STM32 程序。
一、準(zhǔn)備工作
在開始之前,需要準(zhǔn)備:
1、Linux 開發(fā)環(huán)境
Ubuntu、Debian 或其他主流發(fā)行版都可以。
2、ARM GCC 交叉編譯工具鏈
- sudo apt update
- sudo apt install gcc-arm-none-eabi gdb-arm-none-eabi
2.1 STM32 開發(fā)板
例如 STM32F103C8T6(“藍(lán)板”)或 Nucleo 系列。
2.2 調(diào)試工具
ST-LINK、JTAG/SWD 調(diào)試器。
2.3 串口線或 USB 連接線
用于打印輸出或燒錄程序。
小貼士:如果你的開發(fā)板自帶 ST-LINK,可以省去額外購買調(diào)試器的麻煩。
二、創(chuàng)建工程
- 新建工程目錄:
- mkdir stm32_demo
- cd stm32_demo
- 創(chuàng)建最簡單的main.c文件:
- #include"stm32f1xx.h"
- intmain(void){
- // 1. 初始化 LED GPIO
- RCC->APB2ENR|=RCC_APB2ENR_IOPCEN;// 使能 GPIOC 時(shí)鐘
- GPIOC->CRH&=~GPIO_CRH_MODE13;
- GPIOC->CRH|=GPIO_CRH_MODE13_0;// 輸出模式
- GPIOC->CRH&=~GPIO_CRH_CNF13;// 通用推挽
- while(1){
- GPIOC->ODR^=GPIO_ODR_ODR13;// 翻轉(zhuǎn) LED
- for(inti=0;i<500000;i++);// 簡單延時(shí)
- }
- }
小貼士:STM32F103C8T6 板載 LED 在 PC13 引腳,通過翻轉(zhuǎn)寄存器可以直接點(diǎn)亮/熄滅。
三、編寫 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目標(biāo)可以直接把程序燒錄到 STM32,無需手動輸入命令。
四、交叉編譯
在工程目錄執(zhí)行:
- make
如果沒有報(bào)錯(cuò),會生成main.elf和main.bin。
小貼士:
- .elf文件是可調(diào)試的二進(jìn)制文件,可以在調(diào)試器中使用。
- .bin是裸機(jī)燒錄文件,用于 ST-LINK 或其他燒錄工具。
五、燒錄程序
使用 ST-LINK 燒錄:
- make flash
或者直接使用 st-flash 工具:
- st-flash write main.bin0x8000000
程序燒錄完成后,板載 LED 將開始閃爍。
小貼士:
- 確認(rèn)開發(fā)板供電和連接正確,否則燒錄失敗。
- 對于 Nucleo 板,板載 ST-LINK 也能直接通過 USB 下載。
六、串口調(diào)試(可選)
如果希望觀察程序運(yùn)行狀態(tài),可以在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,注意不要打印過多影響實(shí)時(shí)性。
- 可用串口觀察 LED 翻轉(zhuǎn)計(jì)數(shù)或程序狀態(tài),方便調(diào)試。
七、總結(jié)
通過以上步驟,你已經(jīng)完成了:
- Linux 下安裝 ARM 交叉編譯工具鏈
- 編寫第一個(gè) STM32 程序
- 使用 Makefile 編譯并生成.elf和.bin
- 燒錄程序到 STM32 開發(fā)板
- (可選)通過串口調(diào)試程序狀態(tài)
這套流程是 STM32 項(xiàng)目開發(fā)的基礎(chǔ),熟練掌握后,可以快速開發(fā)更復(fù)雜功能,如 RTOS、多外設(shè)驅(qū)動、傳感器數(shù)據(jù)采集等。
-
Linux
+關(guān)注
關(guān)注
88文章
11681瀏覽量
218568 -
STM32
+關(guān)注
關(guān)注
2307文章
11150瀏覽量
372393 -
編譯
+關(guān)注
關(guān)注
0文章
691瀏覽量
35013
發(fā)布評論請先 登錄
智能車淺談——手把手讓車跑起來(電磁篇)
STM32芯片用KEIL4下載程序后要按下復(fù)位鍵才能跑起來
如何讓你的ESP32跑起來
怎樣讓自己編譯的uboot跑起來
程序能跑起來就是很好的c代碼嗎
STM32如何區(qū)分程序跑起來用的是HSE還是HSI呢?
讓NPU跑起來迅為RK3588開發(fā)板設(shè)置交叉編譯器
Zynq 7015 linux跑起來之導(dǎo)入之BOOT.bin生成詳解
如何在鴻蒙OS上跑起來第一個(gè)hello world
windows安裝ubuntu并讓pioneer1應(yīng)用程序跑起來的過程
TI CC3200 WIFI實(shí)訓(xùn)開發(fā)套件(OURS-SDK-WFB)IAR for ARM7.8調(diào)試2————對IAR for ARM的熟悉,并在開發(fā)板上跑起來第一個(gè)
Linux 下交叉編譯實(shí)戰(zhàn):跑起來你的第一個(gè) STM32 程序
評論