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);==》立即进入定时器更新中断,不用定时等待
页: [1]
查看完整版本: 关于定时器,中途要修改定时时间,怎么让它生效