新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32F104VG (一)中斷與外部中斷

        STM32F104VG (一)中斷與外部中斷

        作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
        一、基礎(chǔ)知識

        1.ARM的中斷優(yōu)先級分硬件優(yōu)先級和軟件優(yōu)先級兩種

        本文引用地址:http://www.104case.com/article/201611/318394.htm

        其中軟件優(yōu)先級又由搶占優(yōu)先級和響應優(yōu)先級組成

        2.中斷的優(yōu)先級采用編號小優(yōu)先的原則。

        3.一般情況:

        1).如果設定了軟件優(yōu)先級,先看軟件優(yōu)先級:

        具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應,即中斷嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。

        當兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關(guān)系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達,則中斷控制器根據(jù)他們的響應優(yōu)先級高低來決定先處理哪一個。

        2).后看硬件優(yōu)先級

        如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。

        4. 特殊情況
        軟件優(yōu)先級設置對復位、NMI、硬件故障無效,他們的優(yōu)先級始終比外部中斷
        5.軟件優(yōu)先級的分組
        中斷優(yōu)先級分組就是把優(yōu)先級寄存器分割,分開哪幾位是響應優(yōu)先級,哪幾位是搶占優(yōu)先級。至于怎樣設置分組:每一個ARM的M4中斷優(yōu)先級設計為可編程的8位,具體到stm32f4就只留給用戶4位共16級的可編程優(yōu)先級,其中低4位已被占用。也就是說stm32f4的優(yōu)先級分組情況采用NVIC_PriorityGroup_x, x=0~4表示,對應如下表格:

        [10:8]

        分割點

        搶占優(yōu)先級位

        響應優(yōu)先級位

        搶占優(yōu)先級數(shù)

        響應優(yōu)先級數(shù)

        0b011(組4)

        xxxx

        [7:4]

        none

        16(0~15)

        1(0~0)

        0b100(組3)

        xxx.y

        [7:5]

        [4]

        8

        2

        0b101(組2)

        xx.yy

        [7:6]

        [5:4]

        4(0~3)

        4(0~3)

        0b110(組1)

        x.yyy

        [7]

        [6:4]

        2

        8

        0b111(組0)

        yyyy

        none

        [7:4]

        1

        16

        二、具體實例


        1.分析:
        1).開關(guān)沒有按下去時候,GPIO為高電平,開關(guān)按下去時候為低電平。
        2).對應GPIO為低電平時候?qū)Ⅻc亮二極管。
        PE12-->EXIT12
        PE13-->EXIT13
        PE14-->EXIT14
        PE15-->EXIT15
        在中斷向量表中可以查到EXTIRCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource12);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource13);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource14);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource15);
        2)配置并初始化中斷線
        /* 配置 EXTI LineXXX */
        EXTI_InitStructure.EXTI_Line = EXTI_Line12 | EXTI_Line13 | EXTI_Line14 | EXTI_Line15;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
        3)配置并初始化
        NVIC_InitTypeDef NVIC_InitStructure;
        /* 設置NVIC優(yōu)先級分組為Group2:4個搶占式優(yōu)先級,4響應式優(yōu)先級 */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
        /* 中斷優(yōu)先級配置 最低優(yōu)先級 這里一定要分開的設置中斷,不能夠合并到一個里面設置 */
        NVIC_Init(&NVIC_InitStructure);
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        2.2中斷處理函數(shù)部分
        void EXTI15_10_IRQHandler(void)
        {
        if(EXTI_GetITStatus(EXTI_Line12) != RESET)
        {
        EXTI_ClearITPendingBit(EXTI_Line12); /* 清除中斷標志位 */
        //do something
        }

        if(EXTI_GetITStatus(EXTI_Line13) != RESET)
        {
        EXTI_ClearITPendingBit(EXTI_Line13); /* 清除中斷標志位 */
        //do something
        }
        if(EXTI_GetITStatus(EXTI_Line14) != RESET)
        {
        EXTI_ClearITPendingBit(EXTI_Line14); /* 清除中斷標志位 */
        //do something
        }
        if(EXTI_GetITStatus(EXTI_Line15) != RESET)
        {
        EXTI_ClearITPendingBit(EXTI_Line15); /* 清除中斷標志位 */
        //do something
        }

        }



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

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 星座| 泰安市| 水富县| 阳信县| 慈溪市| 彰化县| 霍山县| 长沙市| 德格县| 额济纳旗| 万安县| 东乡族自治县| 西畴县| 建水县| 临湘市| 蒲城县| 漯河市| 尉氏县| 邯郸市| 抚顺县| 伊宁县| 万州区| 张家港市| 高清| 鹤峰县| 土默特右旗| 洪洞县| 潼关县| 徐州市| 会东县| 津南区| 通山县| 武威市| 绍兴县| 汉寿县| 五指山市| 阿合奇县| 龙江县| 莱芜市| 扬州市| 桦南县|