STM32的NVIC和中斷的總結(jié)

姓名:周崇杰? ?學(xué)號(hào):16140120059? ? 專業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化

轉(zhuǎn)載自:http://blog.csdn.net/wuyuzun/article/details/72851940,有刪節(jié)

【嵌牛導(dǎo)讀】:?jiǎn)纹瑱C(jī)最重要處理外界情況的手段莫過(guò)于中斷了,本文總計(jì)了STM32單片機(jī)的中斷基本概念以及使用。

【嵌牛鼻子】:STM32單片機(jī),中斷侨把,NVIC。

【嵌牛提問(wèn)】:STM32單片機(jī)如何產(chǎn)生設(shè)定一個(gè)特定的中斷呢?

【嵌牛正文】:

前言:

1.要想學(xué)習(xí)STM32中斷看疗,要先掌握STM32對(duì)優(yōu)先級(jí)的定義;

2.有51單片機(jī)開(kāi)發(fā)經(jīng)驗(yàn)會(huì)比較容易理解中斷優(yōu)先級(jí)睦授;

3.本篇博文基于STM32F103ZET6芯片和3.5.0標(biāo)準(zhǔn)庫(kù)編寫两芳;

4.本篇博文從寄存器入手,最終實(shí)現(xiàn)編程的步驟去枷;如有不足之處怖辆,還請(qǐng)前輩多多指教是复;

一 基礎(chǔ)知識(shí)

1. cortex-m3支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷竖螃,240個(gè)外部中斷淑廊。(本博文只介紹60個(gè)外部可屏蔽中斷)

2. stm32只有84個(gè)中斷,包括16個(gè)內(nèi)核中斷和68個(gè)可屏蔽中斷

3. stm32f103上只有60個(gè)可屏蔽中斷斑鼻,f107上才有68個(gè)中斷

4.先占優(yōu)先級(jí)也就是搶占優(yōu)先級(jí)蒋纬,概念等同于51單片機(jī)中的中斷。假設(shè)有兩中斷先后觸發(fā)坚弱,已經(jīng)在執(zhí)行的中斷先占優(yōu)先級(jí)如果沒(méi)有后觸發(fā)的中斷 先占優(yōu)先級(jí)更高蜀备,就會(huì)先處理先占優(yōu)先級(jí)高的中斷。也就是說(shuō)又有較高的先占優(yōu)先級(jí)的中斷可以打斷先占優(yōu)先級(jí)較低的中斷荒叶。這是實(shí)現(xiàn)中斷嵌套的基礎(chǔ)碾阁。

次占優(yōu)先級(jí),也就是響應(yīng)優(yōu)先級(jí)些楣,只在同一先占優(yōu)先級(jí)的中斷同時(shí)觸發(fā)時(shí)起作用脂凶,先占優(yōu)先級(jí)相同,則優(yōu)先執(zhí)行次占優(yōu)先級(jí)較高的中斷愁茁。次占優(yōu)先級(jí)不會(huì)造成中斷嵌套蚕钦。 如果中斷的兩個(gè)優(yōu)先級(jí)都一致,則優(yōu)先執(zhí)行位于中斷向量表中位置較高的中斷鹅很。

NVIC是什么嘶居?

嵌套向量中斷控制器;用于為中斷分組促煮,從而分配搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)邮屁;

分組的方式有兩種:

(1)Cortex-m3內(nèi)核提供了一種3位寬度的PRIGROUP數(shù)據(jù)區(qū),用于指示一個(gè)8位數(shù)據(jù)序列中的小數(shù)點(diǎn)的位置菠齿,從而表示中斷優(yōu)先級(jí)的分組佑吝。見(jiàn)下表:

(2)而實(shí)際上STM32并沒(méi)有用到這么多中斷,所以在分組上只分了5個(gè)組绳匀,并且表示方法有所不同芋忿;見(jiàn)下表:

我們?cè)趹?yīng)用當(dāng)中只會(huì)用到STM32的分組(5組)方式,所以下面著重于5組分組方式疾棵;

二 中斷向量表 (STM32F10x系列)

(圖片來(lái)自STM32使用手冊(cè)盗飒,只需看,不需要熟記陋桂,知道大概這么多中斷就好)

三 配置中斷相關(guān)寄存器

/*

cortex-m3內(nèi)核分組方式(8組)結(jié)構(gòu)體表達(dá)方式:

*/

typedef struct

{

__IO uint32_t ISER[8];? ? ? ? ? 中斷使能設(shè)置寄存器/*!< 偏移量: 0x000? Interrupt Set Enable Register*/

uint32_t RESERVED0[24];

__IO uint32_t ICER[8];? ? ? ? ? ?中斷清除使能寄存器/*!<偏移量: 0x080? Interrupt Clear Enable Register */

uint32_t RSERVED1[24];

__IO uint32_t ISPR[8];? ? ? ? ? ? 中斷掛起設(shè)置寄存器/*!< 偏移量: 0x100? Interrupt Set Pending Register */

uint32_t RESERVED2[24];

__IO uint32_t ICPR[8];? ? ? ? ? ? 中斷清除掛起寄存器/*!<偏移量: 0x180? Interrupt Clear Pending Register */

uint32_t RESERVED3[24];

__IO uint32_t IABR[8];? ? ? ? ? ? ?中斷激活狀態(tài)位寄存器/*!< 偏移量: 0x200? Interrupt Active bit Register*/

uint32_t RESERVED4[56];

__IO uint8_t? IP[240];? ? ? ? ? ? 中斷優(yōu)先級(jí)寄存器/*!< 偏移量: 0x300? Interrupt Priority Register (8Bit wide)*/

uint32_t RESERVED5[644];? ? ? ? 軟件觸發(fā)方式寄存器

__O? uint32_t STIR;? ? ? ? ? ? ? ? ? ? ? ? ?/*!< 偏移量: 0xE00? Software Trigger Interrupt Register? ? */

}? NVIC_Type;


/*

STM32分組(5組)方式結(jié)構(gòu)體表達(dá)方式

typedef struct

{

vu32 ISER[2];

u32? RESERVED0[30];

vu32 ICER[2];

u32? RSERVED1[30];

vu32 ISPR[2];

u32? RESERVED2[30];

vu32 ICPR[2];

u32? RESERVED3[30];

vu32 IABR[2];

u32? RESERVED4[62];

vu32 IPR[15];

} NVIC_TypeDef;

*/

以上寄存器介紹:

對(duì)一些概念的解釋:

1. 掛起:當(dāng)置位中斷掛起寄存器的時(shí)候逆趣,相應(yīng)的中斷將會(huì)被掛起,這是這個(gè)中斷將不會(huì)立即執(zhí)行嗜历,而是等待可執(zhí)行的時(shí)候再執(zhí)行宣渗;比如高低級(jí)別的中斷同時(shí)產(chǎn)生抖所,就先掛起低級(jí)別的中斷,等高級(jí)別的中斷執(zhí)行完畢痕囱,解除并執(zhí)行低級(jí)中斷田轧;

2. 對(duì)中斷優(yōu)先級(jí)控制寄存器的解釋

推薦去觀看一位前輩的博客:

http://blog.csdn.net/DLUTXIE/article/details/7059184?locationNum=4&fps=1

四 編程步驟

(1)選擇優(yōu)先級(jí)分組

/*

1. 此函數(shù)在庫(kù)文件misc.h文件下;

2. 參數(shù)可參照下面圖片:

3. 功能:選擇分組方式鞍恢;

*/

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

栗子:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//搶占優(yōu)先級(jí)可選0~3傻粘,響應(yīng)優(yōu)先級(jí)可選0~3;

(2)選擇帮掉,配置弦悉,并使能中斷

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //選擇EXTI2中斷

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優(yōu)先級(jí)為2

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //響應(yīng)優(yōu)先級(jí)為2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能EXTI2中斷;

NVIC_Init(&NVIC_InitStructure); //初始化以上參數(shù)蟆炊;

(3)寫出相應(yīng)中斷函數(shù)

栗子:

void EXTI2_IRQHandler(void)

{

//邏輯代碼稽莉;

EXTI_ClearITPendingBit(EXTI_Line2);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涩搓,隨后出現(xiàn)的幾起案子污秆,更是在濱河造成了極大的恐慌,老刑警劉巖昧甘,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件良拼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡充边,警方通過(guò)查閱死者的電腦和手機(jī)庸推,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痛黎,“玉大人,你說(shuō)我怎么就攤上這事刮吧『ィ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵杀捻,是天一觀的道長(zhǎng)井厌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)致讥,這世上最難降的妖魔是什么仅仆? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮垢袱,結(jié)果婚禮上墓拜,老公的妹妹穿的比我還像新娘。我一直安慰自己请契,他們只是感情好咳榜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布夏醉。 她就那樣靜靜地躺著,像睡著了一般涌韩。 火紅的嫁衣襯著肌膚如雪畔柔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天臣樱,我揣著相機(jī)與錄音靶擦,去河邊找鬼。 笑死雇毫,一個(gè)胖子當(dāng)著我的面吹牛玄捕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嘴拢,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼桩盲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了席吴?” 一聲冷哼從身側(cè)響起赌结,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孝冒,沒(méi)想到半個(gè)月后柬姚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庄涡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年量承,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穴店。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撕捍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泣洞,到底是詐尸還是另有隱情忧风,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布球凰,位于F島的核電站狮腿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呕诉。R本人自食惡果不足惜缘厢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甩挫。 院中可真熱鬧贴硫,春花似錦、人聲如沸伊者。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贪绘,卻和暖如春兑牡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背税灌。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工均函, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菱涤。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓苞也,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親粘秆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子如迟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1 異常類型 Cortex-M3內(nèi)核具有強(qiáng)大的異常響應(yīng)系統(tǒng),它把能夠打斷當(dāng)前代碼執(zhí)行流程的事件分為異常(excep...
    hackvilin閱讀 3,575評(píng)論 0 4
  • 此文用于記錄學(xué)習(xí)STM32中所學(xué)習(xí)或者鞏固的知識(shí)攻走,主要圍繞但并不局限于STM32殷勘。 本次學(xué)習(xí)并非為了深入了解使用S...
    yhhk閱讀 2,103評(píng)論 0 11
  • 簡(jiǎn)介 lab3 將主要實(shí)現(xiàn)能運(yùn)行被保護(hù)的用戶模式環(huán)境(protected user-mode environmen...
    找不到工作閱讀 6,937評(píng)論 1 8
  • 姓名:周崇杰 學(xué)號(hào):16040120059 專業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化 轉(zhuǎn)載自:http://blog.csd...
    CJbaby閱讀 1,061評(píng)論 0 0
  • 2017年8月25日,是夜昔搂,夢(mèng)中醒來(lái)玲销,想想自己的人生,突然間沒(méi)有了睡意摘符,寫寫自己的這些感悟吧贤斜。 2012年,我大學(xué)...
    小木屯閱讀 159評(píng)論 0 0