微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM8学习笔记——定时器定时功能和中断相关

STM8学习笔记——定时器定时功能和中断相关

时间:11-24 来源:互联网 点击:
定时器都差不多,无非就是计数,溢出了标志置位,如果中断允许的话产生一个中断。说到中断,STM8S105的中断向量表如下

时基单元:


在选用内部时钟的情况下,CK_PSC是由fmaster提供的,经过定时器预分频器分频产生CK_CNT时钟,然后作为一次计数的时基,举个例子,16M的内部RC,经过16分频,则CK_CNT为1M,那么定时1ms只需计数1000次。

数模式:

共有三种:向上,向下,中央对齐

以向上计数为例:计数器从0计数到用户定义的比较值(TIMx_ARR寄存器的值),然后重新从0开始计数并产生一个计数器溢出事件,同时,如果TIM1_CR1寄存器的UDIS位是0,将会产生一个更新事件(UEV)。

关于IAR中断函数的写法

asm("sim");//关全局中断

asm("rim");//开全局中断

#pragma vector=TIM2_OVR_UIF_vector (这里根据上面的中断向量表选择要进入的中断的向量)

__interrupt void TIM2_OVR_UIF(void)//__interrupt关键字表示中断函数
{
TIM2_SR1 &=~0x01; // 清除更新中断标记,这步不能漏掉,否则会连续进入中断程序

//内容
}

参考程序:(以TIM2为例)

void TIM2_Init(void)
{//定时器1初始化
CLK_PCKENR1|=0x20;//开启定时器1外设时钟
TIM2_ARRH=(1000-1)/256;//设定重装载值
TIM2_ARRL=(1000-1)%6;
TIM2_PSCR=4;//预分频
TIM2_IER=0x01;
TIM2_CR1=1;//边沿对齐,向上计数
}

#pragma vector=TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_UIF(void)
{
TIM2_SR1 &=~0x01; // 清除更新中断标记,这步不能漏掉,否则会连续进入中断程序
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top