定时器同步有多种功能,本文介绍使用一个定时器作为另一个定时器的预分频器。
所谓预分频,指定时器1输出一个时钟信号,作为定时器2的输入信号。而通过配置定时器2的时基单元,可以将定时器2作为定时器1的一个分频信号。举个例子,定时器1输出10kHZ的时钟,而定时器210分频,也就是输出1kHZ的信号,那我们就称之为**使用一个定时器作为另一个定时器的预分频器。**下面是手册中的示意图,帮助大家理解
主要过程就是定时器1主模式输出TRGO,进入定时器2的ITRx,,在选择为TRGI后选择从模式,进入时基单元,最后就可以获得一个分频后的时钟信号,流程用红笔标出
下面是一个配置代码,主频72MHZ,定时器1 10kHZ,定时器2 1kHZ
cs
void TIM1_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
// 配置定时器1 输出10kHZ
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Prescaler = 7;
TIM_TimeBaseStructure.TIM_Period = 899;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update);
TIM_Cmd(TIM1, ENABLE);
}
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 配置定时器2 输出1kHZ
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Prescaler = 0; // 不使用预分频
TIM_TimeBaseStructure.TIM_Period = 9;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 配置TIM2为从模式,使用外部时钟模式1,使用ITR0作为触发源
TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_External1);
TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR0);
TIM_Cmd(TIM2, ENABLE);
}