TIM输入捕获和输出比较

在 STM32 里,TIM(定时器) 的两大常用模式

模式英文功能谁触发中断典型用途
输入捕获Input Capture“记住事件发生点的时间戳”外部信号跳变测脉冲宽度、频率、占空比
输出比较Output Compare“到点就翻转/置位/清零”计数器=比较值生成精确延时、PWM、脉冲
  1. 输入捕获(Input Capture,IC):
    外部引脚电平跳变 → 把当前计数器值“捕获”到寄存器里
  2. 关键寄存器:
    CCRn:捕获寄存器(Capture/Compare Register)。
    CCMR、CCER:配置捕获边沿(上升/下降/双边沿)。
    DIER:允许捕获中断/DMA。
  3. 工作流程
    计数器 CNT 一直向上计数,引脚出现上升沿(或下降沿),硬件立即把 CNT 值锁进 CCRn,并可触发中断,软件读两次 CCRn 差值 , 算出脉宽/周期。
__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC1);
// 在中断里读 HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);
  1. 输出比较(Output Compare,OC):
    计数器 CNT == CCRn 时,按设定动作翻转/置位/清零通道引脚。
  2. 关键寄存器:
    CCRn:比较值(Compare Value)
    CCMR、CCER:选择输出模式(冻结、置位、清零、翻转)
    DIER:允许比较中断

输出比较工作模式对比

OC Mode计数器=CCRn 时引脚动作用途
TIM_OCMODE_TIMING无动作纯中断延时
TIM_OCMODE_Active置 1单脉冲
TIM_OCMODE_Inactive清 0单脉冲
TIM_OCMODE_Toggle翻转方波
TIM_OCMODE_PWM1/PWM2自动产生 PWM电机/LED
// 1. GPIO初始化(PA5/TIM2_CH1)
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;        // 复用推挽输出
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 2. 定时器时基配置
htim2.Init.Prescaler = 8400 - 1;      // 84MHz/8400 = 10kHz
htim2.Init.Period = 1000 - 1;         // 周期=100ms
HAL_TIM_OC_Init(&htim2);

// 3. 输出比较配置(每50ms翻转)
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_TOGGLE;  // 比较匹配时翻转
sConfigOC.Pulse = 500;                 // 比较值=500(50%周期)
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);

// 4. 启动输出比较
HAL_TIM_OC_Start(&htim2, TIM_CHANNEL_1);

输出比较和输入捕获二者对比

维度输入捕获输出比较
方向外部 → MCU(测信号)MCU → 外部(发信号)
触发源引脚边沿内部计数器匹配
中断点捕获到边沿计数器=CCRn
典型应用测频率、占空比、脉冲宽度生成 PWM、精确延时、脉冲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值