打印
[STM8]

STM8S外部中断一次触发,为什么中断服务程序要连续执行两...

[复制链接]
2901|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ltwsq|  楼主 | 2015-8-25 09:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ltwsq 于 2015-8-25 09:29 编辑

近来由于工程需要,改用STM8S芯片。但在程序改写的过程当中进行在线调试,发现输入中断发生时,相应的中断服务程序竟然连续执行两次,这是为什么啊?请各位大侠指点一下,代码如下:
端口初始化代码
void port_init(void)
{
GPIO_DeInit(GPIOB);//端口B
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);//仅下降沿中断
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);//PB4上拉输入有中断功能
ITC->ISPR2 &= ~(1<<1);//将PB的软件中断优先级设定为2,这是为了在后面能够和定时器3溢出中断进行嵌套
}
中断服务程序
@far @interrupt void EXTI_PORTB_IRQHandler(void)
{
i_Message_flag=1; //输入中断标志置位
ir_flag=1;
    TIM3->ARRH = 0x00; // 设定重装载时的寄存器的高8位
    TIM3->ARRL = 0xD0; //
    TIM3->CNTRH = 0x00; //
    TIM3->CNTRL = 0x00;
}
沙发
皈依| | 2015-8-25 09:22 | 只看该作者
把中断程序注释掉,如果只进入一次就修改该部分。
如果还进入两次 就查PB4的波形,看是不是硬件触发了两次

使用特权

评论回复
板凳
mmuuss586| | 2015-8-25 09:54 | 只看该作者

清下中断相关寄存器看看;

使用特权

评论回复
地板
ltwsq|  楼主 | 2015-8-25 10:00 | 只看该作者
mmuuss586 发表于 2015-8-25 09:54
清下中断相关寄存器看看;

STM8S的外部中断没有中断标志位可供清除:'(

使用特权

评论回复
5
amanda_s| | 2015-8-26 15:05 | 只看该作者
是不是确实来了两个触发沿啊?
干扰?
拿示波器看看pin脚的电平变化?

使用特权

评论回复
6
尤彼卡| | 2015-8-28 22:12 | 只看该作者
STM8S的外部中断没有中断标志位可供清

真的假的,那中断响应完做什么处理

使用特权

评论回复
7
734774645| | 2015-8-29 07:33 | 只看该作者
进入中断后,第一件事情就是关闭中断使能,第二件事就是清除中断标志

使用特权

评论回复
8
zh113214| | 2015-8-29 08:39 | 只看该作者
我只能看出问题出在中断程序,其他的也不好说,楼主解决了吗?

使用特权

评论回复
9
天灵灵地灵灵| | 2015-8-29 08:52 | 只看该作者
中断程序里面进入后要里面关掉,清楚标志。

使用特权

评论回复
10
捉虫天师| | 2015-8-29 10:39 | 只看该作者
两次中断,那是你处理方法不对。

使用特权

评论回复
11
迪卡| | 2015-8-29 10:43 | 只看该作者
进入中断后要关闭中断使能,并清除中断标志

使用特权

评论回复
12
xia00| | 2015-8-29 15:52 | 只看该作者
感觉不需要这么复杂

使用特权

评论回复
13
tangmix| | 2015-8-31 21:35 | 只看该作者
IO口有没有毛刺,尤其是按键,在IO引脚和地之间接103pf 电容,可去除大部分毛刺,软件里,当然中断程序里每次要去中断标志位的

使用特权

评论回复
14
adofe| | 2015-9-4 18:17 | 只看该作者
PD_CR2 &=~0x01; //关闭PD0中断
进入中断后像这样关闭外部中断。

使用特权

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

本版积分规则

8

主题

14

帖子

1

粉丝