打印

stm32 定时器级联

[复制链接]
1124|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sitaijun|  楼主 | 2019-9-24 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tianxj01| | 2019-9-24 11:04 | 只看该作者
前面一个是16位定时器,后面一个是从模式计数器,则拼起来精度基本上可以达到32,但他们绝不是简单的32位拼接关系。是乘法关系。
32位,需要32位同事比较,而不是上下2个不同16位级联就可以了。
因此,真正做拼接的32位,则低16位的计数器开始必须是最高满位计数即0XFFFF模式,等后16位计数器计数到高16位比较值,发生中断,中断函数更新低位计数器,把低位比较值送进去,这样,高位和低位比较值,是可以直接拼成32位计数器的。

使用特权

评论回复
板凳
sitaijun|  楼主 | 2019-9-24 11:41 | 只看该作者
tianxj01 发表于 2019-9-24 11:04
前面一个是16位定时器,后面一个是从模式计数器,则拼起来精度基本上可以达到32,但他们绝不是简单的32位拼 ...


        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //clock

        TIM_TimeBaseStructure.TIM_Period = 4999;        //设置在下一个更新事件装入活动的自动重装载寄存器周期的值      
        TIM_TimeBaseStructure.TIM_Prescaler = 799;               //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位


        TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);                   //选择输出模式  主模式选择      这是级联的关键
        TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);           //启动定时器的主从模式

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //clock

        TIM_TimeBaseStructure.TIM_Period = 4999;        //设置在下一个更新事件装入活动的自动重装载寄存器周期的值      
        TIM_TimeBaseStructure.TIM_Prescaler = 79;               //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

        // TIM_SlaveMode_Trigger        // TIM_SlaveMode_External1        // TIM_SlaveMode_Gated
    TIM_SelectSlaveMode (TIM3, TIM_SlaveMode_External1);// 从模式外部触发模式        //外部时钟模式    外部时钟模式1 – 选中的触发输入(TRGI)的上升沿驱动计数器
        TIM_SelectInputTrigger (TIM3, TIM_TS_ITR1);// 触发选择,ITR1 即 TIM2

//        TIM_ITRxExternalClockConfig(TIM3, TIM_TS_ITR1);

        TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

        TIM_Cmd(TIM2, ENABLE);
        TIM_Cmd(TIM3, ENABLE);

帮看看这样的行吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝