定时器的框图中有一个TRGO信号输出,此信号可以用来触发ADC、DAC、其他定时器等。
此信号怎么产生呢?
要使用 TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); 函数来选择TRGO信号的事件源,这个函数给TIMx_CR2寄存器的位6到位4赋值,位6到位4是MMS[2:0],描述如下:
如果MMS[2:0]值为000:当TIMx_EGR寄存器的UG位有效,就会触发TRGO输出。
如果MMS[2:0]值为010:当产生更新事件时,就会触发TRGO输出。
另外:
当配置MMS[2:0]值为010:当产生更新事件时,就会触发TRGO输出。还可以配合重复计数寄存器来使用:
即重复多少次后才会产生一个更新事件。比如以前是1S产生一个更新事件,当把RCR的值配置为3时,就会变成3秒产生一个更新事件。配置方法如下:
TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD; //计数周期
TIM_TimeBaseStructure.TIM_Prescaler = PWM_PRSC; //分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2; //设置外部时钟TIM1ETR的滤波时间
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; //中央对齐模式1,从0计数到 TIM_Period 然后开始减到0,循环
TIM_TimeBaseStructure.TIM_RepetitionCounter = REP_RATE; //重复计数,就是重复溢出多少次才产生一个溢出中断(产生更新事件,用来触发ADC采样)
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);