zoukankan      html  css  js  c++  java
  • stm8s 中断重复进入

    设置:

    进入睡眠代码,设置外部中断唤醒

        /*两个按键和底座输入设置为外部中断*/
        /* PD4 PD6 PA2使能外部中断 */
        PD_DDR_DDR4 = 0;
        PD_CR1_C14 = 1;
        PD_CR2_C24 = 1;
        
        PD_DDR_DDR6 = 0;
        PD_CR1_C16 = 1;
        PD_CR2_C26 = 1;
        
        PA_DDR_DDR2 = 0;
        PA_CR1_C12 = 1;
        PA_CR2_C22 = 1;
    
        EXTI_CR1 = 0x00;  //所有端口 低电平和下降沿都中断(00是下降沿触发  01 上升沿 10 下降沿 11 上升沿和下降沿)
    
        asm("halt"); /* 进入停机模式 */

    中断函数

    #pragma vector = EXTI3_vector
    __interrupt void EXTI_PORTD_IRQHandler(void)
    {
      asm("sim");//关中断
      
      machine_sleep_init = 0;
    }
    
    #pragma vector = EXTI0_vector
    __interrupt void EXTI_PORTA_IRQHandler(void)
    {
      asm("sim");//关中断
    
      machine_sleep_init = 0;
    }

    现象:

    偶尔会一直进入中断,在中断中出不来,导致程序无法运行

    解决:

        PA_DDR_DDR2 = 0;//关闭中断
        PA_CR1_C12 = 1;
        PA_CR2_C22 = 0;
    
        EXTI_CR1 = 0x00;  //所有端口 低电平和下降沿都中断(00是下降沿触发  01 上升沿 10 下降沿 11 上升沿和下降沿)
    
        /*两个按键和底座输入设置为外部中断*/
        /* PD4 PD6 PA2使能外部中断 */
        PD_DDR_DDR4 = 0;
        PD_CR1_C14 = 1;
        PD_CR2_C24 = 1;
        
        PD_DDR_DDR6 = 0;
        PD_CR1_C16 = 1;
        PD_CR2_C26 = 1;
        
        PA_DDR_DDR2 = 0;
        PA_CR1_C12 = 1;
        PA_CR2_C22 = 1;
        
        asm("halt"); /* 进入停机模式 */
    #pragma vector = EXTI3_vector
    __interrupt void EXTI_PORTD_IRQHandler(void)
    {
      asm("sim");//关中断
      
      PD_DDR = 0;//设置为上拉输入
      PD_CR1  = 1;
      PD_CR2  = 0;
      
      machine_sleep_init = 0;
    }
    
    #pragma vector = EXTI0_vector
    __interrupt void EXTI_PORTA_IRQHandler(void)
    {
      asm("sim");//关中断
      
      PA_DDR = 0;//设置为上拉输入
      PA_CR1  = 1;
      PA_CR2  = 0;
      
      machine_sleep_init = 0;
    }

    总结:

      stm8s中断没有标志位可以清除,在设置中断的时候顺序:

      1.关总中断

      2.关闭IO中断

      3.设置中断触发条件

      4.开启IO中断

      5.开总中断

      在中断服务函数中,先关闭总中断,再关闭IO的中断即可

  • 相关阅读:
    shell变量/环境变量和set/env/export用法_转
    常用英语短语累积
    可执行文件格式elf和bin
    spring boot 配置文件application
    (转)Linux命令grep
    plsql 数据迁移——导出表结构,表数据,表序号
    (转)logback 打印Mybitis中的sql执行过程
    (转)PLSQL Developer导入Excel数据
    Linux时间设置
    (转)Oracle中的rownum,ROWID的 用法
  • 原文地址:https://www.cnblogs.com/-yjx-/p/12502512.html
Copyright © 2011-2022 走看看