1. 搭建开发环境与版本控制

搭建开发环境与版本控制 学习卡片

任务说明

本案例目标为:在Windows主机上配置基于VS Code + GCC Arm Embedded工具链的单片机开发环境,并建立Git仓库对代码版本进行管理。选用STM32F103系列作为目标芯片,以LED闪烁程序为验证载体,完成从环境搭建、代码编写到版本提交的完整闭环。

环境配置

所需依赖如下,均需提前安装并加入系统PATH:

  • VS Code(含C/C++扩展)
  • Arm GNU Toolchain(arm-none-eabi-gcc,版本10.3或更新)
  • Git for Windows
  • STM32CubeF1固件包(仅需CMSIS核心文件与启动文件)

验证工具链安装:在终端执行 arm-none-eabi-gcc --version 与 git --version,能正常输出版本号即视为安装成功。

工程结构


led_blink/
├── .gitignore
├── Makefile
├── core/
│   ├── startup_stm32f103xb.s
│   ├── stm32f103xb.h
│   └── system_stm32f103xb.c
└── src/
    └── main.c

代码实现

main.c 实现基于SysTick延时的LED闪烁逻辑,直接操作GPIOB的ODR寄存器控制PB0引脚:


#include "stm32f103xb.h"

void delay_ms(uint32_t ms) {
    for (uint32_t i = 0; i < ms * 8000; i++) {
        __NOP();
    }
}

int main(void) {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;   // 使能GPIOB时钟
    GPIOB->CRL = (GPIOB->CRL & ~0x0F) | 0x03; // PB0推挽输出50MHz

    while (1) {
        GPIOB->ODR ^= (1 << 0);   // 翻转PB0
        delay_ms(500);
    }
}

Makefile 定义编译规则,生成ELF与HEX文件:


PREFIX = arm-none-eabi-
CC = $(PREFIX)gcc
OBJCOPY = $(PREFIX)objcopy
CFLAGS = -mcpu=cortex-m3 -mthumb -Wall -O2 -Icore
LDFLAGS = -T core/stm32f103xb.ld -nostdlib

OBJS = core/startup_stm32f103xb.o core/system_stm32f103xb.o src/main.o

all: led_blink.hex

led_blink.elf: $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $(OBJS)

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

%.o: %.s
	$(CC) $(CFLAGS) -c -o $@ $<

led_blink.hex: led_blink.elf
	$(OBJCOPY) -O ihex $< $@

clean:
	rm -f $(OBJS) led_blink.elf led_blink.hex

链接脚本 stm32f103xb.ld 定义FLASH起始0x08000000(容量64KB)、RAM起始0x20000000(容量20KB),并导出最小向量表与堆栈符号。.gitignore 忽略编译产物:


*.o
*.elf
*.hex

Git版本控制

在工程根目录执行以下命令完成首次提交:


git init
git add .
git commit -m "初始版本:LED闪烁工程"

后续每次修改代码后,使用 git add 与 git commit 记录新版本;使用 git log --oneline 查看提交历史。

构建与验证

在工程根目录执行 make,若编译通过则生成 led_blink.hex。验证判定标准:

  1. make 命令无报错退出,且生成目标文件;
  2. git log --oneline 能显示至少一条提交记录;
  3. 将HEX文件通过ST-Link烧录至STM32F103开发板后,PB0引脚外接LED以约1Hz频率闪烁(500ms翻转一次)。

若编译报错,优先检查工具链路径与CMSIS头文件路径是否正确;若烧录后无现象,检查PB0引脚连接与CRL寄存器配置是否匹配实际硬件。

开发环境与版本控制架构 Windows 主机 VS Code 编辑器 + C/C++扩展 代码编写与浏览 Git 仓库 版本管理 commit / log / branch arm-none-eabi-gcc 交叉编译器 Makefile 驱动构建 CMSIS 寄存器定义 启动文件 构建产物 led_blink.elf(含调试信息) led_blink.hex(烧录文件) .o 目标文件(中间产物) 目标硬件验证 ST-Link 烧录 HEX STM32F103 运行 PB0 LED 约1Hz闪烁