打印
[STM8]

为什么stm8s103f3p6 定时器不进入中断

[复制链接]
2254|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cpl_1|  楼主 | 2013-10-31 18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cpl_1 于 2013-10-31 18:35 编辑

请问一下,我使用定时器4,怎么老是进不了中断呢?而通过查询溢出标志的方式应用timer4是可行的,说明定时器已经启动了,可是中断还要在哪里设置呢?谢谢!
我用的编译环境是:IAR FOR STM8 v1.3。
#include<iostm8s103f3.h>
#include "intrinsics.h"
/********定时器4初始化**********/
void Tim4_Init(void)
{ CLK_PCKENR1 |=0x10;//默认开启时钟
   TIM4_PSCR =0x05; // 分频
  TIM4_EGR |= 0x01; //

  TIM4_ARR = 0xfa; //重装载值
  TIM4_IER_UIE = 1; //更新中断使能
  TIM4_CR1_ARPE = 1; //预装载使能

  TIM4_CR1_CEN = 1; //启动计数器
  __enable_interrupt();//使能总中断
}

/********定时器4中断程序**********/
#pragma vector = TIM4_OVR_UIF_vector
  __interrupt void TIM4_UIF_HANDLER(void)
  {
    static unsigned int i;
    i++;
    if(i == 100)
    {
    i = 0;
    PA_ODR_ODR3 = ~PA_ODR_ODR3;
    }
    TIM4_SR_UIF = 0;
  }



沙发
常心| | 2013-11-1 09:06 | 只看该作者
有没安装中断入口

使用特权

评论回复
板凳
cpl_1|  楼主 | 2013-11-1 09:48 | 只看该作者
#pragma vector = TIM4_OVR_UIF_vector 这个应该就是吧。

使用特权

评论回复
地板
cpl_1|  楼主 | 2013-11-1 13:55 | 只看该作者
执行完 __enable_interrupt();//使能总中断  这一句后,寄存器CPU_CCR=0X25;就是说I1:I0=1:0。可是程序在这以后就不继续执行下去了。主循环程序中的语句都不执行呢。
main()
{
   ...
__enable_interrupt();
while(1)
{//功能语句}
}

使用特权

评论回复
5
cpl_1|  楼主 | 2013-11-1 23:55 | 只看该作者
原因找到了。不是定时器设置的问题。而是程序中有这两条蓝色标记的语句:
PC_DDR |= 0XE0;//将PC.7,,6,5 设为输出  //pc2,pc1看起来设置为了输入,但其实该芯片没有这两个引脚
PC_CR1 |= 0XE0;// 推挽输出
PC_CR2 &= ~0XE0;// MAX SPEED 2MHZ
//PC_CR2 |=~0XE0;// 错误的语句,看作是误操作了PC2,PC1引脚,使中断不能进入。
暂时看起来,这个程序不进入中断,可能是因为将PC_DDR的bit2,bit1位设置为0(复位值也是0),并且又将PC_CR2的bit2,bit1位设置为1(复位值是0),可是STM8S103F3P6又没有对应的PC2,PC1引脚,于是程序出错,从而不能进入定时中断,也不执行其它语句。不过如果不用中断,其它语句是可以正常执行的,定时器的溢出标志也可以软件查询到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

278

帖子

1

粉丝