你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
Sitaijun 提问时间:2019-9-24 10:36 /
求助大神, 只要基础定时器, 到了时间产生中断,但是需要32位的。 是不是可以用TIM2触发TIM3,级联定时?

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

无法进入中断, 求解决。


收藏 评论10 发布时间:2019-9-24 10:36

举报

10个回答
wenyangzeng 回答时间:2019-9-24 11:41:20
定时器中断里多一个32位变量就够了,中断到来变量加1,

lwg8458 回答时间:2019-9-24 11:12:39
不必32位吧
Sitaijun 回答时间:2019-9-24 11:40:14

额,有需要,不然也不会要32位的。
Sitaijun 回答时间: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不是外部触发
应该是触发模式
七哥 回答时间:2019-9-24 17:30:27
定时器级联触发是可以的。

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

Sitaijun 回答时间:2019-9-25 08:45:04
toofree 发表于 2019-9-24 17:30
定时器级联触发是可以的。

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

换不了型号了,指定了
Sitaijun 回答时间:2019-9-25 08:45:35
mylovemcu 发表于 2019-9-24 14:30
TIM_SelectSlaveMode (TIM3, TIM_SlaveMode_External1);// 从模式外部触发模式

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

TIM_SelectSlaveMode (TIM3, TIM_SlaveMode_Trigger);
使用了这个也没有用
Glenxu 回答时间:2019-10-12 09:27:16
如果是MS级定时们可以考虑用SYSTICK定时器,怎么折腾都行,多做几个变量。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版