STM32定时器实战:从LED闪烁到电机调速的三种高阶玩法
在嵌入式开发领域,定时器堪称微控制器的"心脏"。对于STM32初学者来说,TIMx定时器模块往往是最令人困惑的外设之一——它既能实现精确计时,又能生成PWM波形,还能触发中断事件。本文将用一个完整的实验项目,带你玩转STM32F103定时器的三大核心功能:更新中断、比较中断和PWM输出。不同于枯燥的实验报告,我们将通过控制LED闪烁和电机调速这两个直观案例,深入剖析定时器的配置技巧。
1. 实验环境搭建与基础准备
1.1 硬件准备清单
- 主控芯片:STM32F103C8T6(Blue Pill开发板)
- 外设模块:LED x4、按键x2、直流电机(带驱动电路)
- 调试工具:ST-Link V2仿真器
- 辅助设备:逻辑分析仪(可选,用于信号观测)
提示:如果使用其他STM32型号,需注意定时器资源差异。F103系列中,TIM1/TIM8是高级定时器,TIM2-TIM5为通用定时器,TIM6/TIM7是基本定时器。
1.2 软件工具链配置
- 安装Keil MDK-ARM开发环境(建议V5.25+)
- 添加STM32F1系列设备支持包
- 配置ST-Link调试器驱动
- 准备STM32标准外设库(或HAL库)
c复制// 示例:基础工程结构
Project/
├── CMSIS/ // 内核支持文件
├── STM32F10x_StdPeriph_Driver/ // 标准外设库
├── User/
│ ├── main.c // 主程序
│ ├── stm32f10x_conf.h // 库配置文件
│ └── timer.c // 定时器专用模块
└── Project.uvprojx // Keil工程文件
1.3 定时器核心概念速览
STM32定时器的关键参数可通过以下公式计算:
定时周期公式:
code复制T = (ARR + 1) * (PSC + 1) / Fclk
其中:
ARR:自动重装载值(16位,0-65535)PSC:预分频系数(16位,0-65535)- `Fcl
