sitaijun1107 发表于 2019-9-24 10:36:39

没有32位定时器, 想要一个32位定时器,是不是可以级联?.

求助大神, 只要基础定时器, 到了时间产生中断,但是需要32位的。 是不是可以用TIM2触发TIM3,级联定时?

        TIM_TimeBaseInitTypeDefTIM_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);

无法进入中断, 求解决。


wenyangzeng 发表于 2019-9-24 11:41:20

定时器中断里多一个32位变量就够了,中断到来变量加1,

lwg8458 发表于 2019-9-24 11:12:39

不必32位吧:L

sitaijun1107 发表于 2019-9-24 11:40:14

lwg8458 发表于 2019-9-24 11:12
不必32位吧

额,有需要,不然也不会要32位的。

sitaijun1107 发表于 2019-9-24 11:45:48

wenyangzeng 发表于 2019-9-24 11:41
定时器中断里多一个32位变量就够了,中断到来变量加1,

是想要两个计时器, 高16位作为一个值,低16位作为一个值。 不是简单的得到加到32位数。

wenyangzeng 发表于 2019-9-24 14:23:39

sitaijun1107 发表于 2019-9-24 11:45
是想要两个计时器, 高16位作为一个值,低16位作为一个值。 不是简单的得到加到32位数。 ...
那就再变通一下,设置2个16位变量就得了。

mylovemcu 发表于 2019-9-24 14:30:33

TIM_SelectSlaveMode (TIM3, TIM_SlaveMode_External1);// 从模式外部触发模式

从模式不应该配置为外部触发   TIM2不是外部触发
应该是触发模式

toofree 发表于 2019-9-24 17:30:27

定时器级联触发是可以的。

如果要硬件32位定时器吗?可以换个型号

sitaijun1107 发表于 2019-9-25 08:45:04

toofree 发表于 2019-9-24 17:30
定时器级联触发是可以的。

如果要硬件32位定时器吗?可以换个型号

换不了型号了,指定了

sitaijun1107 发表于 2019-9-25 08:45:35

mylovemcu 发表于 2019-9-24 14:30
TIM_SelectSlaveMode (TIM3, TIM_SlaveMode_External1);// 从模式外部触发模式

从模式不应该配置为外部触 ...

TIM_SelectSlaveMode (TIM3, TIM_SlaveMode_Trigger);
使用了这个也没有用
页: [1] 2
查看完整版本: 没有32位定时器, 想要一个32位定时器,是不是可以级联?.