posts/stm32-getting-started.md
STM32 入门系列:从 ARM 内核到第一个外设的路线图
STM32 入门系列:从 ARM 内核到第一个外设的路线图
STM32 不是一颗"芯片",而是一个家族——基于 ARM Cortex-M 内核,由 ST 封装成各种型号。入门最推荐 STM32F103C8T6("蓝 pill"):便宜、资料多、社区成熟。
#一、先认识 ARM 与 STM32 的关系
- ARM 只卖内核设计(Cortex-M0/M3/M4/M7…),不造芯片。
- ST(意法半导体) 买内核授权,加上自己的外设(GPIO、定时器、ADC、USART…)和 flash/RAM,做成 STM32。
- 所以"STM32"= ARM Cortex-M 内核 + ST 外设。换芯片厂(GD、APM)内核一样,外设寄存器可能不同。
| 内核 | 定位 | 代表系列 |
|---|---|---|
| Cortex-M0 | 超低功耗/成本 | STM32F0 |
| Cortex-M3 | 主流均衡 | STM32F1/F2 |
| Cortex-M4 | 带 DSP/FPU | STM32F3/F4 |
| Cortex-M7 | 高性能 | STM32F7/H7 |
#二、STM32F103 内部核心一览
- Cortex-M3 内核:跑程序、处理中断。
- 总线矩阵:内核与外设之间的"立交桥",让 CPU 与 DMA 能并行访问。
- Flash(程序)/ SRAM(数据):代码烧在这里。
- RCC(复位与时钟控制):所有外设的时钟总开关——不打开时钟,外设就不工作,这是新手最常踩的坑。
- NVIC(中断控制器):管理所有中断优先级。
- 外设:GPIO、USART、SPI、I2C、TIM、ADC、DAC、CAN…
#三、重要功能模块逐个看
#1. GPIO(通用输入输出)
最基础的"针脚"。每个引脚可配为:
- 输入:浮空 / 上拉 / 下拉
- 输出:推挽(驱动 LED/继电器)/ 开漏(I2C 总线用)
- 复用功能(AF):把引脚交给 USART/SPI 等外设
点灯就是 GPIO_SetBits/GPIO_ResetBits 或 HAL 的 HAL_GPIO_WritePin。
#2. 时钟树(Clock Tree)
STM32 不用一个时钟跑所有外设,而是分级:
txtHSI(内部8M) / HSE(外部晶振8M) → PLL(倍频到72M) → SYSCLK
├─› AHB → APB1(36M) → TIM2/3/4, USART2/3…
└─› APB2(72M) → GPIO, USART1, ADC, TIM1
- APB1 最高 36MHz,APB2 最高 72MHz——USART1 在 APB2 所以能跑更高波特率。
- 不用的外设关时钟省电;用到前必须开时钟(
__HAL_RCC_GPIOA_CLK_ENABLE())。
#3. 定时器(TIM)
用途极广:延时、PWM(控电机/调光)、输入捕获(测频率/占空比)、定时中断。
- 基本定时:
TIMx计数到 ARR 产生更新中断。 - PWM:
CCRx比较值决定占空比,配好就自动输出,CPU 不干预。 - 高级定时器(TIM1)带死区,专用于电机驱动。
#4. 中断(NVIC + EXTI)
外部按键、定时器到时、串口收到数据——都靠中断异步通知 CPU。
- 配置流程:使能时钟 → 配 GPIO/外设 → 设 NVIC 优先级 → 写中断服务函数(ISR)。
- ISR 要短:只置标志/读数据,重活放主循环。关中断太久会丢事件。
#5. USART(串口)
调试和通信的"老黄牛"。TTL 电平(0/3.3V)直接连 MCU;要连电脑/RS232 设备需经 MAX3232/SP3232 电平转换(见知识库 RS232 档案)。
- 波特率常用 115200-8-N-1。
- 查询方式简单但占 CPU;中断/DMA 方式高效。
#6. ADC(模数转换)
把模拟电压(传感器、电位器)转成数字量。F103 是 12 位(0~4095)。
- 规则组/注入组通道;可配连续/单次、软件/外部触发。
- 配合 DMA 可连续采样不占 CPU(见知识库 ADC+OLED 调试复盘)。
#四、学习路线建议
- 点灯:配 GPIO 输出,跑通编译→下载→运行(见《开发环境搭建》一文)。
- 串口打印:USART 输出调试信息,建立"和程序对话"的能力。
- 定时器 + PWM:让 LED 呼吸、让电机转。
- 中断 + 按键:理解异步事件。
- ADC + 传感器:读真实世界数据。
- 通信协议:I2C(OLED/LM75)、SPI(屏/Flash)、CAN(车载/工业)。
- RTOS(FreeRTOS):多任务不再靠裸机轮询。
#五、工具链
- Keil MDK / STM32CubeIDE / VSCode+GCC:任选其一。
- STM32CubeMX:图形化配引脚和时钟,自动生成初始化代码,强烈建议新手用。
- ST-Link / DAP-Link / 串口:下载与调试。
#六、更新日志
📝共 1 条记录
| 日期 | 类型 | 更新内容 |
|---|---|---|
| 2026-09-12 | 新增 | 首次建档:ARM 与 STM32 关系 → 内核/时钟/定时器/中断/USART/ADC 路线图 |