请选择 进入手机版 | 继续访问电脑版
    查看: 133|回复: 1

    [单片机资料] stm8l051之 halt后外部中断唤醒问题解决办法

    [复制链接]

    签到天数: 414 天

    [LV.9]元老将成

    发表于 2018-9-13 22:20:37 | 显示全部楼层 |阅读模式
    最近用到stm8l051 halt,在halt之后开启了外部中断,有时灵,有时不灵,设置下降沿触发,但是按键(低有效)放开了才会从HALT退出,最后发现在进去外部中断的时候一直在外部中断里面不退出。

           在外部中断程序里面把端口的外部中断和端口使能的外部中断功能关闭,问题解决,可以在下降沿从halt退出。

    1、开启halt,其他代码省略,只贴halt部分:  



      /* 禁止TIM3 */
        TIM3->SR1 = (uint8_t)(~(uint8_t)TIM3_IT_Update);
        CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, DISABLE);   
    TIM3_ITConfig(TIM3_IT_Update, DISABLE);  
    TIM3_Cmd(DISABLE);

    if(Halt.wakeupFlag == 0)
    {

      POWER433MOFF;
      halt();
    }
    Halt.wakeupFlag = 0;
    Si4432PortReset();
    MCUTXLEDOFF;
    POWER433MON;
    //唤醒  
    EXTI->SR1 = 0Xff;
    EXTI->SR2 = 0Xff;
    GPIOA->CR2  = 0x00;     
    GPIOB->CR2  = 0x00;  
    GPIOD->CR2  = 0x00;  
    GPIOE->CR2  = 0x00;  
    Set_X_InputPullHigh();



      2、     stm8l15x_it.c里面:

          /**
      * @brief External IT PIN6 Interrupt routine.
      * @param  None
      * @retval None
      */
    INTERRUPT_HANDLER(EXTI6_IRQHandler,14)
    {
        /* In order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction.
        */
    Halt.wakeupFlag = 1;                 //halt唤醒标志
    EXTI_ClearITPendingBit(EXTI_IT_Pin6);             //清外部中断6
    EXTI->SR1 = 0Xff;                                               //清端口的外部中断标志
    EXTI->SR2 = 0Xff;
    GPIOA->CR2  = 0x00;                                        //清端口的外部中断功能
    GPIOB->CR2  = 0x00;  
    GPIOD->CR2  = 0x00;  
    GPIOE->CR2  = 0x00;
    }

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

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    返回顶部