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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1501|回復: 0
打印 上一主題 下一主題
收起左側

STM32單片機外部中斷失效?

[復制鏈接]
跳轉到指定樓層
樓主
ID:833967 發表于 2023-3-26 16:58 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
大佬們幫忙看看,外部中斷初始化后按鍵按下沒有作用,不知道是什么問題呀?大佬們看看下面單片機源碼:
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);
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产最好的av国产大片 | 国产一区二区欧美 | 欧美精品一区二区三区在线 | 精品国产一区二区国模嫣然 | 在线观看视频h | 精品视频在线免费观看 | 成人精品久久 | gav成人免费播放视频 | 久草在线| 国产精品久久久久久久久久免费 | 国产91精品在线 | 久久噜噜噜精品国产亚洲综合 | 日日干天天操 | 欧美在线一级 | 91精品国产一区二区三区 | 中文字幕在线观看一区 | 视频一区二区中文字幕日韩 | 日本一区精品 | 欧美日韩在线一区二区 | 国产精品成人一区二区三区 | 人人干天天干 | 国产一区二区三区在线 | 亚洲欧洲一区 | 91久久视频 | 国产成人精品免费 | 亚洲国产高清高潮精品美女 | 久久九九影视 | 国产精品不卡一区 | 午夜精品久久久久久久久久久久久 | 日韩快播电影 | 国产免费让你躁在线视频 | 国产精品中文 | 久久aⅴ乱码一区二区三区 91综合网 | 18gay男同69亚洲网站 | 亚洲社区在线 | 成人精品一区二区三区中文字幕 | 中文字幕亚洲免费 | 欧美日韩精品免费 | 人和拘一级毛片c | 久久精品亚洲精品国产欧美 | 成人免费在线视频 |