STM32的嵌套中斷系統(tǒng)NVIC詳細整理_第1頁
STM32的嵌套中斷系統(tǒng)NVIC詳細整理_第2頁
STM32的嵌套中斷系統(tǒng)NVIC詳細整理_第3頁
STM32的嵌套中斷系統(tǒng)NVIC詳細整理_第4頁
STM32的嵌套中斷系統(tǒng)NVIC詳細整理_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、STM32的嵌套中斷系統(tǒng)本文檔由“風中的葉”整理;QQ:654705188一、綜述:1、STM32(Cortex-M3)中的優(yōu)先級概念STM32(Cortex-M3)中有兩個優(yōu)先級的概念:搶占式優(yōu)先級和響應優(yōu)先級,也把響應優(yōu)先級稱作“亞優(yōu)先級”或“副優(yōu)先級”,每個中斷源都需要被指定這兩種優(yōu)先級。何為占先式優(yōu)先級(pre-emptionpriority)高占先式優(yōu)先級的中斷事件會打斷當前的主程序/中斷程序運行搶斷式優(yōu)先響應,俗稱中斷嵌套。何為副優(yōu)先級(subpriority)在占先式優(yōu)先級相同的情況下,高副優(yōu)先級的中斷優(yōu)先被響應;在占先式優(yōu)先級相同的情況下,如果有低副優(yōu)先級中斷正在執(zhí)行,高副優(yōu)先

2、級的中斷要等待已被響應的低副優(yōu)先級中斷執(zhí)行結束后才能得到響應非搶斷式響應(不能嵌套)。判斷中斷是否會被響應的依據(jù)首先是占先式優(yōu)先級,其次是副優(yōu)先級;占先式優(yōu)先級決定是否會有中斷嵌套;Reset、NMI、HardFault優(yōu)先級為負(高于普通中斷優(yōu)先級)且不可調整。優(yōu)先級沖突的處理具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應,即中斷的嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。當兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到

3、達,則中斷控制器根據(jù)他們的響應優(yōu)先級高低來決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。Cortex-M3中對中斷優(yōu)先級的定義既然每個中斷源都需要被指定這兩種優(yōu)先級,就需要有相應的寄存器位記錄每個中斷的優(yōu)先級;在Cortex-M3中定義了8個比特位用于設置中斷源的優(yōu)先級,這8個比特位可以有8種分配方式,如下:所有8位用于指定響應優(yōu)先級最高1位用于指定搶占式優(yōu)先級,最低7位用于指定響應優(yōu)先級最高2位用于指定搶占式優(yōu)先級,最低6位用于指定響應優(yōu)先級最高3位用于指定搶占式優(yōu)先級,最低5位用于指定響應優(yōu)先級最高4位用于指定搶占式優(yōu)先級,最低

4、4位用于指定響應優(yōu)先級最高5位用于指定搶占式優(yōu)先級,最低3位用于指定響應優(yōu)先級最高6位用于指定搶占式優(yōu)先級,最低2位用于指定響應優(yōu)先級最高7位用于指定搶占式優(yōu)先級,最低1位用于指定響應優(yōu)先級這就是優(yōu)先級分組的概念。stm32中對中斷優(yōu)先級的定義Cortex-M3允許具有較少中斷源時使用較少的寄存器位指定中斷源的優(yōu)先級,因此STM32把指定中斷優(yōu)先級的寄存器位減少到4位,這4個寄存器位的分組方式如下:第0組:所有4位用于指定響應優(yōu)先級第1組:最高1位用于指定搶占式優(yōu)先級,最低3位用于指定響應優(yōu)先級第2組:最高2位用于指定搶占式優(yōu)先級,最低2位用于指定響應優(yōu)先級第3組:最高3位用于指定搶占式優(yōu)先級

5、,最低1位用于指定響應優(yōu)先級第4組:所有4位用于指定搶占式優(yōu)先級如何9個中柘榔脊個I;門的(InterruptPriorityRegisters)來掲述該中斷的打先式優(yōu)先級及副優(yōu)先級在這個劈存器中5711321114個逖制位描述優(yōu)先級(Cortex-M3義了8他但引M淞貝使用4位占先武優(yōu)先級崎副優(yōu)先級的分配種組汁方式優(yōu)無級組別副優(yōu)先細4W16級CW0級33位用級j仞2綴22位/斗級2缺級11位/2級引附8繳00矽0緩4f”16級STM32金國遽回研討會w川個描述優(yōu)先級位有下列5種組合使川方式“優(yōu)先級細別啾定如何解釋這4位。AIRC(ApplicationInterruptandResetReg

6、ister)寄存器中有用于指定優(yōu)先級的4bits。這4個bits用于分配preemption優(yōu)先級和sub優(yōu)先級,在STM32的固件庫中定義如下:/*PreemptionPriorityGroup*/#defineNVIC_PriorityGroup_0pre-emptionpriority(u32)0 x700)/*0bitsfor4bitsforsubpriority*/#defineNVIC_PriorityGroup_1(u32)0 x600)/*1bitsforpre-emptionpriority3bitsforsubpriority*/#defineNVIC_PriorityGr

7、oup_2(u32)0 x500)/*2bitsforpre-emptionpriority2bitsforsubpriority*/#defineNVIC_PriorityGroup_3(u32)0 x400)/*3bitsforpre-emptionpriority1bitsforsubpriority*/#defineNVIC_PriorityGroup_4(u32)0 x300)/*4bitsforpre-emptionpriority0bitsforsubpriority*/可以通過調用STM32的固件庫中的函數(shù)NVIC_PriorityGroupConfig()選擇使用哪種優(yōu)先級分

8、組方式,這個函數(shù)的參數(shù)有下列5種:NVIC_PriorityGroup_0=選擇第0組NVIC_PriorityGroup_1=選擇第1組NVIC_PriorityGroup_2=選擇第2組NVIC_PriorityGroup_3=選擇第3組NVIC_PriorityGroup_4=選擇第4組接下來就是指定中斷源的優(yōu)先級,下面以一個簡單的例子說明如何指定中斷源的搶占式優(yōu)先級和響應優(yōu)先級:/選擇使用優(yōu)先級分組第1組NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/定義NVIC的結構體變量NVIC_InitTypeDefNVIC_InitStructu

9、re;/使能EXTI0中斷NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;/指定搶占式優(yōu)先級別1NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;/指定響應優(yōu)先級別0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);/使能EXTI9_5中斷NVIC_InitStructure.NVIC_IRQCh

10、annel=EXTI9_5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/指定搶占式優(yōu)先級別0NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;/指定響應優(yōu)先級別1NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);要注意的幾點是:如果指定的搶占式優(yōu)先級別或響應優(yōu)先級別超出了選定的優(yōu)先級分組所限定的范圍,將可能得到意想不到的結果;搶占式優(yōu)先級別相同的中斷源之間沒有嵌套關系;如

11、果某個中斷源被指定為某個搶占式優(yōu)先級別,又沒有其它中斷源處于同一個搶占式優(yōu)先級別,則可以為這個中斷源指定任意有效的響應優(yōu)先級別。2、開關總中斷在STM32/Cortex-M3中是通過改變CPU的當前優(yōu)先級來允許或禁止中斷。PRIMASK位:只允許NMI和hardfault異常,其他中斷/異常都被屏蔽(當前CPU優(yōu)先級=0)。FAULTMASK位:只允許NMI,其他所有中斷/異常都被屏蔽(當前CPU優(yōu)先級=-1)。在STM32固件庫中(stm32fl0 x_nvic.c和stm32fl0 x_nvic.h)定義了四個函數(shù)操作PRIMASK位和FAULTMASK位,改變CPU的當前優(yōu)先級,從而達到

12、控制所有中斷的目的。下面兩個函數(shù)等效于關閉總中斷:voidNVIC_SETPRIMASK(void);voidNVIC_SETFAULTMASK(void);下面兩個函數(shù)等效于開放總中斷:voidNVIC_RESETPRIMASK(void);voidNVIC_RESETFAULTMASK(void);上面兩組函數(shù)要成對使用,但不能交叉使用。例如:第一種方法:NVIC_SETPRIMASK();/關閉總中斷,只允許NMI和hardfault異常NVIC_RESETPRIMASK();/開放總中斷第二種方法:NVIC_SETFAULTMASK();/關閉總中斷,只允許NMINVIC_RESETF

13、AULTMASK();/開放總中斷常常使用:NVIC_SETPRIMASK();/DisableInterruptsNVIC_RESETPRIMASK();/EnableInterrupts可以用:#defineCLI()_set_PRIMASK(1)/關閉總中斷#defineSEI()_set_PRIMASK(0)/打開總中斷來實現(xiàn)開關總中斷的功能。二、寄存器介紹:1、在core_cm3.h中定義了:typedefstruct_IOuint32_tISER8;/*Offset:0 x000(R/W)InterruptSetEnableRegister*/SETENA:中斷0-239的使能寄存

14、器;地址為:0 xE000-E1000 xE000-E11C;復位值:0uint32_tRESERVED024;/未定義的寄存器_IOuint32_tICER8;/*Offset:0 x080(R/W)InterruptClearEnableRegister*/CLRENA:中斷0-239的除能寄存器;地址為:0 xE000-E1800 xE000-E19C;復位值:0uint32_tRSERVED124;/未定義的寄存器_IOuint32_tISPR8;/*Offset:0 x100(R/W)InterruptSetPendingRegister*/SETPEND:中斷0-239的懸起寄存器

15、;地址為:0 xE000-E2000 xE000-E21C;復位值:0uint32_tRESERVED224;/未定義的寄存器_IOuint32_tICPR8;/*Offset:0 x180(R/W)InterruptClearPendingRegister*/CLRPEND:中斷0-239的解懸寄存器;地址為:0 xE000-E2800 xE000-E29C;復位值:0uint32_tRESERVED324;/未定義的寄存器_IOuint32_tIABR8;/*Offset:0 x200(R/W)InterruptActivebitRegister*/ACTIVE:中斷0-239的活動狀態(tài)寄

16、存器;地址為:0 xE000-E3000 xE000-E31C復位值:0uint32_tRESERVED456;/未定義的寄存器IOuint8_tIP240;/*Offset:0 x300(R/W)InterruptPriorityRegister(8Bitwide)*/中斷優(yōu)先級寄存器陣列(8位):中斷0-239的中斷優(yōu)先級;/地址為:0 xE000-E4000 xE000-E4EF;復位值:0uint32_tRESERVED5644;/未定義的寄存器_IOuint32_tSTIR;/*Offset:0 xE00(R/W)SoftwareTriggerInterruptRegister*/S

17、TIR:軟件觸發(fā)中斷寄存器(如寫入8則觸發(fā)中斷8的中斷);/地址為:0 xE000-EF00;復位值:-NVIC_Type;#defineSCS_BASE(0 xE000E000)/*SystemControlSpaceBaseAddress*/#defineNVIC_BASE(SCS_BASE+0 x0100)/*NVICBaseAddress*/#defineNVIC(NVIC_Type*)NVIC_BASE)/*NVICconfigurationstruct*/typedefstruct_Iuint32_tCPUID;/*Offset:0 x000(R/)CPUIDBaseRegiste

18、r*/CPUID:-;地址為:0 xE000-ED00;復位值:0 x410fc230_IOuint32_tICSR;/*Offset:0 x004(R/W)InterruptControlandStateRegister*/ICSR:中斷控制及狀態(tài)寄存器;地址為:0 xE000-ED04;復位值:0Dll中箭授制尺秋態(tài)詩任器1匸栄OxEDOOEDO4也啟類型復悝隹NMIPENDrSETR/W0町1kUi尿忡臨*IM打NW1I附it先貓址禹II.從不眥駅.&硏忖北荷爪櫛v.lJyiANL1I腫務例畀”28PENDSVSETR/W0碼1級H此HntiSV.ilmE;V)返H1PsdSV的獄怎27

19、PEND&VCLHW0Y:iLl?rFPendSVAiA2&PEND5T5ETR/W0i1畑起57kk.謨収它創(chuàng)趙網(wǎng)Pend5V的狀奢25PFNDS-TCLRW0%;114沾除Sy5Tick叔如狀卷23ISRPREEMPTR0j1m.則如亍總如的中甌將抽fnm入活型狀念(KJ1中圧閔丨制的囲試11的22ISRPEWDIWGR0呦贓*T挪冊中斷極惡粗不仇默NMI21:12匚TPtNDINGR0.秋包的牴H的編譏如累的1-食中撕汕町則它怖你紀這W謝中期中就丸級竝商的耶個-11RETTDBA5E0呷從舜謝腿創(chuàng)肩耕狗罰顯級由3雄鮭訶|它環(huán)席戢副W+籬住內仁曲是在蜒鶴樞旌下化:個中,fi1mI皺的怵命處

20、i活動狀缶感者右顯常泓科活動時典仃廣并常呼齊附卅t此時譏祁返I叫甘爭豹產仇叭此乃礎腿和如蝴此位溝口9:OVECMCTIVER,0節(jié)冊熱胡他15只綣;誼杭啓掘舊1前込VI啲鬪圧K命中斷的已槌佻外常浮人W打NMI樸蜉hull.帕黑事牛葉朮兒卞牛眼般闕程誼他秤聊權M惑si的伸水料址址w-節(jié)異常諭諭燈&養(yǎng)它帝抽伍e木忖IP的們聯(lián)A1&A1紂測-怦1Mrtfj城吁f可以川Ilk編1;栄抿什外叩砂樸XifttiMt催甞冇心乩IOuint32_tVTOR;/*Offset:0 x008(R/W)VectorTableOffsetRegister*/VTOR:向量表偏移寄存器;地址為:0 xE000-ED08

21、;復位值:IOuint32_tAIRCR;/*Offset:OxOOC(R/W)ApplicationInterruptandResetControlRegister*/表0.13應用鋰癢中斷員燈廨制苔帝霧酒IR匚咼OxEOOO_EEOC描述3磚VFCTKERW時M虺:仃何對破雷打徘的T海竹.揶必鎖同時把DK05FA、入陽久X刪鍛乳翊略-苻讀取此T,了.imi(jkfaos15ENDIANESSR-捋小和證乩1-AiBES),0小端*bltffi站仇也忡峠綁毎的.不能史訊1Q18PRGf?OUPR/W0優(yōu)先級分組iSrwCSEfRrQw-輔我鼎片揑溜遐訓產q次擔仇IVECTCLFtAjCfIV

22、fwKtrii仃共當?shù)脑b訓ut態(tài)苗a.逋制wU4K*厠或舌亞訊從耦疑1卩恢塑m用0vectresetw*Vfrcm3處理隣內枝俐就邏忙除外人皿把吐技柿那述響芯樸上占.內榜廿漿的山螢IOuint32_tSCR;/*Offset:0 x010(R/W)SystemControlRegister*/IOuint32_tCCR;/*Offset:0 x014(R/W)ConfigurationControlRegister*/_IOuint8_tSHP12;/*Offset:0 x018(R/W)SystemHandlersPriorityRegisters(47,8-11,12-15)*/IOuin

23、t32_tSHCSR;/*Offset:0 x024(R/W)SystemHandlerControlandStateRegister*/HardFaultStatusRegister*/DebugFaultStatusRegister*/IOuint32_tMMFAR;/*Offset:0 x034(R/W)MemManageFaultAddressRegister*/_IOuint32_tCFSR;/*Offset:0 x028(R/W)ConfigurableFaultStatusRegister*/表Di站fdultDxEDO0_ED28MMAftVALlD-0訂IM我1,MMAftf

24、|-阿IKERFWrQMUNSTiXRRIWQz-1DACOrtOLR/Wl0ViIN門冋山愼IftCEUJDL0IOuint32_tHFSR;/*Offset:0 x02C(R/W)IOuint32_tDFSR;/*Offset:0 x030(R/W)IOuint32_tBFAR;/*Offset:0 x038(R/W)BusFaultAddressRegister*/_IOuint32_tAFSR;/*Offset:0 x03C(R/W)AuxiliaryFaultStatusRegister*/&25輔肋仙JIt維址齢韻料FAR】Q応BQ.上D施描述1Iuint32_tPFR2;/*Of

25、fset:0 x040(R/)ProcessorFeatureRegister*/Iuint32_tDFR;/*Offset:0 x048(R/)DebugFeatureRegister*/Iuint32_tADR;/*Offset:0 x04C(R/)AuxiliaryFeatureRegister*/Iuint32_tMMFR4;/*Offset:0 x050(R/)MemoryModelFeatureRegister*/Iuint32_tISAR5;/*Offset:0 x060(R/)InstructionSetAttributesRegister*/uint32_tRESERVED0

26、5;IOuint32_tCPACR;/*Offset:0 x088(R/W)CoprocessorAccessControlRegister*/SCB_Type;#defineSCS_BASE(0 xE000E000)/*SystemControlSpaceBaseAddress*/#defineSCB_BASE(SCS_BASE+0 x0D00)/*SystemControlBlockBaseAddress*/#defineSCB(SCB_Type*)SCB_BASE)/*SCBconfigurationstruct*/三、初始化設置STM32中的NVIC設置的流程如下:選擇NVIC的中斷分

27、組:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_l);選擇中斷分組1注意:優(yōu)先級分組只能設置一次。定義NVIC的結構體變量:NVIC_InitTypeDefNVIC_InitStructure;選擇要進行NVIC設置的模塊:NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;選擇串口1中斷進行搶占式中斷優(yōu)先級的設置:NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/搶占式中斷優(yōu)先級設置為0進行響應式中斷優(yōu)先級的設置:NVIC_InitStructu

28、re.NVIC_IRQChannelSubPriority=3;/響應式中斷優(yōu)先級設置為3使能中斷:NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;使能中斷根據(jù)上述設置進行初始化:NVIC_Init(&NVIC_InitStructure);注:NVIC_InitTypeDef的定義在misc.h中;NVIC的相關函數(shù)在misc.c中。RCC_IRQn=5,/*!NVIC_IRQChannel的取值列表:typedefenumIRQn/*Cortex-M3ProcessorExceptionsNumbers*x*x*x*x*x*x*x*x*x*x*x*

29、x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*/=-14,/*!2NonMaskable*/NonMaskableInt_IRQnInterruptMemoryManagement_IRQnManagementInterruptBusFault_IRQnFaultInterruptUsageFault_IRQnFaultInterruptSVCall_IRQnCallInterruptDebugMonitor_IRQnMonitorInterruptPendSV_IRQnPendS

30、VInterruptSysTick_IRQnSystemTickInterrupt=-12,/*!4Cortex-M3Memory*/=-11,/*!5Cortex-M3Bus*/=-10,/*!6Cortex-M3Usage*/=-5,/*!11Cortex-M3SV*/=-4,/*!12Cortex-M3Debug*/=-2,/*!14Cortex-M3*/=-1,/*!15Cortex-M3*/*STM32specificInterruptNumbers*/WWDG_IRQn=0,/*!WindowWatchDogInterrupt*/PVD_IRQn=1,/*!PVDthroughEX

31、TILinedetectionInterrupt*/TAMPER_IRQn=2,/*!TamperInterrupt*/RTC_IRQn=3,/*!RTCglobalInterrupt*/FLASH_IRQn=4,/*!FLASHglobalInterrupt*/RCCglobal=6,/*!=17,/*!DMA1*/Interrupt*/EXTI0_IRQnEXTILine0Interrupt*/EXTI1_IRQnEXTILine1Interrupt*/EXTI2_IRQnEXTILine2Interrupt*/EXTI3_IRQnEXTILine3Interrupt*/EXTI4_IRQ

32、nEXTILine4Interrupt*/DMA1_Channel1_IRQnChannel1globalInterruptDMA1_Channel2_IRQnChannel2globalInterruptDMA1_Channel3_IRQnChannel3globalInterruptDMA1_Channel4_IRQnChannel4globalInterruptDMA1_Channel5_IRQnChannel5globalInterruptDMA1_Channel6_IRQnChannel6globalInterruptDMA1_Channel7_IRQnChannel7globalI

33、nterrupt#ifdefSTM32F10X_CLTOC o 1-5 h z=7,/*!=8,/*!=9,/*!=10,/*!=11,/*!DMA1*/=12,/*!DMA1*/=13,/*!DMA1*/=14,/*!DMA1*/=15,/*!DMA1*/=16,/*!DMA1*/*!ADC1*/*!USB*/*!USB*/*!CAN1/*!CAN1/*!*/*!TIM1/*!TIM1/*!TIM1*/*!TIM1*/*!/*!/*!/*!I2C1ADC1_2_IRQn=18,andADC2globalInterruptCAN1_TX_IRQn=19,DeviceHighPriorityor

34、CAN1TXInterruptsCAN1_RX0_IRQn=20,DeviceLowPriorityorCAN1RX0InterruptsCAN1_RX1_IRQn=21,RX1Interrupt*/CAN1_SCE_IRQn=22,SCEInterrupt*/EXTI9_5_IRQn=23,ExternalLine9:5InterruptsTIM1_BRK_IRQn=24,BreakInterrupt*/TIM1_UP_IRQn=25,UpdateInterrupt*/TIM1_TRG_COM_IRQn=26,TriggerandCommutationInterruptTIM1_CC_IRQ

35、n=27,CaptureCompareInterruptTIM2_IRQn=28,TIM2globalInterrupt*/TIM3_IRQn=29,TIM3globalInterrupt*/TIM4_IRQn=30,TIM4globalInterrupt*/I2C1_EV_IRQn=31,50,/*!=32,/*!I2C1=33,/*!I2C2=34,/*!I2C2=35,/*!=36,/*!=37,/*!*=38,/*!*=39,/*!*=40,/*!*/=41,/*!RTC*/*!USBOTGFSEventInterrupt*/I2C1_ER_IRQnErrorInterrupt*/I2

36、C2_EV_IRQnEventInterrupt*/I2C2_ER_IRQnErrorInterrupt*/SPI1_IRQnSPI1globalInterrupt*/SPI2_IRQnSPI2globalInterrupt*/USART1_IRQnUSART1globalInterrupt/USART2_IRQnUSART2globalInterrupt/USART3_IRQnUSART3globalInterrupt/EXTI15_10_IRQnExternalLine15:10InterruptsRTCAlarm_IRQn=42,WakeUpfromsuspendthroughEXTIL

37、ineInterrupt*/TIM5_IRQn=TIM5globalAlarmthroughEXTILineInterruptOTG_FS_WKUP_IRQnInterrupt*/SPI3_IRQn=51,/*!SPI3globalInterrupt*/UART4_IRQn=52,/*!UART4globalInterrupt*/UART5_IRQn=53,/*!UART5globalInterrupt*/TIM6_IRQn=54,/*!TIM6globalInterrupt*/TIM7_IRQn=55,/*!TIM7globalInterrupt*/DMA2_Channel1_IRQn=56

38、,/*!DMA2Channel1globalInterruptDMA2_Channel2_IRQn=57,*/*!DMA2Channel2globalInterruptDMA2_Channel3_IRQn=58,*/*!DMA2Channel3globalInterruptDMA2_Channel4_IRQn=59,*/*!DMA2Channel4globalInterruptDMA2_Channel5_IRQn=60,*/*!DMA2Channel5globalInterruptETH_IRQn*/=61,/*!EthernetglobalInterruptETH_WKUP_IRQn=62,

39、*/*!EthernetWakeupthroughEXTIlineInterrupt*/CAN2_TX_IRQn=63,/*!CAN2TXInterrupt*/CAN2_RX0_IRQnRX0Interrupt*/CAN2_RX1_IRQnRX1Interrupt*/CAN2_SCE_IRQnSCEInterrupt*/OTG_FS_IRQnOTGFSglobalInterrupt#endif/*STM32F10X_CL*/IRQn_Type;使用庫函數(shù)進行時鐘系統(tǒng)初始化配置=64,/*!CAN2=65,/*!CAN2=66,/*!CAN2=67/*!USB*/voidNVIC_config(

40、)配置中斷NVIC_InitTypeDefNVIC_InitStructure;/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_l);選擇中斷分組1NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;選擇串口1中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/搶占式中斷優(yōu)先級設置為0NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;/響應式中斷優(yōu)先級設置為3NVIC_InitStructure.NVI

41、C_IRQChannelCmd=ENABLE;/使能中斷NVIC_Init(&NVIC_InitStructure);四、相關庫函數(shù)解析1、庫中所涉及到的結構體typedefstructuint8_tNVIC_IRQChannel;/*!SpecifiestheIRQchanneltobeenabledordisabled.ThisparametercanbeavalueofrefIRQn_Type(ForthecompleteSTM32DevicesIRQChannelslist,pleaserefertostm32f10 x.hfile)*/uint8_tNVIC_IRQChannelPr

42、eemptionPriority;/*!Specifiesthepre-emptionpriorityfortheIRQchannelspecifiedinNVIC_IRQChannel.Thisparametercanbeavaluebetween0and15asdescribedinthetablerefNVIC_Priority_Table*/uint8_tNVIC_IRQChannelSubPriority;/*!SpecifiesthesubprioritylevelfortheIRQchannelspecifiedinNVIC_IRQChannel.Thisparametercan

43、beavaluebetween0and15asdescribedinthetablerefNVIC_Priority_Table*/FunctionalStateNVIC_IRQChannelCmd;/*!SpecifieswhethertheIRQchanneldefinedinNVIC_IRQChannelwillbeenabledordisabled.ThisparametercanbeseteithertoENABLEorDISABLE*/NVIC_InitTypeDef;2、庫函數(shù)解析在misc.h中:voidNVIC_PriorityGroupConfig(uint32_tNVIC

44、_PriorityGroup);/對優(yōu)先級分組進行配置voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct);/根據(jù)中斷結構體的值初始化中斷voidNVIC_SetVectorTable(uint32_tNVIC_VectTab,uint32_tOffset);/設置向量表的位置和偏移voidNVIC_SystemLPConfig(uint8_tLowPowerMode,FunctionalStateNewState);/選擇系統(tǒng)進入低功耗模式的條件voidSysTick_CLKSourceConfig(uint32_tSysTick_CLKSource);/系統(tǒng)滴答時鐘源的配

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論