OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 7789|回复: 15

不知道为什么,STM8S的TIM4一直进不了中断

[复制链接]

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
发表于 2015-4-27 20:43:31 | 显示全部楼层 |阅读模式
5金钱
[C] 纯文本查看 复制代码
#include \"tim4.h\"
#include \"led.h\"

void TIM4_IT_UPDATE_Init(void)
{
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);
  
  TIM4_DeInit();//复位定时4
  
  ////128分频,自动重装载值125,16Mhz/(128*125)=1Khz
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0x7D);
  TIM4_SetCounter(0x7D);
  TIM4_ARRPreloadConfig(ENABLE);        //自动重装
  TIM4_UpdateDisableConfig(DISABLE);    //运行计数器溢出更新
  TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR);
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);     //清楚更新标志位
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//更新中断使能
  enableInterrupts();
  
  TIM4_Cmd(ENABLE);//使能定时器4
}

//#pragma vector=0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)//对应IAP的中断地址:0x8060
{
  int count=0;//每1ms进入一次中断
  count++;
//  GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
  if(count==1000)//1s中转换一次
  {
    GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
  }

  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}


一直进不了中断,在线调试发现,TIM4->SR中的中断标志位UIF=1后,就一直没有被清楚,说明一直没有进中断。。。麻烦各位大侠帮忙解答一下,STM8S的资料实在是太少了。。。手册都写的很模糊。。。

最佳答案

查看完整内容[请看2#楼]

回复【10楼】whut-showming: --------------------------------- 已经改为寄存器编写了,能进中断了,谢谢大家。
回复

使用道具 举报

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2015-4-27 20:43:32 | 显示全部楼层
回复【10楼】whut-showming:
---------------------------------
已经改为寄存器编写了,能进中断了,谢谢大家。
回复

使用道具 举报

  离线 

8

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-1-12
在线时间
0 小时
发表于 2015-4-27 22:54:59 | 显示全部楼层
//#pragma vector=0x19
被注释了
回复

使用道具 举报

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2015-4-28 17:42:21 | 显示全部楼层
回复【2楼】yuanzinpl:
---------------------------------
不注释就报错。。。。。求解。。
Error[Li006]: duplicate definitions for "_interrupt_25";
回复

使用道具 举报

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2015-4-29 08:32:51 | 显示全部楼层
回复【3楼】whut-showming:
---------------------------------
有没有哪位大哥能帮忙解答一下呀。。。在IAR环境下STM8S的中断根本不知道怎么写呢。
回复

使用道具 举报

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2015-4-29 08:33:08 | 显示全部楼层
回复【4楼】whut-showming:
---------------------------------
自己顶一下,千万不要沉了。。。
回复

使用道具 举报

  离线 

2

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2014-10-31
在线时间
1 小时
发表于 2015-4-29 08:53:15 | 显示全部楼层
#pragma vector = 0x19   
 __interrupt void time4_ovf( void )
{        
TIM2_SR1 = 0x00;// 清除更新标志;
t_10_cnt += 1;

if(t_10_cnt >= 100)//1s
{
    t_10_cnt = 0;
if(t_sleep)
{
  t_sleep -= 1;
}
f_updata_lcd = 1;
}
if(f_low == 0)
{
    get_key();
}
if(t_spi)
{
t_spi -= 1;
}
else
{
spi_cnt = 0;
spi_head = 0;
}
if(f_busy)
{
if(t_busy  < 200)
{
t_busy += 1;
}
}
else
{
t_busy = 0;
}
}
回复

使用道具 举报

  离线 

2

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2014-10-31
在线时间
1 小时
发表于 2015-4-29 08:53:34 | 显示全部楼层
就不会报错啊
回复

使用道具 举报

  离线 

2

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2014-10-31
在线时间
1 小时
发表于 2015-4-29 08:54:59 | 显示全部楼层
我以前是用timr2的,现在改为TIME4编译了一下,是不会报错的
回复

使用道具 举报

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2015-4-29 15:42:11 | 显示全部楼层
回复【8楼】brook_z:
---------------------------------
大哥,我不知道为什么,代码只要一加上
#pragma vector=0x19
这句,就会报错,错误如下:
Error[Li006]: duplicate definitions for "_interrupt_25"; 
就说重复定义了,不知道为什么,因为其实也不知道STM8S的中断函数到底要怎样写才好。
回复

使用道具 举报

  离线 

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2015-5-1 15:27:27 | 显示全部楼层
回复【9楼】whut-showming:
---------------------------------
没有人帮忙回答一下吗。。。。。?唉。。。卡了两天了。。。
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-8-31
在线时间
0 小时
发表于 2015-5-20 19:58:16 | 显示全部楼层
回复【11楼】whut-showming:
---------------------------------
IAR下
//8位基本定时器初始化
void init_TIM4(void)
{
 TIM4_PSCR=0x07;  //f=fck/2^(PSCR)
 TIM4_ARR=0x7D;   //1/(8M/128)*125=2ms
 TIM4_IER=0x01;  //允许更新中断
 TIM4_CR1=0x01;  //计数器使能,开始计数
}

//TIM4 8位定时器溢出中断
#pragma vector=TIM4_OVR_UIF_vector   //0x19
__interrupt void TIM4_OVR_UIF(void)
{
  TIM4_SR=0;
}
力拔山河兮盖世,时不利兮追不逝
回复

使用道具 举报

  离线 

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-12-27
在线时间
16 小时
发表于 2015-11-9 17:42:19 | 显示全部楼层
楼主为啥我的TIM4定时器中断,一直进入@far @interrupt void NonHandledInterrupt (void);
回复

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2013-11-16
在线时间
0 小时
发表于 2015-11-23 23:45:50 | 显示全部楼层
回复【13楼】huzi741:
---------------------------------
你可能是没清中断标志
回复

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2015-6-18
在线时间
13 小时
发表于 2015-11-25 12:43:21 | 显示全部楼层
回复【11楼】whut-showming:
---------------------------------
你好,请问你是软件仿真调试,还是用仿真器在STM8上进行硬件调试?
我这里的情况是软件仿真调试是进不了中断,但用硬件仿真可以进中断。
回复

使用道具 举报

  离线 

0

主题

8

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-8-9
在线时间
8 小时
发表于 2018-9-26 17:04:12 | 显示全部楼层
研究这问题了一下午,发现你的程序  //#pragma vector=0x19   有问题,不能因为报错就把它屏蔽掉,进入 stm8s_it.c 把重复的删掉就能进中断.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-13 15:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */