[AT32F403/403A]

关于定时器,中途要修改定时时间,怎么让它生效

[复制链接]
129|2
手机看帖
扫描二维码
随时随地手机跟帖
lordor|  楼主 | 2022-9-20 17:39 | 显示全部楼层 |阅读模式

现在有2个问题:
1 怎么动态修改修改定时时长
2 修改定时时长,怎么让定时器立即重新开始计数?

那位大侠能回复一下,不胜感谢。

除以下代码:

定时器中途修改:
    tmr_counter_enable(TMR1, FALSE);               
    tmr_counter_value_set(TMR1,300);     ==>这里修改好像不起作用。
tmr_counter_enable(TMR1, TRUE);




定时器1,配置初始化
    /* enable tmr1 clock */
    crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
    /* enable tmr2 clock */
    crm_periph_clock_enable(CRM_TMR2_PERIPH_CLOCK, TRUE);

    /* tmr1 configuration */
    /* 1秒计时1000000,定时最小 1us  */
    tmr_base_init(TMR1, BitTime-1, (ahb_freg_get() /1000000) - 1);
    tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);

    /* overflow interrupt enable */
    tmr_interrupt_enable(TMR1, TMR_OVF_INT, TRUE);
    nvic_irq_enable(TMR1_OVF_TMR10_IRQn, 0, 0);
    tmr_counter_enable(TMR1, FALSE);





使用特权

评论回复
muyichuan2012| | 2022-9-20 18:05 | 显示全部楼层
在定时器溢出中断函数里修改。

使用特权

评论回复
lordor|  楼主 | 2022-9-21 10:38 | 显示全部楼层
仔细看了源码,原来想法有问题,正确应该这样

             tmr_counter_enable(TMR2, FALSE);          
                tmr_period_value_set(TMR2,BitTime*2);   ==》这个函数修改定时周期
                //tmr_counter_value_set(TMR2,BitTime-1);      ==》这个函数,只改当次计数值
          tmr_counter_enable(TMR2, TRUE);
                tmr_event_sw_trigger(TMR2,TMR_OVERFLOW_SWTRIG);  ==》立即进入定时器更新中断,不用定时等待

使用特权

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

本版积分规则