McuStudioMcuStudio
指南
开发者
组件
API
  • 版本发布
指南
开发者
组件
API
  • 版本发布
  • 概述
  • 快速开始
  • 添加厂商的芯片到平台
  • 芯片模板教程

    • 芯片模板开发教程
    • 创建引脚封装
    • 配置时钟树
    • 配置 GPIO 外设
    • 配置 ADC 外设
    • 配置通信外设
    • 配置 TIM 外设
  • 开发参考

    • 框架与规则
    • 芯片包结构
    • 芯片描述
    • 芯片包配置
    • 引脚配置详解
    • 外设配置详解
    • 外设元素参考
    • GPIO 开发参考
    • ADC 开发参考
    • TIM 开发参考
    • 固件库开发指南
    • 版本管理机制
    • Define 映射指南
    • 多语言(i18n)

TIM 开发参考

本文档深入介绍 TIM 定时器的高级特性和复杂配置场景,是 TIM 配置教程 的进阶补充。

高级定时器特性

高级定时器(如 TIM1、TIM8)在通用定时器基础上增加了以下特性,主要面向电机控制和电源转换应用。

互补输出与死区插入

互补输出提供一对极性相反的 PWM 信号(CHx 和 CHxN),常用于驱动 H 桥电路。

// 互补输出配置
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;

// 死区时间配置 (DTS = 定时器时钟 / 死区分频)
TIM_BDTRInitStructure.TIM_DeadTime = 100;  // 100 × DTS
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

刹车功能

刹车功能在检测到外部故障信号时立即关闭 PWM 输出,保护电路:

刹车源说明
BRK 引脚外部刹车输入
时钟失效CSS 检测到 HSE 失效
PVD可编程电压检测器
内核锁定调试模式下的自动刹车
// 刹车配置参数
Break: {
  label: 'Break Function',
  type: 'checkbox',
  value: false,
  visible: '@get: isAdvancedTimer()'
},

BreakPolarity: {
  label: 'Break Polarity',
  type: 'select',
  value: 'high',
  visible: '@get: Break === true',
  options: [
    { label: 'Active High', value: 'high' },
    { label: 'Active Low', value: 'low' }
  ]
},

AutomaticOutput: {
  label: 'Automatic Output State',
  type: 'select',
  value: 'enable',
  visible: '@get: Break === true',
  options: [
    { label: 'Enable (MOE auto-recovery)', value: 'enable' },
    { label: 'Disable', value: 'disable' }
  ]
}

重复计数器

重复计数器用于在高级定时器中控制更新事件的频率:

更新事件频率 = 定时器溢出频率 / (重复计数值 + 1)

例如:PWM 频率 10kHz,重复计数 = 2 → 更新事件 = 10kHz / 3 ≈ 3.33kHz

编码器接口模式

编码器模式用于读取正交编码器的位置和方向:

// 编码器配置
EncoderMode: {
  label: 'Encoder Mode',
  type: 'select',
  value: 'disable',
  options: [
    { label: 'Disable', value: 'disable' },
    { label: 'Encoder Mode 1 (TI1+TI2)', value: 'mode1' },
    { label: 'Encoder Mode 2 (TI1 only)', value: 'mode2' },
    { label: 'Encoder Mode 3 (TI2 only)', value: 'mode3' }
  ]
}

编码器模式选择

模式计数方式适用场景
Mode 1TI1 和 TI2 双边沿计数 (4× 分辨率)高精度位置测量
Mode 2仅 TI1 边沿计数单相编码器
Mode 3仅 TI2 边沿计数单相编码器

定时器同步

多个定时器可以级联或同步工作:

主从模式

// 主定时器配置
MasterMode: {
  label: 'Master Mode',
  type: 'select',
  value: 'disable',
  options: [
    { label: 'Disable', value: 'disable' },
    { label: 'Update (TRGO)', value: 'update' },
    { label: 'OC1REF (TRGO)', value: 'oc1ref' },
    { label: 'Enable (TRGO)', value: 'enable' }
  ]
}

// 从定时器配置
SlaveMode: {
  label: 'Slave Mode',
  type: 'select',
  value: 'disable',
  options: [
    { label: 'Disable', value: 'disable' },
    { label: 'Reset Mode', value: 'reset' },
    { label: 'Gated Mode', value: 'gated' },
    { label: 'Trigger Mode', value: 'trigger' },
    { label: 'External Clock Mode 1', value: 'ext1' }
  ]
}

TriggerSource: {
  label: 'Trigger Source',
  type: 'select',
  value: 'itrx0',
  visible: '@get: SlaveMode !== "disable"',
  options: [
    { label: 'ITR0 (TIM1)', value: 'itrx0' },
    { label: 'ITR1 (TIM2)', value: 'itrx1' },
    { label: 'ITR2 (TIM3)', value: 'itrx2' },
    { label: 'TI1 Edge Detector', value: 'ti1' },
    { label: 'TI1 Filtered', value: 'ti1fp1' },
    { label: 'TI2 Filtered', value: 'ti2fp2' }
  ]
}

同步应用示例

级联 32 位计数器:TIM2(主)→ TIM3(从),TIM3 在 TIM2 溢出时计数一次。

TIM2: Prescaler=71, Period=65535  → 1MHz → 65ms 溢出周期
TIM3: Slave Mode=External Clock Mode 1, Trigger=ITR1
      → 每次 TIM2 溢出,TIM3 计数 +1
      → 最大计数 = 65535 × 65536 = 约 71 分钟

DMA 突发模式

定时器支持 DMA 突发传输,一次 DMA 请求可以更新多个寄存器:

// DMA 突发配置
DMABurstLength: {
  label: 'DMA Burst Length',
  type: 'select',
  value: '1',
  visible: '@get: DMAEnable === true',
  options: [
    { label: '1 Transfer', value: '1' },
    { label: '2 Transfers', value: '2' },
    { label: '3 Transfers', value: '3' },
    // ... 最多 18 次传输
  ]
}

定时器寄存器影子更新

定时器的部分寄存器支持影子更新机制,写入的值在更新事件(UEV)发生时才生效:

寄存器影子更新说明
PSC✅预分频器值
ARR✅自动重载值
CCRx✅捕获/比较值
RCR✅重复计数值(高级定时器)

可以通过 ARPE(自动重载预装载使能)位控制 ARR 的影子更新行为。

最佳实践

  1. 时基先行:先确认总线时钟频率,再计算 Prescaler 和 Period
  2. PWM 分辨率:高频 PWM 需折中分辨率(高频 = 低分辨率)
  3. 互补输出:务必设置死区时间,防止上下桥臂同时导通
  4. 刹车保护:电机控制应用必须启用刹车功能
  5. 编码器滤波:使用输入滤波器消除编码器信号抖动
Prev
ADC 开发参考
Next
固件库开发指南