|
这一期给大家带来定时器的使用。控制对象还是开发板上那个孤零零的LED,当然首先还是初始化定时器,先把代码贴出来。
void Timer0_Init(){ DioOen(pADI_GP1,0x8); WdtCfg(T3CON_PRE_DIV1,T3CON_IRQ_EN,T3CON_PD_DIS); ClkDis(CLKDIS_DISSPI0CLK| CLKDIS_DISSPI1CLK| CLKDIS_DISI2CCLK|CLKDIS_DISUARTCLK|CLKDIS_DISPWMCLK| CLKDIS_DIST1CLK| CLKDIS_DISDACCLK| CLKDIS_DISDMACLK| CLKDIS_DISADCCLK); ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG); GptCfg(pADI_TM0,TCON_CLK_UCLK,TCON_PRE_DIV256, TCON_MOD_PERIODIC|TCON_UP_DIS|TCON_RLD_EN|TCON_ENABLE); GptLd(pADI_TM0,31249); NVIC_EnableIRQ(TIMER0_IRQn); }这次使用的是定时器0,在初始化函数中前四行代码想必大家都有点印象了吧,没错!就是上一期中初始化LED引脚的程序。下一行代码是选用系统内部时钟,即16MHz,采用的256分频。然后接下来的一行写的是定时器的预装载值。这一次我的期望是LED每半秒闪烁一次,所以预装载值是31249,具体的计算公式如下:
定时时间=装载值*(分频数+1)/系统时钟
接触过stm32的大神对这个公式肯定再熟悉不过了,没接触过的呢要牢牢记住这个公式了哟~经过三下五除二的运算,预装载值就这样算出来了。最后一行代码是使能定时器的中断。这样就初始化完成了,接下来是对定时器中断函数的编写了。老规矩,先看代码。
void GP_Tmr0_Int_Handler(){ GptClrInt(pADI_TM0,TSTA_TMOUT); DioTgl(pADI_GP1,0x08); }由于只是单纯的控制LED的闪烁,所以中断函数非常简单。如果大家不会写定时器的中断函数名,可以去下面这个文件中进行查找,就会找到定时器0对应的中断函数名称。
在中断函数的第一行代码的意义是清除定时器0的溢出中断标志,这一点但凡是学过51单片机的人也都会知道的,所以这里就不再赘述了。下一行是控制LED闪烁,这的代码在上一期也介绍过了。然后在主函数中调用定时器初始化函数即可,将程序下载到开发板上就可以看到每半秒闪烁一次的LED了。 |
|