日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年12月11日(星期三)

正在發(fā)生

2018年12月11日 | STM32的外部中斷EXTI及NVIC中斷優(yōu)先級(jí)介紹

發(fā)布者:Serendipitous55 來(lái)源: eefocus關(guān)鍵字:STM32  外部中斷  EXTI  NVIC  中斷優(yōu)先級(jí) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一、什么是中斷?


打斷當(dāng)前的操作,執(zhí)行中斷需要做的事情。


中斷的作用:中斷機(jī)制不僅賦予了系統(tǒng)處理意外情況的能力,就可以“同時(shí)”完成多個(gè)任務(wù),提高了并發(fā)“處理”能力。


和線程的區(qū)別:線程是同時(shí)執(zhí)行多個(gè)任務(wù),中斷是停下來(lái)去執(zhí)行其他的(注意優(yōu)先級(jí)),執(zhí)行完了再回來(lái)執(zhí)行,


定時(shí)器才相當(dāng)于線程,定一個(gè)時(shí)間,每到這個(gè)時(shí)間執(zhí)行一次



二、中斷概述


STM32F4并沒(méi)有使用CM4內(nèi)核的全部東西,而是只用了它的一部分。


STM32F40xx/STM32F41xx總共有92個(gè)中斷


STM32F42xx/STM32F43xx則總共有96個(gè)中斷


STM32F40xx/STM32F41xx的92個(gè)中斷里面,包括10個(gè)內(nèi)核中斷和82個(gè)可屏蔽中斷,具有16級(jí)可編程的中斷優(yōu)先級(jí),而我們常用的就是這82個(gè)可屏蔽中斷。


三、外部中斷/事件線映射多達(dá)140個(gè)GPIO。


 

根據(jù)圖文,發(fā)現(xiàn)我們的中斷線總共有23根,其中16根是連接PA~PI引腳。 


STM32F4供IO使用的中斷線只有16個(gè):EXTI線0~15:對(duì)應(yīng)外部IO口的輸入中斷。


剩下的七根是分別連接專用設(shè)備的:


 另外七根 EXTI 線連接方式如下:


● EXTI 線 16 連接到 PVD 輸出


● EXTI 線 17 連接到 RTC 鬧鐘事件


● EXTI 線 18 連接到 USB OTG FS 喚醒事件


● EXTI 線 19 連接到以太網(wǎng)喚醒事件


● EXTI 線 20 連接到 USB OTG HS(在 FS 中配置)喚醒事件


● EXTI 線 21 連接到 RTC 入侵和時(shí)間戳事件


● EXTI 線 22 連接到 RTC 喚醒事件


四、中斷服務(wù)函數(shù)分配


IO口外部中斷在中斷向量表中只分配了7個(gè)中斷向量,也就是只能使用7個(gè)中斷服務(wù)函數(shù)



從表中看出,外部中斷線5~9分配一個(gè)中斷向量,共用一個(gè)服務(wù)函數(shù) 外部中斷線10~15分配一個(gè)中斷向量,共用一個(gè)中斷服務(wù)函數(shù)


中斷服務(wù)函數(shù)列表如下:



四、設(shè)置中斷優(yōu)先級(jí)的分組


1、中斷優(yōu)先級(jí)有兩種:


      搶占(占先式)優(yōu)先級(jí) --》 第一序列                  響應(yīng)(副)優(yōu)先級(jí) --》 第二序列


 2、搶占優(yōu)先級(jí) &響應(yīng)優(yōu)先級(jí)區(qū)別:


       高優(yōu)先級(jí)的搶占優(yōu)先級(jí)是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。


       搶占優(yōu)先級(jí)相同的中斷,高響應(yīng)優(yōu)先級(jí)不可以打斷低響應(yīng)優(yōu)先級(jí)的中斷。


       搶占優(yōu)先級(jí)相同的中斷,當(dāng)兩個(gè)中斷同時(shí)發(fā)生的情況下,哪個(gè)響應(yīng)優(yōu)先級(jí)高,哪個(gè)先執(zhí)行。


       如果兩個(gè)中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)行;



3、中斷優(yōu)先級(jí)設(shè)置步驟


    ①系統(tǒng)運(yùn)行后先設(shè)置中斷優(yōu)先級(jí)分組。調(diào)用函數(shù):


void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);整個(gè)系統(tǒng)執(zhí)行中只設(shè)置一次中斷分組。


   ②針對(duì)每個(gè)中斷,設(shè)置對(duì)應(yīng)的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí):


void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);


  ③如果需要掛起/解掛,查看中斷當(dāng)前激活狀態(tài),分別調(diào)用相關(guān)函數(shù)即可



五、外部中斷的一般配置步驟


①使能SYSCFG時(shí)鐘


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


②初始化IO口為輸入。


    GPIO_Init();


③設(shè)置IO口與中斷線的映射關(guān)系。


    void SYSCFG_EXTILineConfig();//通過(guò)設(shè)置SYSCFG寄存器,建立IO口和中斷線的連接


④初始化線上中斷,設(shè)置觸發(fā)條件等。


    EXTI_Init();


⑤配置中斷分組(NVIC),并使能中斷。


    NVIC_Init();



⑥編寫中斷服務(wù)函數(shù)。


    EXTIx_IRQHandler();


且清除中斷標(biāo)志位


EXTI_ClearITPendingBit();//清除中斷標(biāo)志位是為了表示中斷已經(jīng)開始執(zhí)行,可以接收下一個(gè)中斷。


----------------------------------------------------------------------------------------------------------------------------------------------------------


代碼如下:


/**********************************************

*

*功能:四個(gè)按鍵中斷

*

**********************************************/

#include "exti.h"

 

 

//外部中斷初始化程序

//初始化PE2~4,PA0為中斷輸入.

void EXTI4_Init(void)

{

    NVIC_InitTypeDef   NVIC_InitStructure;

    EXTI_InitTypeDef   EXTI_InitStructure;

    GPIO_InitTypeDef  GPIO_InitStructure;

 

 

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE時(shí)鐘

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG時(shí)鐘

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //KEY0 KEY1 KEY2對(duì)應(yīng)引腳

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

    GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4

 

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);//PE4 連接到中斷線4

 

    /* 配置EXTI_Line2,3,4 */

    EXTI_InitStructure.EXTI_Line = EXTI_Line4;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷事件

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā)

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中斷線使能

    EXTI_Init(&EXTI_InitStructure);//配置

 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中斷4

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//搶占優(yōu)先級(jí)1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子優(yōu)先級(jí)2

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中斷通道

    NVIC_Init(&NVIC_InitStructure);//配置   

}

 

 

void EXTI3_Init(void)

{

    NVIC_InitTypeDef   NVIC_InitStructure;

    EXTI_InitTypeDef   EXTI_InitStructure;

    GPIO_InitTypeDef  GPIO_InitStructure;

 

 

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE時(shí)鐘

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG時(shí)鐘

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //KEY0 KEY1 KEY2對(duì)應(yīng)引腳

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

    GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4

 

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//PE4 連接到中斷線4

 

 

    /* 配置EXTI_Line2,3,4 */

    EXTI_InitStructure.EXTI_Line = EXTI_Line3;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷事件

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā)

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中斷線使能

    EXTI_Init(&EXTI_InitStructure);//配置

 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中斷4

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//搶占優(yōu)先級(jí)1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子優(yōu)先級(jí)2

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中斷通道

    NVIC_Init(&NVIC_InitStructure);//配置   

}

 

 

void EXTI2_Init(void)

{

    NVIC_InitTypeDef   NVIC_InitStructure;

    EXTI_InitTypeDef   EXTI_InitStructure;

    GPIO_InitTypeDef  GPIO_InitStructure;

 

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE時(shí)鐘

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG時(shí)鐘

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //KEY0 KEY1 KEY2對(duì)應(yīng)引腳

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

    GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4

 

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE4 連接到中斷線4

 

 

    /* 配置EXTI_Line2,3,4 */

    EXTI_InitStructure.EXTI_Line = EXTI_Line2;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷事件

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā)

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中斷線使能

    EXTI_Init(&EXTI_InitStructure);//配置

 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中斷4

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//搶占優(yōu)先級(jí)1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子優(yōu)先級(jí)2

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中斷通道

    NVIC_Init(&NVIC_InitStructure);//配置   

}

 

 

void EXTI0_Init(void)

{

    NVIC_InitTypeDef   NVIC_InitStructure;

    EXTI_InitTypeDef   EXTI_InitStructure;

    GPIO_InitTypeDef  GPIO_InitStructure;

 

 

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA,GPIOE時(shí)鐘

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG時(shí)鐘

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //KEY0 KEY1 KEY2對(duì)應(yīng)引腳

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOE2,3,4

 

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PE4 連接到中斷線4

 

 

    /* 配置EXTI_Line2,3,4 */

    EXTI_InitStructure.EXTI_Line = EXTI_Line0;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷事件

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā)

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中斷線使能

    EXTI_Init(&EXTI_InitStructure);//配置

 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中斷4

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//搶占優(yōu)先級(jí)1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子優(yōu)先級(jí)2

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中斷通道

    NVIC_Init(&NVIC_InitStructure);//配置   

}

 

 

//外部中斷4服務(wù)程序

void EXTI4_IRQHandler(void)

{

     if(EXTI_GetITStatus(EXTI_Line4) != RESET)//判斷是否置位

    {} 

    EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中斷標(biāo)志位  

}

 

 

//外部中斷3服務(wù)程序

void EXTI3_IRQHandler(void)

{

    delay_ms(15);

 

    EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中斷標(biāo)志位  

}

 

 

//外部中斷2服務(wù)程序

void EXTI2_IRQHandler(void)

    EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中斷標(biāo)志位  

}

 

 

//外部中斷0服務(wù)程序

void EXTI0_IRQHandler(void)

    EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中斷標(biāo)志位  

}


關(guān)鍵字:STM32  外部中斷  EXTI  NVIC  中斷優(yōu)先級(jí) 引用地址:STM32的外部中斷EXTI及NVIC中斷優(yōu)先級(jí)介紹

上一篇:Cortex-M0 LPC11C14中斷控制器
下一篇:LPC824 一種IAP實(shí)現(xiàn)方法

推薦閱讀

筆者剛進(jìn)入大學(xué)的時(shí)候,正值智能手機(jī)從塞班系統(tǒng)向安卓系統(tǒng)和iOS系統(tǒng)過(guò)渡,那時(shí)我買了人生第一部智能手機(jī)——三星i5800。在那個(gè)周圍滿是諾基亞電阻屏的時(shí)代,i5800電容屏靈敏的反應(yīng)速度和絲滑的觸感給了我極大的震撼,雖然它的尺寸只有3.2英寸。也正是那個(gè)時(shí)候,特斯拉Model S走進(jìn)了大眾視野,除了電動(dòng)化的動(dòng)力結(jié)構(gòu),最讓消費(fèi)者驚訝的當(dāng)屬它的17英寸中控大...
11月13日發(fā)起公開收購(gòu)文曄5%-30%股權(quán)一事,本該于12月12日見分曉。但是,由于這樁收購(gòu)引發(fā)外界太多疑慮,大聯(lián)大本月4日宣布,決定延長(zhǎng)收購(gòu)期50天,到明年1月30日截止。回顧大聯(lián)大宣布收購(gòu)文曄股份以來(lái),文曄內(nèi)部及業(yè)界質(zhì)疑主要聚焦在兩大問(wèn)題上:第一,惡意壟斷;第二,意在文曄控制權(quán)。個(gè)中細(xì)節(jié),頗有看點(diǎn)。下文試圖深挖這些疑點(diǎn),以及未來(lái)可能會(huì)有的劇情...
具有異構(gòu)形式的硬件以及開放、靈活的軟件是提高汽車行業(yè)安全性和效率的關(guān)鍵。 駕駛安全如何定義?是依靠一輛具有自動(dòng)駕駛能力的汽車,還是依靠人類司機(jī)及時(shí)的剎車? 在如果開車的時(shí)候突然看見一個(gè)孩子站在前面,這種情況下,司機(jī)做出反應(yīng)并剎車平均需要1.5秒;一輛裝有視覺系統(tǒng)、雷達(dá)和激光雷達(dá)的汽車只需0.5秒。這三倍快的響應(yīng)時(shí)間意味著生與死的區(qū)別,這...
哈佛大學(xué)肯尼迪學(xué)院Belfer科學(xué)和國(guó)際事務(wù)中心日前發(fā)布報(bào)告,指出除了已經(jīng)成為制造強(qiáng)國(guó),中國(guó)也已成為21世紀(jì)基礎(chǔ)技術(shù)領(lǐng)域的有力競(jìng)爭(zhēng)者,在AI、5G、量子信息科學(xué)、半導(dǎo)體、生物技術(shù)和綠色能源領(lǐng)域中,有些方面中國(guó)已經(jīng)成為第一。在其他方面,按照目前的發(fā)展軌跡,中國(guó)會(huì)在未來(lái)十年內(nèi)超過(guò)美國(guó)。圖源:哈佛大學(xué)肯尼迪學(xué)院Belfer科學(xué)和國(guó)際事務(wù)中心這份題為《偉...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章
更多每日新聞

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved