1. 课程导学与环境搭建:工欲善其事,必先利其器
各位同学,欢迎来到《STM32裸机外设驱动封装与移植调试实战》的第一章。
做嵌入式开发,说白了就是跟硬件打交道。你写的每一行代码,最终都要落到寄存器上。而这一切的起点,就是先把开发环境搭好。我见过太多新手,代码写得挺漂亮,结果卡在编译器配置上,一卡就是半天。嗯,咱们今天就把这些坑提前填上。
1.1 开发板选型:别盲目跟风
市面上STM32开发板五花八门,从几十块的“最小系统板”到上千块的“官方评估板”。我个人习惯是:学习阶段,选一块主流、资料多、带常用外设的板子。
| 型号 | 内核 | Flash | SRAM | 适合场景 |
|---|---|---|---|---|
| STM32F103C8T6 | Cortex-M3 | 64KB | 20KB | 入门经典,资料最多 |
| STM32F407VGT6 | Cortex-M4F | 1MB | 192KB | 带DSP和FPU,适合进阶 |
| STM32H743 | Cortex-M7 | 2MB | 1MB | 高性能,跑复杂算法 |
1.2 IDE安装与配置:Keil还是IAR?
这是个老生常谈的问题。我的答案是:选你团队用的那个。如果你自己学,我推荐Keil MDK,因为它的用户基数大,遇到问题随便一搜就有答案。
1.2.1 Keil MDK安装要点
- 版本选择:建议用MDK 5.38或更新版本,老版本对Win11兼容性不好。
- 器件包:安装完成后,记得通过Pack Installer下载对应芯片的DFP(Device Family Pack)。我遇到过有人装完Keil发现找不到STM32F103,就是因为没装包。
- 编译器:默认使用Arm Compiler 6(基于Clang),性能比AC5好不少。如果你的项目有老代码,可以切回AC5,但新项目建议直接用AC6。
1.2.2 IAR EWARM配置
IAR的优化能力确实强,但界面风格比较“硬核”。如果你习惯用IAR,注意一点:工程选项里的“General Options” -> “Target” -> “Device”一定要选对型号,否则下载时会报错。
1.3 调试器连接:ST-Link vs J-Link
调试器就是你的“眼睛”。没有它,你只能靠printf和LED灯猜程序在干什么。
| 特性 | ST-Link V2 | J-Link EDU |
|---|---|---|
| 价格 | 约15元(山寨) | 约300元(正版) |
| 速度 | 一般(4MHz SWO) | 快(最高50MHz) |
| 兼容性 | 仅ST芯片 | 全ARM Cortex |
| 推荐场景 | 学习、简单调试 | 项目开发、多平台 |
连接方式很简单:SWD接口只需要4根线——VCC、GND、SWDIO、SWCLK。别被那些花里胡哨的20针JTAG接口吓到,咱们裸机开发用SWD就够了。
1.4 第一个裸机工程模板:从零开始
好,现在咱们来创建第一个工程。我会带着你一步步走,确保你以后每次新建项目都能复用这个模板。
1.4.1 工程目录结构
我习惯用这种结构,清晰明了:
Project/
├── Core/
│ ├── Inc/ // 头文件
│ └── Src/ // 源文件
├── Drivers/
│ ├── CMSIS/ // ARM官方内核抽象层
│ └── STM32F1xx_HAL_Driver/ // HAL库(可选)
├── Startup/ // 启动文件
└── Project.uvprojx // Keil工程文件
1.4.2 启动文件与链接脚本
启动文件是芯片上电后执行的第一段代码。它负责:
- 设置堆栈指针
- 初始化中断向量表
- 调用SystemInit()
- 跳转到main()
说白了,没有启动文件,你的芯片就是一块“砖头”。
1.4.3 最小main函数
咱们先写一个最简单的程序,让LED灯闪烁:
#include "stm32f1xx.h"
void delay(volatile uint32_t count) {
while(count--);
}
int main(void) {
// 使能GPIOC时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
// 配置PC13为推挽输出
GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13);
GPIOC->CRH |= GPIO_CRH_MODE13_0; // 输出模式,最大10MHz
while(1) {
GPIOC->BSRR = GPIO_BSRR_BS13; // 置位,LED灭
delay(500000);
GPIOC->BSRR = GPIO_BSRR_BR13; // 复位,LED亮
delay(500000);
}
}
1.5 知识体系总览
为了让你对整个课程有个宏观认识,我画了一张图。这张图展示了我们第一章在整个课程中的位置,以及后续章节的依赖关系。
1.6 验证:下载与调试
代码写好了,怎么知道它能不能跑?
- 编译:按F7(Keil)或Ctrl+B(IAR),确保0 Error 0 Warning。
- 连接调试器:插上ST-Link,打开Options for Target -> Debug -> Use ST-Link,点击Settings,如果能读到IDCODE,说明连接成功。
- 下载:按F8(Keil)或Ctrl+D(IAR),程序会自动烧录到Flash。
- 运行:按F5全速运行,看LED灯是不是在闪烁。
1.7 本章小结
到这一步,你已经完成了:
- 选好了开发板和调试器
- 装好了IDE并配置了工程
- 创建了第一个裸机工程模板
- 成功下载并运行了LED闪烁程序
别小看这个LED闪烁,它背后涉及了时钟配置、GPIO寄存器操作、启动流程等核心知识。后面的每一章,都会在这个模板上做加法。把这个模板保存好,它会陪你走完整个课程。