STM8 Tim4定时器问题

2019-07-19 20:45发布

我不清楚这个定时器的时钟源是哪里来的,计数方向是向上还是向下计数,自己这里有两个代码,得出了不同的结论.....


代码1:
////////////////////////////////////////////////////////////////////////////////////////////////
#include "IOSTM8S105K4.h"
unsigned char i=0;

void Init_Timer4(void)
{
    TIM4_CR1=0x01;//使能计数器
  //TIM4_IER=0x00;
    TIM4_IER=0x01;//更新中断使能
    TIM4_EGR=0x01;
    TIM4_CNTR=255;//计数器值
    TIM4_ARR=255;//自动重装的值
    TIM4_PSCR=0x07;//分频值

}
void Init_GPIO(void)
{
    PE_DDR|=0x20;
    PE_CR1|=0x20;
    PE_CR2|=0x00;
}

/*
中断
声明一个中断向量,说明如下:

#pragma vector=0x02
__interrupt void interrupt_handler(void)
{

}
说明:
#pragma vector:
是IAR中断向量指令
=0x02 :
其数字代表中断向量编号。STM8的地址是从0x00800开始,IAR的中断编号从0开始。中断向量号依次按照中断地址递增。如:
复位向量是0x008000,中断向量号是0x00
TRAP的中断地址是0x008004中断向量号是0x01
SPI中断号是0x0C;详细见下表
__interrupt void interrupt_handler
(void):
是声明一个中断函数,注意interrupt是两个下划线,interrupt_handler是中断函数名字,可自己定义

*/
#pragma vector=TIM4_OVR_UIF_vector//0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)//对应IAP的中断地址:0x8060
{
  //asm("JP 0x9060 ");
      i++;
      TIM4_SR=0x00;
      if(i==61)
      {
 E_ODR^=0x20;
 i=0;
      }
      //return;
}

int main( void )
{
    Init_GPIO();
    Init_Timer4();
    asm("rim");//开全局中断
    while(1);
    //return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
代码1的延时是1S


代码2:
//////////////////////////////////////////////////////////////////////////////////////////////


void Timer4_Init()      //8位基本定时器
{
    TIM4_IER=0X00;      //禁止中断
    TIM4_PSCR=0x07;     //预分频值  16Mhz/128
    TIM4_CNTR=0;        //计数器初始值                
    TIM4_ARR=255;       //自动重装的值
    TIM4_EGR=0x01;      //计数器重新初始化并产生寄存器更新
    TIM4_IER=0x01;      //使能更新中断
    TIM4_CR1=0x01;      //使能计数器   
}

#pragma vector=0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)
{
  i++;
  TIM4_SR=0X00;  //中断状态寄存器清0
  if(i==61)
  {
    PE_ODR^=0X20;
    i=0;
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////
代码2的延时不是1S ,而是 0.125秒


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
绝封于孽镜
1楼-- · 2019-07-19 22:15
已解决,错误是因为我两个代码的时钟初始化有区别,STM8上电默认时钟是2Mhz,计数器是递减计数器,手册上说是递增计数器是错误的。
正点原子
2楼-- · 2019-07-19 23:24
 精彩回答 2  元偷偷看……
绝封于孽镜
3楼-- · 2019-07-20 04:44
怎么没人解决呢?
muniao
4楼-- · 2019-07-20 09:10
回复【3楼】绝封于孽镜:
---------------------------------
你代码1是2m频率
代码2是16m频率
绝封于孽镜
5楼-- · 2019-07-20 11:54
 精彩回答 2  元偷偷看……
muniao
6楼-- · 2019-07-20 17:40
回复【6楼】绝封于孽镜:
---------------------------------
呵呵呵不是没有2M的乜,还看过
ps这论坛大爷的多啊

一周热门 更多>