新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32學(xué)習(xí)之外部中斷

        STM32學(xué)習(xí)之外部中斷

        作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
        之前看了網(wǎng)上有關(guān)外部中斷的使用介紹,覺(jué)得很簡(jiǎn)單,現(xiàn)在想想有那種想法真是浮躁,不要做浮躁的嵌入式工程師,要腳踏實(shí)地。今天把外部中斷實(shí)驗(yàn)做了一下,不做不知道,一作就是沒(méi)做出來(lái),網(wǎng)上參考別人的程序和有關(guān)資料還是沒(méi)做出來(lái),最后到群里問(wèn)了問(wèn),被一個(gè)叫STM32的網(wǎng)友發(fā)現(xiàn)了我的問(wèn)題,改過(guò)來(lái)之后程序按照自己的想法執(zhí)行。
        下面介紹一下今天的使用總結(jié):
        STM32中,每一個(gè)GPIO都可以觸發(fā)一個(gè)外部中斷,但是,GPIO的中斷是以組位一個(gè)單位的,同組間的外部中斷同一時(shí)間只能使用一個(gè)。比如說(shuō),PA0,PB0,PC0,PD0,PE0,PF0,PG0這些為1組,如果我們使用PA0作為外部中斷源,那么別的就不能夠再使用了,在此情況下,我們智能使用類(lèi)似于PB1,PC2這種末端序號(hào)不同的外部中斷源。每一組使用一個(gè)中斷標(biāo)志EXTIx。EXTI0 – EXTI4這5個(gè)外部中斷有著自己的單獨(dú)的中斷響應(yīng)函數(shù),EXTI5-9共用一個(gè)中斷響應(yīng)函數(shù),EXTI10-15共用一個(gè)中斷響應(yīng)函數(shù)。
        上面這一段話把外部中斷介紹的很詳細(xì)。要注意的是紅字部分,今天我使用的外部中斷管腳是PB.7 PB.8 PB.9 這幾個(gè)管腳正好對(duì)應(yīng)在一個(gè)中斷響應(yīng)函數(shù)里EXTI5-9。
        //選擇中斷管腳PB.7 PB.8 PB.8
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
        EXTI_InitStructure.EXTI_Line = EXTI_Line7 | EXTI_Line8 | EXTI_Line9; //選擇中斷線路7 8 9
        在這里我出錯(cuò)了EXTI_InitStructure.EXTI_Line 選中的中斷管腳要和GPIO_EXTILineConfig 選中的管腳保持一致 也就是上面說(shuō)的
        我們智能使用類(lèi)似于PB1,PC2這種末端序號(hào)不同的外部中斷源這句話。
        源代碼如下
        /*
        ********************************************************************************
        ** 函數(shù)名稱 : void EXTI_Configuration(void))
        ** 函數(shù)功能 : 外部中斷初始化
        ** 輸 入 : 無(wú)
        ** 輸 出 : 無(wú)
        ** 返 回 : 無(wú)
        ********************************************************************************
        */
        void EXTI_Configuration(void)
        {
        EXTI_InitTypeDef EXTI_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //復(fù)用時(shí)鐘
        //清空中斷標(biāo)志
        EXTI_ClearITPendingBit(EXTI_Line2);
        EXTI_ClearITPendingBit(EXTI_Line3);
        EXTI_ClearITPendingBit(EXTI_Line5);
        //選擇中斷管腳PB.7 PB.8 PB.8
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
        EXTI_InitStructure.EXTI_Line = EXTI_Line7 | EXTI_Line8 | EXTI_Line9; //選擇中斷線路7 8 9
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設(shè)置為中斷請(qǐng)求,非事件請(qǐng)求
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //設(shè)置中斷觸發(fā)方式為下降沿觸發(fā)
        EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中斷使能
        EXTI_Init(&EXTI_InitStructure);
        }
        void EXTI9_5_IRQHandler(void)
        {
        if(EXTI_GetITStatus(EXTI_Line7) != RESET)
        {
        //添加中斷處理程序
        //點(diǎn)亮LED
        PC1_H;
        PC3_H;
        PC13_L;
        EXTI_ClearFlag(EXTI_Line7);
        EXTI_ClearITPendingBit(EXTI_Line7);
        }
        if(EXTI_GetITStatus(EXTI_Line8) != RESET)
        {
        //添加中斷處理程序
        //點(diǎn)亮LED燈
        PC1_H;
        PC3_L;
        PC13_H;
        EXTI_ClearFlag(EXTI_Line8);
        EXTI_ClearITPendingBit(EXTI_Line8);
        }
        if(EXTI_GetITStatus(EXTI_Line9) != RESET)
        {
        //添加中斷處理程序
        //點(diǎn)亮LED燈
        PC1_L;
        PC3_H;
        PC13_H;
        EXTI_ClearFlag(EXTI_Line9);
        EXTI_ClearITPendingBit(EXTI_Line9);
        }
        }



        關(guān)鍵詞: STM32外部中

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 棋牌| 新巴尔虎右旗| 南昌县| 新密市| 台北市| 府谷县| 大理市| 霍城县| 赤壁市| 贞丰县| 天柱县| 鄂温| 永吉县| 桐庐县| 铜鼓县| 池州市| 五河县| 项城市| 孙吴县| 朝阳市| 永清县| 聂荣县| 娄底市| 浦江县| 河东区| 潮州市| 江都市| 甘泉县| 义马市| 青浦区| 玛多县| 霍邱县| 苍梧县| 乾安县| 黔西县| 华阴市| 合作市| 新邵县| 永兴县| 师宗县| 马龙县|