这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【CMSMotionEVB开发板】+03调试mcu的定时器0

共1条 1/1 1 跳转至

【CMSMotionEVB开发板】+03调试mcu的定时器0

高工
2025-12-30 18:37:03     打赏

一:定时器基础知识

包含2路可编程的32位/16位计数器,即TIMERO/TIMER1,为用户提供便捷的定时计数功能。

二:定时器的基本特征

可配置32位/16位向下计数器。

每个定时器都有独立预分频器。

提供单次触发,周期计数,连续计数三种计数操作模式。

支持芯片从睡眠模式唤醒。

三:功能描述:

3.1 单次触发模式

如果定时器工作在单次触发模式,使能定时器后,计数器从加载寄存器加载初值,向下计数,当计数器递减到O时,停止工作,同时产生中断。若要再次启动单次触发模式,需清零TMROS位,再置位TMROS位。(再次启动单次触发模式时,需注意TMROS位清零时,保持为0的时间须大于一个定时器计数时钟周期)

3.2 周期计数模式

如果定时器工作在周期计数模式,使能定时器后,计数器从加载寄存器加载初值,向下计数,当计数器递减到0时,计数器从加载寄存器加载初值,并继续计数,同时产生中断。

3.3连续计数模式

如果定时器工作在连续计数模式,使能定时器后,计数器从加载寄存器加载初值,向下计数,当计数器递减到O时,计数器加载最大值作为初值,并继续计数,同时产生中断。

3.4 延迟加载功能

当数据写入延迟加载寄存器时,数据在下一个TIMERCLK上升沿写入加载寄存器,若计数器已经开始计数,则会等待当前周期计数为0,再从加载寄存器中加载初值。

四:软件代码

void TMR0_Period_Count_Config(void)
{
        /*
        (1)设置Timer0 的时钟
        */
        CGC_PER11PeriphClockCmd(CGC_PER11Periph_TIMER01,ENABLE);/*打开Timer0的时钟*/
        TMR_ConfigClk(TMR0,TMR_CLK_DIV_256);                /*Timer0设置时钟分频为 1分频*/
        /*
        (2)设置Timer0 运行模式
        */        
        TMR_ConfigRunMode(TMR0,TMR_COUNT_PERIOD_MODE, TMR_BIT_16_MODE);                /*设置Timer0为16位周期计数模式*/
        TMR_DisableOneShotMode(TMR0);                                                                                /*关闭单次模式*/
        /*
        (3)设置Timer0 运行周期
        */                
        TMR_SetPeriod(TMR0,24999);                                /* 4800*Fclk*/                                
        /*
        (4)设置Timer0 中断
        */        
        TMR_EnableOverflowInt(TMR0);
        NVIC_EnableIRQ(TIMER0_IRQn);        
        /*
        (5)设置Timer0 中断优先级
        */        
        NVIC_SetPriority(TIMER0_IRQn,3);        
        /*
        (5)开启Timer0
        */        
        TMR_Start(TMR0);                        
}
这里初始化定时器0,实现1S中断进入一次中断,然后在中断中实现LED的电平翻转;

void TIMER0_IRQHandler(void)
{
        if(TMR_GetOverflowIntFlag(TMR0))
        {
                PORT_ToggleBit(PORT0,PIN5);
                PORT_ToggleBit(PORT0,PIN6);
                TMR_ClearOverflowIntFlag(TMR0);                
        }                        
}
这里使用官方的例程,实现定时器的初始化配置还是蛮方便的,不过就是定时器的分频系数太少,想要实现更多的计时周期,还是需要配置分频系数进行配合





关键词: CMSMotionEVB     定时器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]