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

查看: 9507|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版