STM32F103 定时器级联TIM1 TIM2 组成32位定时器

2019-08-14 08:08发布

定时器1的配置程序, 功能如下: 通过通道1 TIM_TS_TI1FP1  形成外部触发,  同时作为主定时器
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_ICInitTypeDef        TIM_ICInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
       
        TIM_ICStructInit(& TIM_ICInitStructure);   //缺省设置

        //重新将Timer设置为缺省值
        TIM_DeInit(TIM1);
        //采用内部时钟给TIM2提供时钟源
        //TIM_InternalClockConfig(TIM2);
        //预分频系数为36000-1,这样计数器时钟为72MHz/36000 = 2KHz                             0.5ms
        TIM_TimeBaseStructure.TIM_Prescaler = 1-1;
        //设置时钟分割
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        //设置计数器模式为向上计数模式
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //  TIM_CounterMode_Down
        //设置计数溢出大小,每计2个数就产生一个更新事件
        TIM_TimeBaseStructure.TIM_Period = 65536-1;                                                   //   10*0.5=5ms               
        //重复计数,就是重复溢出多少次才给你来一个溢出中断
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
        //将配置应用到TIM2中
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

        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 = 0x0;
        TIM_ICInit(TIM1, &TIM_ICInitStructure);

        TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1);                                        //选择触发引脚
        TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update);                        //选择输出模式  主模式选择      这是级联的关键
        TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);                                 //从模式设置  触发模式
        TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);         //启动定时器的主从模式

以下是TIM2的配置, 主要就是配置成外部时钟模式,选择输入信号
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//       //重新将Timer设置为缺省值

        TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_External1);                        //外部时钟模式    外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器
        TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);                                //定时器1 的Trigger 0做为触发输入
这样就可以了


以上是花了两天时间做出来的,  在网上没有找到同样的例子, 在此发表.  有问题的请留言


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。