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

歷史上的今天

今天是:2025年01月02日(星期四)

正在發(fā)生

2020年01月02日 | stm32中斷嵌套全攻略

發(fā)布者:北極星小鵬 來源: eefocus關(guān)鍵字:stm32  中斷嵌套 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

斷斷續(xù)續(xù)學(xué)習(xí)STM32一學(xué)期了,時(shí)間過的好快,現(xiàn)在對STM32F103系列單片機(jī)的中斷嵌套及外部中斷做一個(gè)總結(jié),全當(dāng)學(xué)習(xí)筆記。廢話不多說,ARM公司的Cortex-m3 內(nèi)核,支持256個(gè)中斷,其中包含16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級的可編程中斷設(shè)置。在ST公司的STM32單片機(jī)中最多有84個(gè)中斷,包括16個(gè)內(nèi)核中斷(這16個(gè)內(nèi)部中斷是任何半導(dǎo)體商也改不了的),和68個(gè)可屏蔽中斷,具有16級可編程的中斷優(yōu)先級。但是在STM32F103系列中只有60個(gè)可屏蔽中斷,(107系列有68個(gè))。

針對這60個(gè)可屏蔽中斷,重點(diǎn)掌握它的一個(gè)中斷優(yōu)先級寄存器組IPR,全稱Interrupt Priority Registers。這個(gè)寄存器組包含15個(gè)32位的寄存器,一個(gè)可屏蔽中斷占用8bit,那么一個(gè)寄存器可以控制4個(gè)可屏蔽中斷,一共15*4=60。然而在這占用的8bit中又只使用了高4bit,這高4bit的分配才是STM32F103系列單片機(jī)中斷嵌套的設(shè)置所在。STM32F103系列的中斷嵌套分為5個(gè)組,分別是0、1、2、3、4  這5個(gè)組,下面是5個(gè)組與中斷嵌套的對應(yīng)關(guān)系。

分配結(jié)果

0

0位搶占優(yōu)先級,4位響應(yīng)優(yōu)先級

1

1位搶占優(yōu)先級,3位響應(yīng)優(yōu)先級

2

2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級

3

3位搶占優(yōu)先級,1位響應(yīng)優(yōu)先級

4

4位搶占優(yōu)先級,0位響應(yīng)優(yōu)先級


 

對于搶占優(yōu)先級和響應(yīng)優(yōu)先級,只需記住兩點(diǎn),第一、搶占任何優(yōu)先級比都比所有響應(yīng)優(yōu)先級優(yōu)先級高。只有搶占優(yōu)先級更高的具有中斷嵌套功能。(即打斷其他正在執(zhí)行的中斷)。第二、數(shù)字越小優(yōu)先級越高 ,搶占優(yōu)先級和響應(yīng)優(yōu)先級都一樣時(shí),首先響應(yīng)中斷通道對應(yīng)中斷向量地址低的那個(gè)中斷。

下面對0組和1組的情況做一個(gè)分析。
0組對應(yīng)是0位搶占優(yōu)先級,4位響應(yīng)優(yōu)先級,那么無搶占優(yōu)先級,響應(yīng)優(yōu)先級可設(shè)置為0到15級(2的4次方種)中的任意一種。
1組對應(yīng)是1位搶占優(yōu)先級,3位響應(yīng)優(yōu)先級,那么搶占優(yōu)先級只可設(shè)置為0級或者1級中的任意一種(2的1次方種),響應(yīng)優(yōu)先級可設(shè)置為0到7級(2的3次方種)中的任意一種。
上電復(fù)位時(shí),中斷配置為4組,并且60個(gè)外部中斷都是搶占優(yōu)先級為0級,無響應(yīng)優(yōu)先級。

總結(jié)一下:

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

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

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

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


所以可以看出判斷兩個(gè)中斷的優(yōu)先級時(shí)先看搶占優(yōu)先級的高低,如果相同再看響應(yīng)優(yōu)先級的高低。如果全都相同最后看中斷通道向量地址。
一般來說在使用過程中,一個(gè)系統(tǒng)使用一個(gè)組別就完全可以滿足需要。所以在使用一個(gè)組別后一般不要在系統(tǒng)中再改動(dòng)組別,骨灰級玩家可以去試試(小心芯片燒了)。

外部中斷:
STM32F103的外部中斷EXTI支持19個(gè)外部中斷/事件請求。每個(gè)中斷/事件都有獨(dú)立的觸發(fā)和屏蔽設(shè)置。
0到15線:對應(yīng)外部I/O口輸入中斷
線16:接到PVD輸出
線17:接到RCT鬧鐘事件
線18:接到USB喚醒事件
線16到線18我自己都沒用過,主要對線0到15的I/O輸入中斷做一個(gè)總結(jié),有個(gè)注意的地方是這0到15線的外部中斷,其中0到4線,這5個(gè)外部中斷都有自己單獨(dú)的中斷響應(yīng)函數(shù)。5到9線公用一個(gè)中斷服務(wù)函數(shù),10到15線公用一個(gè)中斷服務(wù)函數(shù)。
外部中斷配置寄存器組EXTICR包含4個(gè)32位的寄存器,分別是EXTICR0、EXTICR1、EXTICR2、EXTICR3、但每一個(gè)寄存器只用了低16位,每4位控制一個(gè)I/O口,一個(gè)寄存器控制4個(gè)I/O口,EXTICR寄存器組控制16個(gè)I/O口,剛好一個(gè)GPIO的I/O口數(shù)。下面以 EXTICR0為例,用一個(gè)表格表示:


I/O口3

I/O口2

I/O口1

I/O口0

0000    GPIOA

0000    GPIOA

0000    GPIOA

0000    GPIOA

0001    GPIOB

0001    GPIOB

0001    GPIOB

0001    GPIOB

0010    GPIOC

0010    GPIOC

0010    GPIOC

0010    GPIOC

0011    GPIOD

0011    GPIOD

0011    GPIOD

0011    GPIOD

0100    GPIOE

0100    GPIOE

0100    GPIOE

0100    GPIOE

0101    GPIOF

0101    GPIOF

0101    GPIOF

0101    GPIOF

0110    GPIOG

0110    GPIOG

0110    GPIOG

0110    GPIOG



 

比如配置GPIOA.0就是將EXTICR0的低4位配置成0000,若配置GPIOB.1就是配置EXTICR0的4到7位,為0001。
這里有一個(gè)問題,如果要配置GPIOA.0和GPIOB.0,會(huì)引起沖突,不知道是不是分時(shí)配置解決的。我用的固體庫的方式,不需要考慮這些,呵呵。注意使用固件庫時(shí)中斷復(fù)位函數(shù)是寫在stm32f10x_it.c這個(gè)文件里的。


下面結(jié)合外部中斷附上固件庫版本的程序

主函數(shù)里:

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitSructure;


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //設(shè)置為優(yōu)先級組2


NVIC_InitSructure.NVIC_IRQChannel = EXTI15_10_IRQn;       //定義外部中斷線13中斷通道

NVIC_InitSructure.NVIC_IRQChannelPreemptionPriority = 0;        //搶占優(yōu)先級0

NVIC_InitSructure.NVIC_IRQChannelSubPriority = 0;                       //響應(yīng)優(yōu)先級0

NVIC_InitSructure.NVIC_IRQChannelCmd = ENABLE;                               //使能指定通道

NVIC_Init(&NVIC_InitSructure);                                                                      


NVIC_InitSructure.NVIC_IRQChannel = EXTI15_10_IRQn;        //定義外部中斷線15中斷通道

NVIC_InitSructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitSructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitSructure.NVIC_IRQChannelCmd = ENABLE;                               //使能指定通道

NVIC_Init(&NVIC_InitSructure);


NVIC_InitSructure.NVIC_IRQChannel = EXTI0_IRQn;        //定義外部中斷線0中斷通道

NVIC_InitSructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitSructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitSructure.NVIC_IRQChannelCmd = ENABLE;                               //使能指定通道

NVIC_Init(&NVIC_InitSructure);



}


void EXTI_Configuration(void)

{       

  EXTI_InitTypeDef EXTI_InitStructure;                                                    //初始化結(jié)構(gòu)


  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource13);  //指明當(dāng)前哪個(gè)引腳為外部中斷觸發(fā)引腳

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);


  EXTI_ClearITPendingBit(EXTI_Line13);                                      //清除中斷標(biāo)志位 EXTI_Line13對應(yīng)相應(yīng)的中斷線13

  EXTI_ClearITPendingBit(EXTI_Line15);


  EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;                            //選擇中斷模式請求

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

  EXTI_InitStructure.EXTI_Line = EXTI_Line13|EXTI_Line15;  // 選擇待使能的外部中斷線

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                                        // 定義選中線的新狀態(tài)  使能

  EXTI_Init(&EXTI_InitStructure);                     //把EXIT_InitStructure中的每一個(gè)參數(shù)按缺省值填入


  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);     //指明當(dāng)前哪個(gè)引腳為外部中斷觸發(fā)引腳

  EXTI_ClearITPendingBit(EXTI_Line0);  

  EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;                            //選擇中斷模式請求

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                    //上升沿觸發(fā)

  EXTI_InitStructure.EXTI_Line = EXTI_Line0;            // 選擇待使能的外部中斷線

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                                        // 定義選中線的新狀態(tài)  使能

  EXTI_Init(&EXTI_InitStructure);                     //把EXIT_InitStructure中的每一個(gè)參數(shù)按缺省值填入


}


stm32f10x_it.c這個(gè)文件里

void EXTI15_10_IRQHandler(void)

{

              if(EXTI_GetITStatus(EXTI_Line13)!=RESET)

        {               GPIO_WriteBit( GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8))); //LED0翻轉(zhuǎn)

                      EXTI_ClearITPendingBit(EXTI_Line13);

  }

             if(EXTI_GetITStatus(EXTI_Line15)!=RESET)

        {               GPIO_WriteBit( GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2))); //LED0翻轉(zhuǎn)

                EXTI_ClearITPendingBit(EXTI_Line15);  


  }


}


void EXTI0_IRQHandler(void)

{

          if(EXTI_GetITStatus(EXTI_Line0)!=RESET)

{ GPIO_WriteBit( GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8))); //LED0翻轉(zhuǎn)

    GPIO_WriteBit( GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2))); //LED0翻轉(zhuǎn)


  EXTI_ClearITPendingBit(EXTI_Line0);    

}

}


關(guān)鍵字:stm32  中斷嵌套 引用地址:stm32中斷嵌套全攻略

上一篇:stm32與HC-SR04超聲波傳感器測距
下一篇:keil(MDK-ARM)的調(diào)試使用

推薦閱讀

“技術(shù)創(chuàng)新是科技企業(yè)的生命線,我們將不斷加大創(chuàng)新力度,大膽去想、放手去做、探索邊界。”小米科技董事長兼首席執(zhí)行官雷軍日前接受記者采訪時(shí)說,黨的十九大報(bào)告為中國制造業(yè)發(fā)展指明了方向、明確了目標(biāo),更是給了相關(guān)企業(yè)莫大的鼓勵(lì)。小米的手機(jī)業(yè)務(wù)將招募上千名研發(fā)人才,進(jìn)一步壯大創(chuàng)新力量。近年來,隨著全面深化改革不斷推進(jìn),我國科技企業(yè)取得長足...
隨著人口紅利的逐步消失,機(jī)器換人時(shí)代順勢而來。近年來,在人工智能和傳感器等技術(shù)的驅(qū)動(dòng)下,機(jī)器人應(yīng)用場景已經(jīng)從工業(yè)到商業(yè)、教育、醫(yī)療等不斷擴(kuò)大,并顯現(xiàn)出前所未有的市場機(jī)遇。江山如此多嬌,引無數(shù)英雄競折腰!國內(nèi)涌現(xiàn)出越來越多的機(jī)器人創(chuàng)新企業(yè),與海外機(jī)器人廠商形成百家爭鳴的格局,而深圳市越疆科技有限公司(下稱越疆科技)就是其中之一。越...
據(jù)雷科技報(bào)道,近日一款型號為realme RMX2051的設(shè)備現(xiàn)身Geekbench跑分網(wǎng)站,業(yè)界猜測可能是即將發(fā)布的realme X50 5G。信息顯示,realme X50 5G搭載高通驍龍765G處理器,配備了8GB內(nèi)存,運(yùn)行基于Android 10定制的操作系統(tǒng)。該機(jī)單核跑分成績?yōu)?907分,多核7017分,而麒麟810的單核跑分成績?yōu)?839分,多核7930分,兩者的單核表現(xiàn)基本55開,多核還是后...
據(jù)digitimes報(bào)道,業(yè)內(nèi)人士透露,臺(tái)積電和三星在各自3nm制程技術(shù)的開發(fā)過程中都遇到了不同但關(guān)鍵的瓶頸。報(bào)道稱,臺(tái)積電和三星因此將不得不推遲3nm制程工藝的開發(fā)進(jìn)度。臺(tái)積電董事長劉德音此前表示,臺(tái)積電今年?duì)I收持續(xù)創(chuàng)新高,在3nm領(lǐng)先布局,于南科的累計(jì)投資將超過2萬億元新臺(tái)幣(下同),目標(biāo)是3nm量產(chǎn)時(shí), 12英寸晶圓月產(chǎn)能超過60萬片。臺(tái)積電規(guī)劃,...

史海拾趣

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

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

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

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