历史上的今天
今天是:2025年01月03日(星期五)
2020年01月03日 | STM8学习笔记---定时器 TIM2功能实现
2020-01-03 来源:eefocus
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中闪烁一次。
史海拾趣
|
我也是刚刚收到友善支持的mini2440,非常感谢他们的支持,我原来用过一段时间的qq2440,上面的NANDFLASH是64m的而mini2440是128m的,昨天看了一个光盘中有64m、128m的烧写文件!不确定为什么要分成两个呢? 原来在qq2440上移植的u-boot是64m的由于1 ...… 查看全部问答> |
|
在载波恢复中,根据DD、RC-DD、极性判决的算法得到的结果是相位,为什么在论文上都是通过环路滤波后得到频率差的曲线?似乎DD、RC-DD、极性判决的算法似乎可以鉴频,可是算法出来的结果确是相位呢?… 查看全部问答> |
|
更注重安全 一系列安全事故的发生,例如Sony电芯在Dell的笔记本上起火,知名手机厂商的手机电池相继爆炸等,中国政府发布了手机充电器强制性的法令。在半导体行业TI等相继发布侧重充电安全的保护芯片bq24316等,同时大幅提高了充电管理芯片的耐 ...… 查看全部问答> |
|
DC/DC模块的电源纹波指标是一项很重要的参数。干净的电源是数字电路稳定工作的前提,也是模拟器件的各项参数的重要保障。为确定电源的质量,必须对DC/DC模块的输出纹波进行测量。但很多人测量得到的纹波值动辄上百mV,甚至几百mV, ...… 查看全部问答> |
|
今天找资料,突然返现有中文版的手册,哈哈哈哈!!!http://www.ti.com.cn/product/cn/msp430g2413 第一个文档看来貌似现在就G系列的有,其他的暂时未看到,看来TI越来越重视中国本土化了哈哈哈,好消息好消息!!!… 查看全部问答> |




