STM32定时器

STM32定时器核心知识

  1. 定时器类型

    • 基本定时器(TIM6/TIM7)
      • 仅支持向上计数,无输入捕获/输出比较功能
      • 用于基础定时、DMA触发、DAC同步
    • 通用定时器(TIM2-TIM5, TIM9-TIM14)
      • 支持向上/向下计数、输入捕获、输出比较、PWM生成
      • 可连接外部时钟源
    • 高级定时器(TIM1/TIM8)
      • 支持通用定时器所有功能 + 死区控制、互补输出
      • 用于电机控制、电源转换等复杂场景
  2. 关键功能

    • 定时模式
      • 通过预分频器(PSC)和自动重载寄存器(ARR)控制时间
      • 计算公式:定时时间 = (ARR+1) * (PSC+1) / 时钟频率
    • 输入捕获
      • 测量外部信号脉宽/频率(如编码器信号)
    • 输出比较
      • 生成PWM、单脉冲或定时中断
    • PWM生成
      • 通过占空比(CCR寄存器)控制输出波形
  3. 时钟源配置

    • 内部时钟(默认APB总线时钟)
    • 外部时钟(外部引脚输入)
    • 内部触发互联(级联定时器)
  4. 中断与DMA

    • 支持更新中断、捕获/比较中断
    • DMA请求用于定时器事件触发数据传输

使用示例

一.PWM波占空比丝滑调节

CubeMX配置

  1. 选择TIM3通道1(PA6)为PWM输出
  2. 时钟源:72MHz
  3. 预分频PSC=72-1(1MHz)
  4. 自动重载值ARR=1000-1(周期1ms)
  5. 脉冲宽度初始值Pulse=500(50%占空比)

代码实现

// 主循环中实现渐变
while (1) {
    for(uint16_t duty=0; duty<=1000; duty+=10) {
        __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty);
        HAL_Delay(10);
    }
    for(uint16_t duty=1000; duty>0; duty-=10) {
        __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty);
        HAL_Delay(10);
    }
}

二.步进电机频率控制(占空比不变)

CubeMX配置

  1. 选择TIM4通道1(PB6)为PWM输出
  2. 初始频率1kHz(PSC=72-1,ARR=1000-1)
  3. 固定占空比50%(Pulse=500)

代码实现

void Set_Frequency(uint32_t freq) {
    uint32_t new_arr = (72000000 / (72 * freq)) - 1;
    __HAL_TIM_SET_AUTORELOAD(&htim4, new_arr);
    __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, new_arr/2); // 保持50%占空比
    HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
}

// 示例:频率从1Hz渐变到1kHz
for(uint32_t freq=1; freq<=1000; freq++) {
    Set_Frequency(freq);
    HAL_Delay(10);
}

三.定时器计时功能

CubeMX配置

  1. 选择TIM2为基本定时器
  2. 预分频PSC=7200-1(10kHz)
  3. 自动重载值ARR=10000-1(1秒中断)

代码实现

volatile uint32_t timer_count = 0;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if(htim->Instance == TIM2) {
        timer_count++;
    }
}

// 启动定时器
HAL_TIM_Base_Start_IT(&htim2);

// 使用示例
uint32_t get_seconds() {
    return timer_count;
}

关键公式说明:

  1. PWM频率
    fPWM​=fCLK​​/[(PSC+1)×(ARR+1)]
  2. 占空比计算
    DutyCycle=CCR/(ARR+1)​×100%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值