NO.10 · 嵌入式开发
STM32 单片机开发笔记:从寄存器到物联网通信
STM32 单片机开发课程笔记,覆盖 GPIO、中断、USART、I2C、SPI、DMA、ADC、FSMC 等外设,以及 CAN、以太网、Wi-Fi、BLE、LoRa 等物联网通信。
STM32 是嵌入式开发的主战场。这份笔记覆盖基础外设、通信协议、存储器、低功耗、实时系统和工程开发流程,从寄存器与 HAL 库双视角出发,一路延伸到 CAN、以太网、Wi-Fi、蓝牙和 LoRa 等物联网通信。
学习路线
1 | STM32 基础 |
基础篇:外设与开发流程
- 芯片与工程环境:ARM 内核介绍、STM32 系列命名规则、Keil MDK / STM32CubeMX / ST-LINK 工具链、最小系统与第一个工程;
- GPIO 与寄存器:工作模式、端口配置和数据寄存器(
GPIOx_CRL/CRH/IDR/ODR/BSRR/BRR/LCKR),寄存器方式实现流水灯; - 系统架构与时钟:STM32 总体架构与时钟树;
- HAL 库开发:CubeMX 生成 HAL 工程,理解自动生成代码和用户代码的组织方式;
- 中断:中断体系、NVIC、外部中断控制器与按键检测案例;
- USART 串口通信:并行/串行、单工/半双工/全双工、同步/异步,轮询与中断接收,
printf重定向; - I2C 通信:通过 M24C02 案例学习软件模拟 I2C 与硬件 I2C;
- 定时器:SysTick、基本/通用/高级定时器,PWM 呼吸灯与频率、占空比测量;
- DMA:ROM 到 RAM、RAM 到串口的数据传输;
- ADC:逐次逼近型 ADC 原理、单通道采集与多通道采集;
- SPI 与 Flash:W25Q32 读写,软件模拟 SPI 与硬件 SPI;
- 存储器与 FSMC:存储器映射、FSMC 扩展外部 SRAM、8080 时序控制 LCD。
高级篇:物联网通信
- CAN 通信:物理层、协议层、数据帧与总线仲裁,环回静默模式测试与双节点通信;
- 以太网与 W5500:OSI 七层模型、TCP/IP 四层模型,TCP 服务端/客户端、UDP 通信与简易 Web 服务器;
- Wi-Fi 与 ESP32-C3:ESP-AT 固件与 AT 指令,STM32 与 ESP32-C3 串口交互,建立 TCP 通信;
- Bluetooth LE:BLE 协议栈(PHY / LL / HCI / GAP / ATT / GATT)、广播扫描与透传模式数据收发;
- LoRa:E220-400M22S 模块、普通节点与网关搭建,验证节点到网关的数据传输。
扩展篇:系统级功能
- 电源控制与低功耗:睡眠、停机、待机三种低功耗模式与唤醒源管理;
- RTC 与备份域:掉电继续运行、备份寄存器保存数据、闹钟唤醒待机模式;
- 看门狗:独立看门狗与窗口看门狗的工作方式和触发条件;
- HAL 工程与编译流程:
startup_stm32f103xe.s、system_stm32f1xx.c、HAL_Init()初始化流程与 Keil MDK 编译过程。
开发方式对比
| 方式 | 主要特点 | 学习重点 |
|---|---|---|
| 寄存器开发 | 直接操作外设寄存器,接近芯片硬件 | 地址、位域、时序和参考手册 |
| HAL 库开发 | 使用 ST 提供的抽象接口,提高开发效率 | CubeMX 配置、回调、状态和生成代码 |
| 混合开发 | 在 HAL 工程中针对关键功能使用寄存器 | 抽象层边界、时序控制和可维护性 |
推荐学习顺序
- 完成基础篇中的 GPIO、时钟、HAL 和第一个下载运行工程;
- 按 USART、I2C、SPI 的顺序学习常用片上通信接口;
- 学习中断、定时器、DMA 和 ADC,建立事件驱动与数据搬运能力;
- 学习存储器映射、FSMC 和 LCD,理解外部设备扩展;
- 进入高级篇,依次学习 CAN、以太网、Wi-Fi、蓝牙和 LoRa;
- 最后学习扩展篇中的低功耗、RTC、备份域、看门狗和 HAL 工程分析。