首页/外设速查/定时器 TIM
⏱️

定时器 TIM 时基/捕获/比较

基础外设
MCU 最灵活的外设:定时、计数、输入捕获、输出比较、PWM、编码器,一器多能。
🧩 核心原理
📈 时序 / 工作过程图
TIM 定时器计数原理CNT 从 0 计到 ARR 后溢出 → 更新事件(中断/触发DMA)CNT0ARR溢出中断/更新事件定时时间 = (ARR+1)×(PSC+1)/fCLK · 输入捕获测脉宽 · 输出比较产生PWM
⚙️ 配置 / 使用要点
  1. 使能定时器时钟 + GPIO 复用时钟
  2. 配置 PSC / ARR / CounterMode / 时钟分频
  3. 配置输出比较通道(PWM 模式、占空比 CCR)
  4. 需要时使能更新中断 + NVIC
🛠️ 项目示例
定时器 PWM 驱动舵机(50Hz,占空比调节角度)
// TIM3 CH1(PB4) PWM,72MHz → PSC=719, ARR=1999 → 50Hz
TIM_HandleTypeDef htim3 = {0};
htim3.Instance = TIM3;
htim3.Init.Prescaler = 719;
htim3.Init.Period = 1999;                 // 20ms 周期
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_PWM_Init(&htim3);

TIM_OC_InitTypeDef oc = {0};
oc.OCMode = TIM_OCMODE_PWM1;
oc.Pulse = 100;                            // 1ms → 舵机中位
oc.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&htim3, &oc, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

// 角度映射:0°=50(0.5ms) 90°=100(1ms) 180°=150(1.5ms)
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 100);
❓ 面试高频
定时器定时 1ms,72MHz 怎么配置?
PSC=71(72分频→1MHz),ARR=999 → 1MHz/1000=1ms。公式 (ARR+1)(PSC+1)/72MHz = 1ms
输入捕获测频率的原理?
连续捕获两个上升沿的 CNT 值,差值 = 一个周期计数个数,频率 = 时钟/(差值×分频)
PWM 频率和占空比分别由什么决定?
频率 = fCLK/((ARR+1)(PSC+1)),占空比 = CCR/(ARR+1)
高级定时器比通用定时器多什么?
互补输出、死区时间、刹车输入,专为电机/电源设计
✅ 自查清单 (点击勾选,本地保存)
0/0
能背出定时时间公式
会算PWM频率与占空比
理解输入捕获测脉宽原理
知道更新事件/中断触发时机
能说出编码器模式用途