STM8S定时器基本中断定时

本文详细介绍了STM8S系列MCU的定时器分类和特性,包括高级定时器TIM1、通用定时器TIM2-TIM5以及基本定时器TIM4和TIM6。讲解了各个定时器的计数位数、自动重装载功能、分频选项以及中断设置。重点讨论了基本中断定时的实现,涉及自动装载寄存器、计数器、中断使能寄存器、状态寄存器和控制寄存器的操作,并给出了不同定时器中断定时的示例应用。
摘要由CSDN通过智能技术生成

STM8S的定时器分三类;
高级定时器TIM1
通用定时器TIM2,TIM3,TIM5
基本定时器TIM4,TIM6

其中除TIM4和TIM6是8位定时器外,其他的定时器都是16位计数的。
每个定时器都具有自动重装载功能
每个定时器的时钟都可以由系统时钟独立分频而来,其中高级定时器TIM1可以选择65536种分频,分频系数为1-65536.通用定时器可以选择16种分频,基本定时器只能选择8种分频。
除了TIM1可以选择计数方向外,其他的定时器都是向下计数的,而技术手册上说的向上计数是错误的。

基本中断定时用到的寄存器;

一、自动装载寄存器高位(TIMx_ARRH) 和 自动装载寄存器低位(TIMx_ARRL)
这两个寄存器复位值都是0x00。需要注意的是,高级定时器TIM1和通用定时器TIM2,TIM3,TIM5都是16位计数的定时器,操作寄存器的时候要先写高8位再写低8位。而基本定时器TIM4,TIM6是8位计数的定时器,是不分高8位和低8位的,所以操作基本定时器的时候寄存器名字是(TIMx_ARR)。 操作重装载寄存器的时候更新的值不会马上写入重装载寄存器,而是等到有中断产生的时候操作的数值才会写入寄存器,当然也可以用软件的方法产生中断。(这里省略了影子寄存器的概念,感觉那玩意就是忽悠人的)

二、计数器高位(TIMx_CNTRH) 和计数器低位(TIMx_CNTRL)
计数器高位和计数器低位复位值都是0x00,其中只有高级定时器TIM1和通用定时器TIM2,TIM3,TIM5才会用到这两个计数器,而基本定时器用的计数器是(TIMx_CNTR)。 最好在开启定时器前清零下计数器。基本定时器中(位5:1保留)。

三、中断使能寄存器(TIMx_IER)
这个寄存器对所有定时器都通用,复位值0x00。
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
保留 TIE 保留 保留 CC3IE CC2IE CC1IE UIE
RW RW RW RW RW RW

位7 保留
位6 TIE:触发中断使能
0;触发中断禁用
1;触发中断使能
位5:4 保留
位3 CC3IE:允许捕获/比较3中断
0;禁止捕获/比较3中断
1;允许捕获/比较3中断
注;基本定时器中该位保留
位2 CC2IE:允许捕获/比较2中断
0;禁止捕获/比较2中断
1;允许捕获/比较2中断
注;基本定时器中该位保留
位1 CC1IE:允许捕获/比较1中断
0;禁止捕获/比较1中断
1;允许捕获/比较1中断
注;基本定时器中该位保留
位0 UIE:允许更新中断
0;禁止更新中断
1;允许更新中断

四、状态寄存器 1(TIMx_SR1)
复位值0x00,这个寄存器对高级定时器和通用定时器适用,但是基本定时器的状态寄存器名字是(TIMx_SR) ,对应的功能是一样的,基本定时器中(位5:1保留)。
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
保留 TIF 保留 保留 CC3IF CC2IF CC1IF UIF
Rc_w0 Rc_w0 Rc_w0 Rc_w0 Rc_w0 Rc_w0

位7 保留
位6 TIF:触发中断标志
当产生触发事件时该位由硬件置1(在TRGI信号上检测到有效的触发沿,当选择门控模式时,上升及下降沿都有效)。它由软件清零。
0;没有触发事件发生
1;触发中断悬挂
注意;在TIM2,TIM3中该位保留
位5:4 保留
位3 CC3IF:捕获/比较3中断标志
位2 CC2IF:捕获/比较2中断标志
位1 CC1IF:捕获/比较1中断标志
如果通道CC1配置为输出模式;
当计数器值与比较值匹配时该位由硬件置1,由软件清零
0;无匹配发生
1;TIMX_CNT的值与TIMX_CCR1的值匹配
如果通道CC1配置为输入模式;
当捕获事件发生时该位由硬件置1,由软件清零或者通过读TIMX_CCR1L清零
0;无输入捕获产生
1;计数器值已被捕获(拷贝)至TIMX_CCR1(在IC1上检测到与所选极性相同的边沿)
位0 UIF:更新中断标志
当产生更新事件时该位由硬件置1,它由软件清零。
0;无更新事件产生
1;更新事件等待响应。当寄存器被更新时该位由硬件置1
-若TIMX_CR1寄存器的UDIS=0,计数器溢出
-若TIMX_CR1寄存器的UDIS=0、URS=0,当TIMX_EGR寄存器的UG=1时产生更新事件(软件对计数器CNT重新初始化)

五、控制寄存器 1(TIMx_CR1)
复位值0x00,这个寄存器对所有定时器适用。
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
ARPE 保留 保留 保留 OPM URS UDIS CEN
rw rw rw rw rw

位7 ARPE:自动重装载允许位
0;TIMX_ARR寄存器没有预装载寄存器可以缓冲,可以直接对其操作
1;TIMX_ARR寄存器通过预装载寄存器可以缓冲
位6:4 保留
位3 OPM:单脉冲模式
0;在发生更新事件时,计数器不停止
1;在发生下一次更新事件(清除CEN位)时,计数器停止
位2 URS:更新请求源
0;当更新请求使能时,只要寄存器被更新了就产生更新中断
1;当更新请求使能时,只有计数器溢出才会产生更新中断
位1 UDIS:禁止更新
软件通过该位允许/禁止UEV事件的产生
0;只要计数器溢出,或者产生了软件更新,或者通过时钟/触发模式控制器产生了硬件复位,就产生更新事件
1;不产生更新事件,影子寄存器(ARR,PSC,CCRX)保持他们的值。如果设置了UG则计数器和预分频器被重新初始化。
位0 CEN:使能计数器
0;禁止计数器
1;使能计数器

六、TIMX_PSCR预分频寄存器
这个寄存器在不同的定时器中有不同特点使用方法,在具体应用中介绍。

七、高级定时器TIM1中断定时的使用
高级定时器除了用到上面的寄存器外,还用到时钟预分频寄存器TIM1_PSCRH和TIM1_PSCRL,高级定时器可以选择对系统时钟在1-65536之间的任意分频,因为两个预分频寄存器共16位,最大计数刚好是65536。先写高8位再写低8位。

例;用TIM1中断定时,1ms进一次中断,LED灯1s翻转一次,向下计数模式

/*  这个工程模板是别人的,但是这个头文件不影响使用 ,在自己的工程中需更改为自己的头文件 */

#include<iostm8s105k6.h>


unsigned int ms_count=0;//毫秒计数


/************************************

各种函数声明

************************************/
void InitLED();
void InitTIM1();

int main(void)
{
  CLK_CKDIVR = 0x00;  //CPUDIV = 1 HSIDIV = 1  内部时钟 = 16Mhz 


  asm("sim");         //先关闭总中断

  InitLED();          //各种初始化
  InitTIM1();

  asm("rim");         //打开总中断
  while(1);           //进入死循环,等待定时器周期中断
}


/*********************************************************

定时器1更新中断处理函数
中断向量也可以用十进制代替,这里使用16进制是为了方便而已,
因为头文件的宏定义就是用16进制的,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值