你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

定时器中断求助  

[复制链接]
飞翼我的心 提问时间:2016-11-24 08:08 /
开启定时器中断定时后,在主程序中我在某处中断使能位置零(TIMx_IER=0X00)正常来说应该返回到主程序中,但是出现单片机无法启动或者复位的情况,求解额
收藏 1 评论30 发布时间:2016-11-24 08:08

举报

30个回答
霹雳之火 回答时间:2016-11-24 16:06:20
飞翼我的心 发表于 2016-11-24 14:03
void TIM4_Init(void)
{
   TIM4_IER=0X00;

你用的是stm8吧,case 2中TIM4_IER=0X00是禁止中断吧    不过还是没理解楼主的意思。
PS 如果是stm8的问题 最好可以到stm8板块进行提问

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

飞翼我的心 回答时间:2016-11-24 14:03:13
霹雳之火 发表于 2016-11-24 13:49
楼主把关键部分代码贴出来吧

void TIM4_Init(void)
{
   TIM4_IER=0X00;
   TIM4_PSCR=0X04;
   TIM4_CNTR=0X00;
   TIM4_ARR=0X09;
   TIM4_IER=0X01;
   TIM4_CR1=0X01;
}
#define TIM4_OVR_UIF_vector 0x19
#pragma vector=TIM4_OVR_UIF_vector
__interrupt void TIM4_OVR_UIF_IRQHandler(void)
{
  TIM4_SR=0X00;
  switch(flag)
{
  case 1:
count14++;
if(count14==3)
{PWMOFF2();}
if(count14==4)
{PWMON();count14=0}
break;
case 2:
TIM4_IER=0X00;count14=0;break;
}
}
正常应该在case 2后关闭中断回到主程序,但是偶尔性的会出现无法启动
myfocus-2048857 回答时间:2016-11-24 09:16:52
等待高人回答
霹雳之火 回答时间:2016-11-24 13:49:36
楼主把关键部分代码贴出来吧
小小超 回答时间:2016-11-24 15:35:30
帮顶上吧。
飞翼我的心 回答时间:2016-11-24 16:28:02
霹雳之火 发表于 2016-11-24 16:06
你用的是stm8吧,case 2中TIM4_IER=0X00是禁止中断吧    不过还是没理解楼主的意思。
PS 如果是stm8的问题 ...

我看这边人气高点。。。就是我打算在主程序里禁止中断,正常来说关了后就回到主程序了,但是我的会偶尔性出现程序停掉或者复位的情况
霹雳之火 回答时间:2016-11-24 20:33:17
飞翼我的心 发表于 2016-11-24 16:28
我看这边人气高点。。。就是我打算在主程序里禁止中断,正常来说关了后就回到主程序了,但是我的会偶尔性 ...

帮顶 stm8不是很熟 希望高手来看看 在中断程序里关闭中断 中断执行完了 应该会回到被中断的地方继续执行吧
飞翼我的心 回答时间:2016-11-25 08:28:02
霹雳之火 发表于 2016-11-24 20:33
帮顶 stm8不是很熟 希望高手来看看 在中断程序里关闭中断 中断执行完了 应该会回到被中断的地方继续执行 ...

中断使能位置零意思就是不再进入中断了对吧,谢谢斑竹
飞翔的荷兰人号 回答时间:2016-11-25 09:00:59
你的程序里的flag只有1和2两种情况吗,如果不是需要在switch里面加一个default:break的语句,不然就会出现很多奇怪的现象

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

飞翼我的心 回答时间:2016-11-25 09:04:13
飞翔的荷兰人号 发表于 2016-11-25 09:00
你的程序里的flag只有1和2两种情况吗,如果不是需要在switch里面加一个default:break的语句,不然就会出现 ...

是的,只有1,2两种情况
高二毛 回答时间:2016-11-25 09:18:35
关注。。。。感觉逻辑没有问题,应该还是代码的问题。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zbber 回答时间:2016-11-25 11:36:22
楼主威武,强烈支持……
飞翼我的心 回答时间:2016-11-26 14:56:02
高二毛 发表于 2016-11-25 09:18
关注。。。。感觉逻辑没有问题,应该还是代码的问题。

是不是不应该在中断里禁止中断啊,我感觉这样不太合理啊,本人小白
wenyangzeng 回答时间:2016-11-30 07:31:36
  switch(flag)
{
  case 1:
count14++;
if(count14==3)
{PWMOFF2();}
if(count14==4)
{PWMON();count14=0}
break;
case 2:
TIM4_IER=0X00;count14=0;break;
default:break;   //应该加上这段代码吧?
}

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版