配置 TIM 外设
本教程将引导您完成 TIM(定时器)外设的芯片模板配置。定时器是 MCU 中使用最频繁、功能最丰富的外设之一,掌握其配置方法是芯片模板开发的重要环节。
概述
MCU 中的定时器按功能复杂度分为三个等级:
| 类型 | 典型数量 | 主要功能 |
|---|---|---|
| 基本定时器 | 1-2 个 | 时基定时、触发 DAC |
| 通用定时器 | 2-8 个 | 输入捕获、输出比较、PWM 生成、编码器接口 |
| 高级定时器 | 1-2 个 | 通用定时器全部功能 + 互补输出、死区插入、刹车功能 |
时基配置
时基是定时器最基础的配置,决定了定时器的计数频率和周期。
关键参数
// TIM 时基参数
TIM: {
// 预分频器 (PSC)
Prescaler: {
label: 'Prescaler',
type: 'input',
value: '7199', // 72MHz / (7199+1) = 10kHz
placeholder: '0-65535'
},
// 自动重载值 (ARR)
Period: {
label: 'Counter Period (AutoReload)',
type: 'input',
value: '9999', // 10kHz / (9999+1) = 1Hz
placeholder: '0-65535'
},
// 计数模式
CounterMode: {
label: 'Counter Mode',
type: 'select',
value: 'up',
options: [
{ label: 'Up', value: 'up' },
{ label: 'Down', value: 'down' },
{ label: 'Center Aligned 1', value: 'center1' },
{ label: 'Center Aligned 2', value: 'center2' },
{ label: 'Center Aligned 3', value: 'center3' }
]
}
}
频率计算公式
定时器时钟 = 总线时钟 / (Prescaler + 1)
定时器周期 = 定时器时钟 / (Period + 1)
示例
总线时钟 72MHz, Prescaler = 7199, Period = 9999:
定时器时钟 = 72,000,000 / (7199 + 1) = 10,000 Hz
定时器周期 = 10,000 / (9999 + 1) = 1 Hz(每秒触发一次)
输出比较模式
输出比较用于在定时器计数值与预设值匹配时产生输出信号:
// 输出比较通道配置
OutputCompare: {
// 通道选择
Channel: {
label: 'Channel',
type: 'select',
value: '1',
options: [
{ label: 'Channel 1', value: '1' },
{ label: 'Channel 2', value: '2' },
{ label: 'Channel 3', value: '3' },
{ label: 'Channel 4', value: '4' }
]
},
// 输出比较模式
OCMode: {
label: 'Output Compare Mode',
type: 'select',
value: 'timing',
options: [
{ label: 'Frozen', value: 'frozen' },
{ label: 'Active on Match', value: 'active' },
{ label: 'Inactive on Match', value: 'inactive' },
{ label: 'Toggle on Match', value: 'toggle' },
{ label: 'Force Active', value: 'force_active' },
{ label: 'Force Inactive', value: 'force_inactive' },
{ label: 'PWM Mode 1', value: 'pwm1' },
{ label: 'PWM Mode 2', value: 'pwm2' }
]
},
// 比较值 (CCR)
Pulse: {
label: 'Pulse (Compare Value)',
type: 'input',
value: '5000',
placeholder: '0-65535'
}
}
PWM 生成
PWM(脉冲宽度调制)是最常用的定时器功能之一。
PWM 参数配置
// PWM 配置
PWM: {
// PWM 模式
PWMMode: {
label: 'PWM Mode',
type: 'select',
value: 'pwm1',
options: [
{ label: 'PWM Mode 1', value: 'pwm1' },
{ label: 'PWM Mode 2', value: 'pwm2' }
]
},
// 输出极性
OCPolarity: {
label: 'Output Polarity',
type: 'select',
value: 'high',
options: [
{ label: 'Active High', value: 'high' },
{ label: 'Active Low', value: 'low' }
]
},
// 互补输出极性(高级定时器)
OCNPolarity: {
label: 'Complementary Output Polarity',
type: 'select',
value: 'high',
visible: '@get: isAdvancedTimer()',
options: [
{ label: 'Active High', value: 'high' },
{ label: 'Active Low', value: 'low' }
]
}
}
占空比计算
边沿对齐 (PWM1): 占空比 = Pulse / (Period + 1)
中央对齐 (PWM1): 占空比 = Pulse / Period
PWM 频率与分辨率
- PWM 频率 = 定时器频率 / (Period + 1)
- PWM 分辨率 = log2(Period + 1) 位
例如 Period = 999 → 频率 = 10kHz, 分辨率 ≈ 10 位
互补输出与死区(高级定时器)
// 死区配置
DeadTime: {
label: 'Dead Time',
type: 'input',
value: '100',
visible: '@get: isAdvancedTimer()',
placeholder: '0-255 (in DTS units)'
}
// 刹车功能
Break: {
label: 'Break Function',
type: 'checkbox',
value: false,
visible: '@get: isAdvancedTimer()'
}
输入捕获模式
输入捕获用于测量外部信号的频率和占空比:
// 输入捕获配置
InputCapture: {
// 捕获极性
ICPolarity: {
label: 'Input Capture Polarity',
type: 'select',
value: 'rising',
options: [
{ label: 'Rising Edge', value: 'rising' },
{ label: 'Falling Edge', value: 'falling' },
{ label: 'Both Edges', value: 'both' }
]
},
// 输入滤波器
ICFilter: {
label: 'Input Filter',
type: 'select',
value: '0',
options: [
{ label: 'No Filter', value: '0' },
{ label: 'fDTS/2 N=2', value: '2' },
{ label: 'fDTS/2 N=4', value: '4' },
{ label: 'fDTS/2 N=8', value: '8' }
]
},
// 输入预分频
ICPrescaler: {
label: 'Input Prescaler',
type: 'select',
value: '1',
options: [
{ label: 'No Prescaler', value: '1' },
{ label: 'Divide by 2', value: '2' },
{ label: 'Divide by 4', value: '4' },
{ label: 'Divide by 8', value: '8' }
]
}
}
定时器实例关联
当芯片有多个 TIM 实例时,需要正确关联外设节点:
// info.cjs 中的 TIM 实例定义
ips: [
{ name: 'TIM1', max: 1 }, // 高级定时器
{ name: 'TIM2', max: 1 }, // 通用定时器
{ name: 'TIM3', max: 1 }, // 通用定时器
{ name: 'TIM6', max: 1 } // 基本定时器
]
常见配置场景
场景 1:LED 呼吸灯(PWM)
| 参数 | 值 | 说明 |
|---|---|---|
| Prescaler | 7199 | 72MHz → 10kHz |
| Period | 999 | 10kHz → 10Hz PWM |
| PWMMode | PWM1 | 模式1 |
| Pulse | 500 | 50% 占空比 |
场景 2:频率测量(输入捕获)
| 参数 | 值 | 说明 |
|---|---|---|
| Prescaler | 71 | 72MHz → 1MHz |
| Period | 65535 | 最大计数 |
| ICPolarity | Rising | 上升沿捕获 |
场景 3:电机控制(高级定时器)
| 参数 | 值 | 说明 |
|---|---|---|
| CounterMode | Center1 | 中央对齐 |
| PWMMode | PWM1 | 互补 PWM |
| DeadTime | 100 | 死区时间 |
| Break | Enable | 刹车保护 |
