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

查看: 9466|回复: 22

STM8外中断唤醒有问题

[复制链接]

2

主题

16

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2014-7-16 18:02:47 | 显示全部楼层 |阅读模式
在停机状态,用外中断来唤醒时,只能唤醒一次,为什么这样??????????
 

#include  "iostm8s003f3.h"
#define  nop() asm("nop")
#define K1  PD_IDR_IDR4  //按键
#define LED PD_ODR_ODR2  //LED指示,低亮
void delay(unsigned char i)
{
 unsigned char j;
 j=255;
 while(i--)
 {
  while(j--);
 }
}
void main()
{
 unsigned char temp;
 delay(10);
 PD_CR1 |= 0x10;  //PD4上拉输入
 PD_CR1 |= 0x4;  //
 PD_DDR |= 0x4;  //PD2设置为输出 
 LED=0;
 asm("RIM");  //开总中断
  while(1)
 {
  LED=0;//灯亮;
  delay(255);
  while (!K1)
  {
   temp=0;//延时清0
      delay(255);
   LED=!LED;
  }
  temp++;
  if (temp>20)//按键没按下时,延时再停机
  {
   temp=0;
   PD_CR2 |= 0x10;  //开PD4中断
   EXTI_CR1 = 0x80; //PD4下降沿中断;
   LED=1;//关灯
   asm("halt");  //停机
   nop();nop();nop();nop();nop();
   PD_CR2 = 0x0; //   
  }
 }

#pragma vector=0x08//
__interrupt void EXTI_PD()//PD外中断
{
 nop();
 PD_CR2 = 0x0; //关中断    
}
回复

使用道具 举报

5

主题

208

回帖

9

蝴蝶豆

论坛元老

最后登录
2020-11-25
发表于 2015-5-13 09:57:20 | 显示全部楼层
开定时器照样可以唤醒,实现功能:T2每进中断让PD口输出翻转,10次后进入halt,PB1外部中断唤醒,唤醒时让PC口翻转。看到的现象就是LED以1s间隔闪烁,闪10次后停机,用PB1按键唤醒后PC口输出取反,PD口LED接着闪烁。
void initcpu();
void Init_GPIO(void);
void delay(unsigned char ms);
void  Tim2INIT(void);
unsigned int i;
u8 TIM1S;

int main()
{
      Init_GPIO();  
      initcpu();
        Tim2INIT();
        enableInterrupts();
        while(1)
        {  
          if(TIM1S>10)
             {
               TIM1S=0;
               GPIOD->ODR=0x08;//进入Halt前关掉LED
               GPIOB->CR2=0x02; //PB1使能外部中断
               halt();  //进入halt模式
             }
        }
}

void Init_GPIO(void)
{
  GPIOB->DDR=0x00;
  GPIOB->CR1=0x02;  //PB1上拉输入
  GPIOB->CR2=0x00;  //PB禁止外部中断
  EXTI->CR1 = 0x08;  //PB1下降沿触发
  
  GPIOC->DDR=0x08;
  GPIOC->CR1=0x08;
  GPIOC->CR2=0x00;
  GPIOC->ODR=0x00;
  
  GPIOD->DDR=0x08;
  GPIOD->CR1=0x08;
  GPIOD->CR2=0x00;
  GPIOD->ODR=0x00;  //LED低亮
}
void initcpu()
{
       
        //CLK->CKDIVR&= (uint8_t)(~0x18);/*时钟复位*/
        CLK->CKDIVR= (uint8_t)0x01;   /*设置时钟为内部16M高速时钟*/
        disableInterrupts();  //close all interrupt
}


void delay(unsigned char i)
{
  unsigned int j;
  j=65535;
  while(i--)
  {
    while(j--);
  }
}
void  Tim2INIT(void)
{
        CLK->PCKENR1|=0x20;
        TIM2->ARRH=0xf4;
        TIM2->ARRL=0x24;
        TIM2->CNTRH=0x00;
        TIM2->CNTRL=0x00;
        TIM2->PSCR=0x08;//256分频
        TIM2->CR1=0x80;
        TIM2->EGR=0x00;
        TIM2->IER|=0x01;
        TIM2->CR1|=0x01;   
}

INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler,13)
{
      TIM2->SR1 &= 0xfe;
          TIM1S++;
       GPIOD->ODR=~GPIOD->ODR;
      return;
       
}

INTERRUPT_HANDLER(EXTI1_IRQHandler,4)  //PB1外部中断
{
       GPIOB->CR2=0x00; //PB禁止外部中断
       GPIOC->ODR=~GPIOC->ODR;
      return;
        
}
回复 支持 1 反对 0

使用道具 举报

24

主题

514

回帖

6

蝴蝶豆

金牌会员

最后登录
2019-4-8
发表于 2014-7-17 16:34:47 | 显示全部楼层

RE:STM8外中断唤醒有问题

你初始化的时候开的是总中断,一次外部中断触发之后你关闭了中断,那下次再触发按键的时候总中断开了吗?你把开总中断这一步放到第一个while大循环中试试
回复 支持 反对

使用道具 举报

2

主题

16

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-7-20 10:26:52 | 显示全部楼层

RE:STM8外中断唤醒有问题

总中断开了又没关,不可能外中断后,总中断自动关了吧??
回复 支持 反对

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2014-7-20 10:54:43 | 显示全部楼层

RE:STM8外中断唤醒有问题

没有清除中断标志吧
回复 支持 反对

使用道具 举报

2

主题

295

回帖

0

蝴蝶豆

初级会员

最后登录
2018-4-6
发表于 2014-7-20 18:36:27 | 显示全部楼层

RE:STM8外中断唤醒有问题

调试下看看程序跑到哪儿去了,是后来一直卡死在中断里面么
回复 支持 反对

使用道具 举报

91

主题

4603

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2014-7-23 02:32:45 | 显示全部楼层

RE:STM8外中断唤醒有问题

一般不会自动中断或关闭吧
回复 支持 反对

使用道具 举报

2

主题

16

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-7-23 09:20:42 | 显示全部楼层

回复:STM8外中断唤醒有问题

回复第 4 楼 于2014-07-20 10:54:43发表:
没有清除中断标志吧STM8S没有中断标志啊 
回复 支持 反对

使用道具 举报

2

主题

16

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-7-23 09:21:29 | 显示全部楼层

回复:STM8外中断唤醒有问题

回复第 5 楼 于2014-07-20 18:36:27发表:
调试下看看程序跑到哪儿去了,是后来一直卡死在中断里面么
 
都唤不醒了,哪知道程序跑到哪了
 
回复 支持 反对

使用道具 举报

23

主题

195

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2014-7-24 15:57:39 | 显示全部楼层

RE:STM8外中断唤醒有问题

你程序对中断不起作用了吗
回复 支持 反对

使用道具 举报

2

主题

16

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2014-7-25 10:42:37 | 显示全部楼层

回复:STM8外中断唤醒有问题

回复第 9 楼 于2014-07-24 15:57:39发表:
你程序对中断不起作用了吗
 
是啊,只能唤醒一次,我也搞不明白什么意思
 
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版