为什么使用STM32F103C8T6定时器的级联,主要是因为某些对于计时要求高的场合,而STM32F1单片机16位的定时器最多计数65535,那么很明显us级别的计时只能维持65.535ms,有时候解算过程可能不止65.535ms,因此需要级联一个32位定时器作为计数器或者计时器。
那么,在使用SMT32F1的定时器级联前,首先需要知道哪些可以级联以及定时器Master(主)Slave(从)关系,可以参见这篇博文:级联关系图
然后就是铺代码了:
(这段代码来自第七实验室开放的AHRS姿态融合中的一段,我对其中每一步都做了注释,因为姿态解算需要用到积分,所以计时器很重要,同时Kalman滤波计算量大,在STM32F1平台上用时比较长,必须使用定时器级联才能获取十分准确的时间)
定时器配置:
/**************************实现函数********************************************
*函数原型: void Initial_Timer3(void)
*功 能: 初始化TIM2为高16位 TIM3为低16位
*输入参数: 无
*输出参数: 没有
*******************************************************************************/
void Initial_Timer3(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE); /*开启时钟*/
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 0xffff; /*自动重装值 即从0计数到0xffff*/
TIM_TimeBaseStructure.TIM_Prescaler = 0x0<