linux gcc stm32
时间: 2025-01-01 09:22:12 浏览: 5
### 编译环境准备
为了在Linux环境下使用GCC编译STM32项目,需先安装`arm-none-eabi-gcc`交叉编译器。可以通过包管理器快速安装:
```bash
sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi binutils-arm-none-eabi
```
上述命令会更新软件源并安装必要的工具链[^1]。
### 创建Makefile
创建一个简单的Makefile来简化构建过程。假设有一个名为main.c的C文件作为入口点,则Makefile可以如下编写:
```makefile
# Makefile for STM32 project using GCC toolchain
CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
OBJCOPY = arm-none-eabi-objcopy
SIZE = arm-none-eabi-size
TARGET = main.elf
HEXFILE = $(TARGET:.elf=.hex)
BINFILE = $(TARGET:.elf=.bin)
SRCS = main.c startup_stm32f103xb.s system_stm32f1xx.c stm32f1xx_hal_msp.c \
stm32f1xx_it.c
OBJS := $(patsubst %.c,%.o,$(wildcard *.c))
OBJS += $(patsubst %.s,%.o,$(wildcard *.s))
INC_DIRS = -I./Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include \
-I../Drivers/CMSIS/Include -I../Drivers/STM32F1xx_HAL_Driver/Inc
LIBS = -L../Drivers/CMSIS/Lib/GCC/
FLAGS = -Og -Wall -Tstm32f103c8tx_FLASH.ld -specs=nano.specs -mfpu=vfp -mfloat-abi=hard\
-mcpu=cortex-m3 -mthumb
all: elf hex bin size
elf: $(TARGET)
$(TARGET): $(OBJS)
@echo "Linking $@"
$(CC) $(FLAGS) -o $@ $^ $(LIBS)
hex: $(HEXFILE)
$(HEXFILE): $(TARGET)
@echo "Generating HEX file"
$(OBJCOPY) -O ihex $< $@
bin: $(BINFILE)
$(BINFILE): $(TARGET)
@echo "Generating BIN file"
$(OBJCOPY) -O binary $< $@
size:
@echo "Program Size:"
$(SIZE) $(TARGET)
clean:
rm -rf *.o *.elf *.hex *.bin *~ core .dep.inc
.PHONY : all clean size elf hex bin
```
此脚本定义了一系列目标及其依赖关系,并指定了如何生成最终的目标文件(ELF格式),以及从中提取出适合加载到微控制器上的二进制映像(HEX/BIN)。注意这里包含了启动代码和其他初始化函数所需的汇编文件(.s)[^2]。
### 配置链接脚本与头文件路径
确保项目的目录结构合理安排,特别是包含正确的CMSIS和HAL库版本。对于特定型号的MCU还需要指定相应的内存布局描述(ld),这通常由供应商提供,在上面的例子中是`stm32f103c8tx_FLASH.ld`[^4]。
### 下载固件
最后一步就是将产生的`.bin`或`.hex`文件刷入设备。如果采用串口方式上传固件的话,可能需要用到专门的应用程序比如dfu-util或者openocd配合JTAG/SWD接口调试适配器完成实际烧写工作。
阅读全文