[AT32F421]

如何使用定时器TMR1向下计数方式

[复制链接]
200|3
手机看帖
扫描二维码
随时随地手机跟帖
lvben5d|  楼主 | 2022-8-1 10:27 | 显示全部楼层 |阅读模式
本帖最后由 lvben5d 于 2022-8-3 01:01 编辑

向下计数方式有一个好处是 比较直观的从 你要计数值往0走。 而计数值在不同条件下 可以赋值, 当然向上计数模式也是可以 来获得同样功能。
        /* 48 000 000 * 1 / (47+1)  = 1us */
        tmr_base_init(TMR1, 1, 47);                   //1us  Cntclk
        tmr_cnt_dir_set(TMR1, TMR_COUNT_DOWN);        //向下定时器   用于串口1的LIN超时设置
        /* overflow interrupt enable */  
        tmr_flag_clear(TMR1, TMR_OVF_FLAG);       
        tmr_interrupt_enable(TMR1, TMR_OVF_INT, TRUE);

请问 赋值用的 是tmr_counter_value_set()函数  还是tmr_period_value_set() ?  

使用特权

评论回复
muyichuan2012| | 2022-8-1 10:30 | 显示全部楼层
建议看一下这个定时器使用指南 5885262e73ad992fed.png

AN0085_AT32_MCU_TMR_Start_Guide_ZH_V2.0.1.pdf

624.86 KB

使用特权

评论回复
xdqfc| | 2022-8-1 10:36 | 显示全部楼层
按照字面理解应该是前面那个,后面的是周期设定值,咱一般不喜欢用库函数,直接寄存器赋值,反而简简单单。

使用特权

评论回复
lvben5d|  楼主 | 2022-8-1 10:40 | 显示全部楼层
本帖最后由 lvben5d 于 2022-8-1 16:16 编辑
xdqfc 发表于 2022-8-1 10:36
按照字面理解应该是前面那个,后面的是周期设定值,咱一般不喜欢用库函数,直接寄存器赋值,反而简简单单。 ...

我的是向下计数模式哦。 GD32  我向上和向下 都试OK, 如果向上 则timer_counter_value_config(TIMER1, 0);   从0开始
timer_autoreload_value_config (TIMER1, xxx);  xxx= 你要的值
timer_enable(TIMER1);

如果是向下计数,则
timer_counter_value_config(TIMER1, xxx);   
timer_enable(TIMER1);

AT32F425 TMR1向上计数也调试通了, 唯一没调试通的就是TMR1向下计数模式 很容易就超时了~



使用特权

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

本版积分规则