STM8学习笔记---定时器 TIM2功能实现
程序员文章站
2022-06-09 11:36:58
...
STM8的TIM2、TIM3、TIM5是16位通用寄存器,他们的操作方法一样。
主要功能如下
相关寄存器如下:
如果只用到定时功能的话,需要用到的寄存器有自动装载寄存器ARR、预分频寄存器PSCR、事件产生寄存器EGR、状态寄存器SR、控制寄存器CR、中断使能寄存器IER。
此处用TIM2实验,定时器2初始化代码如下:
void Timer2_Init( void )
{
TIM2_ARRH = ( unsigned char )( 1000 >> 8 ); //定时1ms
TIM2_ARRL = ( unsigned char )( 1000 );
TIM2_PSCR = 0x04; // 16M / (2^4) =1M //分频值
TIM2_EGR = 0x01; //产生更新事件
TIM2_SR1 = ( ~0x01 ); //清除更新中断标志
TIM2_CR1 |= 0x01; //使能计数器
TIM2_IER |= 0x01; //更新中断使能
}
首先设置自动重装载值,此处设置为1000,也就是计数器从0开始计数,当计数到1000时,产生一个中断,然后从0开始重新计数。
下来设置分频系数
系统默认使用的是内部16M晶振,设置分频值为4,定时器频率就为16M / ( 2^4 ) = 1MHz,计数值设置为1000,这样中断一次就是1ms。
下来使能计数器,开启更新中断。这样定时器初始化工作就设置完成了。
下来编写中断函数
#pragma vector = 15 // IAR中的中断号,要在STVD中的中断号上加2
__interrupt void Timer2_Handle( void ) //1ms 定时中断
{
TIM2_SR1 = ( ~0x01 ); //清除更新中断标志
time_cnt++;
if( time_cnt > 999 )
{
time_cnt = 0;
LED = !LED;
}
}
进入中断函数中首先清除中断标志位,下来统计中断次数,因为中断1次为1ms,当时间到达1s后,对LED灯状态取反。这样通过定时器2的定时功能就可以实现LED灯1s中闪烁一次。
推荐阅读
-
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
-
安卓开发学习笔记(六):如何实现指定图片定时开屏功能?
-
WPF学习笔记(1):DataGrid单元格实现逐键过滤功能
-
GB28181学习笔记4 实现Server端获取目录功能(NodeJS版)
-
SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
-
STM8学习笔记---定时器 TIM4功能实现
-
STM8学习笔记---定时器 TIM1功能实现
-
STM8学习笔记---定时器 TIM2功能实现
-
ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
-
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能_jquery