触发模式是定时器三种从模式之一,输入端选中某一事件可以触发定时器开始工作,流程十分简单大家配合图看理解更为容易
TI2一个上升沿作为触发事件,使能计数器。而TI2上升沿和计数器启动计数之间的延时,取决于TI2输入端的重同步电路。触发后会对TIF置一个标志位。
而本篇文章介绍的重点是外部时钟模式2 + 触发模式
我们平常计数器使用的时钟是内部时钟,而所以要通过一系列分频操作进行准确计数,而当我们希望能利用外部时钟作为时钟信号源,就可以利用外部时钟模式2 + 触发模式这一方法。
因为通过外部时钟模式2我们可以获得外部ETR引脚的信号,再利用从模式的触发模式这一方法可以以外部时钟信号,加之内部信号TI2进行计数。
实际效果如图,仍然是需要TI1的一个电平跳变才能开始计数器计数。
手册中对相关寄存器配置有三步:配置外部触发电路、选择输入捕获源及时钟处理、配置触发模式
当然我们还是使用标准库来完成这一操作
void TIM_Config(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ETRClockMode2Config(TIMx, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x00);
// 时基单元
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);
// TI1
TIM_ICStructInit(&TIM_ICInitStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x00;
TIM_ICInit(TIMx, &TIM_ICInitStructure);
// 配置触发模式
TIM_SelectInputTrigger(TIMx, TIM_TS_TI1FP1);
TIM_SelectSlaveMode(TIMx, TIM_SlaveMode_Trigger);
TIM_SelectMasterSlaveMode(TIMx, TIM_MasterSlaveMode_Enable);
TIM_Cmd(TIMx, ENABLE);
}