久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: STM32單片機外部中斷失效? [打印本頁]

作者: 1363035157    時間: 2023-3-26 16:58
標題: STM32單片機外部中斷失效?
大佬們幫忙看看,外部中斷初始化后按鍵按下沒有作用,不知道是什么問題呀?大佬們看看下面單片機源碼:
exit.c
#include "exti.h"
#include "oled.h"
#include "key.h"
#include "risk.h"
#include "delay.h"
#include "usart.h"

extern int oledSwitchFlag;        //oledSwitchFlag實現外部中斷切換頁面
extern int valueMode;                //valueMode實現閾值上限下限的切換  0-上限 1-下限

extern int temp_up, temp_low;                                                //溫度閾值, up上限,low下限
extern int humi_up, humi_low;                                                //濕度閾值, up上限,low下限
extern int hydr_up;                                                                        //氫氣閾值, up上限,氣體只設置上限閾值
extern int carbon_up;                                                                //一氧化碳閾值, up上限,氣體只設置上限閾值
extern int natgas_up;                                                                //天然氣閾值, up上限,氣體只設置上限閾值
extern int Timer3_Switch;                                                        //定時器TIM3的開關標記位
extern int riskFlag;

void EXTIX_Init(void)
{

           EXTI_InitTypeDef EXTI_InitStructure;
         NVIC_InitTypeDef NVIC_InitStructure;
        
        KEYInit();                                                                                //按鍵模塊初始化

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

   //GPIOB12          //KEY_Mode
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);
          EXTI_InitStructure.EXTI_Line=EXTI_Line12;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          EXTI_Init(&EXTI_InitStructure);

   //GPIOB13          //KEY_Add
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13);
          EXTI_InitStructure.EXTI_Line=EXTI_Line13;
          EXTI_Init(&EXTI_InitStructure);
        
        //GPIOB14          //KEY_Reduce
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
          EXTI_InitStructure.EXTI_Line=EXTI_Line14;
          EXTI_Init(&EXTI_InitStructure);
        
        //GPIOB15          //KEY_Control
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15);
          EXTI_InitStructure.EXTI_Line=EXTI_Line15;
          EXTI_Init(&EXTI_InitStructure);


   //GPIOA.0           PA0  WK_UP
         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

          EXTI_InitStructure.EXTI_Line=EXTI_Line0;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
          EXTI_Init(&EXTI_InitStructure);        


          NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);

          NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        
          NVIC_Init(&NVIC_InitStructure);

}


void EXTI0_IRQHandler(void)
{
        delay_ms(10);
        if(WK_UP == 1){
                Risk != Risk;
        }
        EXTI_ClearITPendingBit(EXTI_Line0);
}

void EXTI15_10_IRQHandler(void)
{
        delay_ms(10);
        if(KEY_Mode == 0){                        //模式按鍵
                oledSwitchFlag++;
                OLED_Clear();
                UsartPrintf(USART_DEBUG,"oledSwitchFlag=%d\r\n",oledSwitchFlag);
                if(valueMode != 0)
                        valueMode = 0;
                if(oledSwitchFlag == 6)        
                        oledSwitchFlag = 0;        
                EXTI_ClearITPendingBit(EXTI_Line12);
        }
        
        if(KEY_Add == 0){                        //數值加
                if(oledSwitchFlag == 0)        //控制警報
                        riskFlag = 0;
               
                if(oledSwitchFlag == 1){
                        if(valueMode == 0){
                                temp_up++;
                                if(temp_up > 99)
                                        temp_up = 0;
                        }else{
                                temp_low++;
                                if(temp_low > 99)
                                        temp_low = 0;
                        }
                }else if(oledSwitchFlag == 2){
                        if(valueMode == 0){
                                humi_up++;
                                if(humi_up > 99)
                                        humi_up = 0;
                        }else{
                                humi_low++;
                                if(humi_low > 99)
                                        humi_low = 0;
                        }
                }else if(oledSwitchFlag == 3){
                        hydr_up++;
                        if(hydr_up > 99)
                                hydr_up = 0;
                }else if(oledSwitchFlag == 4){
                        carbon_up++;
                        if(carbon_up > 99)
                                carbon_up = 0;
                }else if(oledSwitchFlag == 5){
                        natgas_up++;
                        if(natgas_up > 99)
                                natgas_up = 0;
                }               
                EXTI_ClearITPendingBit(EXTI_Line13);
        }
        
        if(KEY_Reduce == 0){                //數值減
                if(oledSwitchFlag == 1){
                        if(valueMode == 0){
                                temp_up--;
                                if(temp_up < 0)
                                        temp_up = 99;
                        }else{
                                temp_low--;
                                if(temp_low < 0)
                                        temp_low = 99;
                        }
                }else if(oledSwitchFlag == 2){
                        if(valueMode == 0){
                                humi_up--;
                                if(humi_up < 0)
                                        humi_up = 99;
                        }else{
                                humi_low--;
                                if(humi_low < 0)
                                        humi_low = 99;
                        }
                }else if(oledSwitchFlag == 3){
                        hydr_up--;
                        if(hydr_up < 0)
                                hydr_up = 99;
                }else if(oledSwitchFlag == 4){
                        carbon_up--;
                        if(carbon_up < 0)
                                carbon_up = 99;
                }else if(oledSwitchFlag == 5){
                        natgas_up--;
                        if(natgas_up < 0)
                                natgas_up = 99;
                }
                EXTI_ClearITPendingBit(EXTI_Line14);
        }
        
        if(KEY_Control == 0){                //控制光標和數據動態切屏
                if(oledSwitchFlag == 0){
                        if(Timer3_Switch == 1){
                                TIM_Cmd(TIM3, DISABLE);        //關閉定時器TIM3
                                Timer3_Switch = 0;
                        }else if(Timer3_Switch ==0){
                                TIM_Cmd(TIM3, ENABLE);        //打開定時器TIM3
                                Timer3_Switch = 1;
                        }
                }else if(oledSwitchFlag == 1 || oledSwitchFlag == 2){
                        valueMode++;
                        OLED_Clear();
                        if(valueMode > 1)
                                valueMode = 0;
                }
                EXTI_ClearITPendingBit(EXTI_Line15);
        }
}

key.c
#include "key.h"

void KEYInit(void){
        GPIO_InitTypeDef GPIO_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOB ,&GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 青娱乐一区二区 | 日韩高清www | www.狠狠干 | 97超碰成人 | 国产精品视频一 | 亚洲精品在线视频 | 久久国产香蕉 | 精品久久影院 | 国产乱码精品一区二区三区忘忧草 | 日本视频一区二区三区 | 蜜桃臀av一区二区三区 | 天天天天操| 人人人人人爽 | 国产视频精品在线观看 | aaa精品| 99re热精品视频 | 高清色 | 国产在线视频一区二区 | 国产黄a一级 | 美女天天操 | 中文字幕一区在线观看视频 | 欧美成人激情视频 | 欧美黄色精品 | 一区二区成人 | 国产精品日本一区二区在线播放 | www.久久久久久久久 | 久久久久久亚洲精品 | 特黄小视频 | 国产区在线视频 | 超碰av在线| a毛片| 国产精品久久久久久久久久妇女 | 黄色网毛片 | 欧美一级免费看 | 欧美日韩黄 | 动漫www.被爆羞羞av44 | 午夜成人免费视频 | 久久久夜 | 欧美三区在线观看 | 91观看| 久久久久国产一区二区 |