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

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

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

配置 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)

参数值说明
Prescaler719972MHz → 10kHz
Period99910kHz → 10Hz PWM
PWMModePWM1模式1
Pulse50050% 占空比

场景 2:频率测量(输入捕获)

参数值说明
Prescaler7172MHz → 1MHz
Period65535最大计数
ICPolarityRising上升沿捕获

场景 3:电机控制(高级定时器)

参数值说明
CounterModeCenter1中央对齐
PWMModePWM1互补 PWM
DeadTime100死区时间
BreakEnable刹车保护

下一步

  • 查阅 TIM 开发参考 — 了解高级定时器特性
  • 查阅 固件库开发指南 — 了解 HAL/LL 模板
Prev
配置通信外设