1.硬件平台
单片机:stm32f407
PWM脉冲:Timer2 CH2
脉冲计数:Timer3
2.定时器外部触发同步
TIMx定时器以下列模式与外部触发实现同步:复位模式、门控模式和触发模式。
2.1复位模式
当触发输入信号发生变化时,计数器及其预分频器可重新初始化。此外,如果 TIMx_CR1
寄存器中的 URS 位处于低电平,则会生成更新事件 UEV。然后,所有预装载寄存器
( TIMx_ARR 和 TIMx_CCRx)都将更新。
2.2门控模式
输入信号的电平可用来使能计数器。
2.3触发模式
所选输入上发生某一事件时可以启动计数器。
我们的目标是通过Timer3对Timer2 CH2的PWM个数进行计数,因此,门控模式符合要求。触发输入 (TRGI) 为高电平时使能计数器时钟。只要触发输入变为低电平,计数器立即停止计数(但不复位)。计数器的启动和停止都是受控的。
3.定时器内部触发连接
从TIM | ITR0(TS=000) | ITR1(TS=001) | ITR2(TS=010) | ITR3(TS=011) |
TIM2 | TIM1 | TIM8 | TIM3 | TIM4 |
TIM3 | TIM1 | TIM2 | TIM5 | TIM4 |
TIM4 | TIM1 | TIM2 | TIM3 | TIM8 |
TIM5 | TIM2 | TIM3 | TIM4 | TIM8 |
Timer3计数触发来源是Timer2,查上表可知Timer3的触发源为ITR1。
4.stm32cubeMX的定时器配置
Timer2定时器的配置决定了PWM波形,由于定时器时钟为84MHz,根据配置内容可以得知
频率=定时器时钟/预分频/计数周期=84MHz/84/5=200KHz
占空比=(5-2)/5=60%
Mode可以选择PWM mode1和PWM mode2,选择PWM mode2时输出是选择PWM mode1时输出的反相,影响占空比。
Pulse选择比较时钟数,影响占空比。
CH Polarity设置有效极性,影响占空比。
计数需要开启中断。
5.相关代码改动
5.1PWM启动
配置发送脉冲个数
从定时器启动中断
PWM启动脉冲发送
__HAL_TIM_SET_AUTORELOAD(&htim3,10-1);
HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
5.2PWM关闭
void TIM3_IRQHandler(void)
{
if(__HAL_TIM_GET_FLAG(&htim3,TIM_IT_UPDATE)!=RESET)
{
__HAL_TIM_CLEAR_FLAG(&htim3,TIM_IT_UPDATE);
HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_2);
}
HAL_TIM_IRQHandler(&htim3);
}
6.运行