嵌入式开发学习日志30——stm32之定时器中断简单项目练习
在了解了定时器中断的相关知识后,就可以来做一些简单的项目练习了,这里还是以最通俗易懂的点灯操作为例。
由定时器中断控制的点灯操作和其他中断一样,在中断产生前灯泡是不会亮的,但是一旦中断产生,中断函数就会执行,此时灯泡就会亮起。
但是值得注意的是,相比于用开关控制LED的外部中断EXTI,定时器中断每隔固定的时间就会让灯泡自动亮起,实现一个小的“自动化”操作,可谓解放双手。
下面让我们来看看定时器中断的部分怎么写。
首先还是头文件的书写,这是既定操作,不过这里的初始化函数中需要带入参数,以便根据你的需要调整定时器的参数。
首先,由于定时器时钟模块挂载在了APB1上,所以首先要开启对应的时钟。下面就是对定时器进行初始化配置。
第一个TIM_Period,需要传入的就是你需要计数的值,这个参数由你传进去的自动重载值arr决定。第二个Prescaler决定的是分频的系数,这同样由你传入的psc的数值决定。第三个就是决定计数方式的CounterMode了,这里正常选择向上计数,如果向下计数,它计数方式是从自动重载值往下减到0为止。
在初始化参数后,我们还需要对定时器触发中断的方式进行设定,毕竟它的方式有四种。这里选择计数引发的更新中断。
为了防止开启中断后立即进入中断,我们需要先将中断标志清除,要用到clearIT函数。
下面就是中断操作绕不开的NVIC初始化,具体步骤在之前详细介绍过了,这里就不多赘述,但要注意的是,定时器通道也需要通过查表来确认,不能随便写。
最后,最最重要的是,定时器使能,也就是所谓的开启定时器,否则你就干瞪眼看着灯泡啥事儿都不发生吧。
定时器中断服务函数的编写和外部中断基本差不都,也不需要在头文件中声明,同时也要注意最后清除中断标志的操作,否则会一直产生中断。
(最近一直很忙,日更的学习日志可能要变成不定期更新了,在这里对于愿意看我写的菜鸟文章的读者说声抱歉)