1. STM32定时器(TIM)基础概念解析
在嵌入式系统开发中,定时器是最基础也是最核心的外设之一。STM32系列微控制器提供了丰富多样的定时器资源,我们通常简称为TIM(Timer的缩写)。这些定时器不仅仅是简单的计时工具,它们更像是微控制器内部的"瑞士军刀",能够完成从基础定时到复杂PWM生成等各种任务。
我刚开始接触STM32时,对TIM的理解仅限于"可以用来做延时",但随着项目经验的积累,才发现定时器功能的强大之处。以STM32F103系列为例,通常包含以下几种定时器类型:
- 基本定时器(TIM6/TIM7):最简单的定时器,主要用于产生时基信号
- 通用定时器(TIM2-TIM5):功能全面,支持输入捕获、输出比较、PWM等
- 高级定时器(TIM1/TIM8):在通用定时器基础上增加了互补输出、死区控制等电机控制专用功能
实际开发中,90%的定时需求都可以用通用定时器实现。高级定时器虽然功能强大,但配置复杂度也显著增加,非必要不推荐使用。
定时器的核心工作原理其实很简单:一个计数器在时钟驱动下不断累加(或递减),当计数值达到预设值时触发中断或事件。但这个简单机制通过不同的配置方式,可以衍生出各种应用场景:
c复制// 典型的定时器初始化结构体
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999; // 自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
这段代码配置了一个1ms中断的定时器(假设主频72MHz)。其中TIM_Prescaler将系统时钟分频,TIM_Period设置计数上限,两者共同决定了定时周期。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
