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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1435|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品久久久优势 | 91在线观看| 亚洲精选一区二区 | 一级毛片免费视频观看 | 日韩精品久久久 | 91久久久精品国产一区二区蜜臀 | 欧美日韩久久精品 | 操操操av| 美国av毛片| 国产精品综合色区在线观看 | 日韩三级在线 | 天天看天天爽 | 欧美韩一区二区 | 色偷偷人人澡人人爽人人模 | 国内91在线| 成av在线| 国产精品欧美一区喷水 | 91视频一区二区 | 深夜爽视频 | 欧美国产大片 | 男女羞羞视频大全 | 99精品视频免费在线观看 | 欧美黑人狂野猛交老妇 | 97人人澡人人爽91综合色 | 色香蕉在线| 一区二区三区四区av | 日韩精品在线一区 | 日本不卡一区二区三区 | 久草热在线 | 精品国产伦一区二区三区观看方式 | 国产最新视频在线 | 自拍视频国产 | 亚洲一区二区三区四区五区中文 | 国产精品一区二区精品 | 国产网站在线播放 | 日本视频一区二区 | 成人久久网 | 国产成人啪免费观看软件 | 国产免费福利小视频 | 不卡一区二区三区四区 | 日韩一区二区三区av |