www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]朋友們,如果你需要在STM32上移植RTOS,那么首先必須深入理解它的中斷系統(tǒng)。什么是NVIC?即嵌套向量中斷控制器(Nested Vectored Interrupt Controller)。STM32的中有一個強大而方便的NVIC,它是屬于Cortex內(nèi)核的器件,

朋友們,如果你需要在STM32上移植RTOS,那么首先必須深入理解它的中斷系統(tǒng)。什么是NVIC?即嵌套向量中斷控制器(Nested Vectored Interrupt Controller)。STM32的中有一個強大而方便的NVIC,它是屬于Cortex內(nèi)核的器件,不可屏蔽中斷(NMI)和外部中斷都由它來處理,而SYSTICK不是由NVIC來控制的。

特性:

●60個可屏蔽中斷通道(不包含16個Cortex?-M3的中斷線);

●16個可編程的優(yōu)先等級(使用了4位中斷優(yōu)先級);

●低延遲的異常和中斷處理;

●電源管理控制;

●系統(tǒng)控制寄存器的實現(xiàn);

1.中斷優(yōu)先級分組

STM32(Cortex-M3)中有兩個優(yōu)先級的概念--搶占式優(yōu)先級和響應(yīng)優(yōu)先級,有人把響應(yīng)優(yōu)先級稱作'亞優(yōu)先級'或'副優(yōu)先級',每個中斷源都需要被指定這兩種優(yōu)先級。

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

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

Cortex內(nèi)核具有強大的異常響應(yīng)系統(tǒng),它把能夠打斷當前代碼執(zhí)行流程的事件分為異常(exception)和中斷(interrupt),并把它們用一個表管理起來,編號為0~15的稱為內(nèi)核異常,而16以上的則稱為外部中斷,這個表就稱為中斷向量表。

正是因為每個中斷源都需要被指定這兩種優(yōu)先級,就需要有相應(yīng)的寄存器位記錄每個中斷的優(yōu)先級;在Cortex-M3中定義了8個比特位用于設(shè)置中斷源的優(yōu)先級,這8個比特位可以有8種分配方式,如下:

1.所有8位用于指定響應(yīng)優(yōu)先級

2.最高1位用于指定搶占式優(yōu)先級,最低7位用于指定響應(yīng)優(yōu)先級

3.最高2位用于指定搶占式優(yōu)先級,最低6位用于指定響應(yīng)優(yōu)先級

4.最高3位用于指定搶占式優(yōu)先級,最低5位用于指定響應(yīng)優(yōu)先級

5.最高4位用于指定搶占式優(yōu)先級,最低4位用于指定響應(yīng)優(yōu)先級

6.最高5位用于指定搶占式優(yōu)先級,最低3位用于指定響應(yīng)優(yōu)先級

7.最高6位用于指定搶占式優(yōu)先級,最低2位用于指定響應(yīng)優(yōu)先級

8.最高7位用于指定搶占式優(yōu)先級,最低1位用于指定響應(yīng)優(yōu)先級

以上便是優(yōu)先級分組的概念,但是Cortex-M3允許具有較少中斷源時使用較少的寄存器位指定中斷源的優(yōu)先級。

而STM32對這個表重新進行了編排,把編號從-3至6的中斷向量定義為系統(tǒng)異常,編號為負的內(nèi)核異常不能被設(shè)置優(yōu)先級,如復(fù)位(Reset)、不可屏蔽中斷(NMI)、硬錯誤(Hardfault)。從編號7開始的為外部中斷,這些中斷的優(yōu)先級都是可以用戶更改的。詳細的STM32中斷向量號可以在startup_stm32f10x_XX.s中查找。

因此STM32把指定中斷優(yōu)先級的寄存器位減少到4位,這4個寄存器位的分組方式如下:

第0組:所有4位用于指定響應(yīng)優(yōu)先級(16種)

第1組:最高1位用于指定搶占式優(yōu)先級,最低3位用于指定響應(yīng)優(yōu)先級(8種)

第2組:最高2位用于指定搶占式優(yōu)先級,最低2位用于指定響應(yīng)優(yōu)先級(4種)

第3組:最高3位用于指定搶占式優(yōu)先級,最低1位用于指定響應(yīng)優(yōu)先級(2種)

第4組:所有4位用于指定搶占式優(yōu)先級

這里便對于于文章最前提到的固件庫里相關(guān)的函數(shù)了——NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup),函數(shù)的參數(shù)共有5種:

這個函數(shù)的參數(shù)(NVIC_PriorityGroup值)有下列5種:

NVIC_PriorityGroup_0 =>選擇第0組

NVIC_PriorityGroup_1 =>選擇第1組

NVIC_PriorityGroup_2 =>選擇第2組

NVIC_PriorityGroup_3 =>選擇第3組

NVIC_PriorityGroup_4 =>選擇第4組

這其實也很好理解,比如選擇NVIC_PriorityGroup_1,那么搶占式優(yōu)先級便占一位,也就是說可以有2^1個級別,可以設(shè)置為0和1,而響應(yīng)優(yōu)先級則占3位,也就是說可以有2^3個選擇,可以設(shè)置為0~7;總共來說就可以區(qū)別>16種優(yōu)先級了。

//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

//NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

舉個例子吧,假如現(xiàn)在有4個外部中斷,還有一個EXTI9_5中斷,那么如果選擇優(yōu)先級分組為第1組,那么搶占式優(yōu)先級便只有兩種,5個中斷就至少有3個在搶占式優(yōu)先級上是相同的優(yōu)先級上,其他兩個在令一優(yōu)先級別。接著設(shè)置響應(yīng)優(yōu)先級可以有8種選擇;假如現(xiàn)在同時有兩個搶占式優(yōu)先級別相同的中斷發(fā)生,那么處理的順序是誰的響應(yīng)優(yōu)先級高則誰優(yōu)先進入中斷,另外這點是需要注意的,如果此時進入這個中斷之后又來了一個搶占式優(yōu)先級相同但是響應(yīng)優(yōu)先級更高的中斷,這時也是不會打斷已有的中斷的。

void NVIC_Config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdefVECT_TAB_RAM

//Set the Vector Table base location at 0x20000000

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else

//Set the Vector Table base location at 0x08000000

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中斷優(yōu)先級組:1組(整個系統(tǒng)為同一組)

//設(shè)置先占優(yōu)先級0~1,響應(yīng)優(yōu)先級0~7

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

//* Enable the TIM3 Interrupt

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;// TIM3全局中斷

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占優(yōu)先級1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//從優(yōu)先級1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;// IRQ通道被使能

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

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

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

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式開發(fā)中,STM32的時鐘系統(tǒng)因其靈活性和復(fù)雜性成為開發(fā)者關(guān)注的焦點。然而,看似簡單的時鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時鐘源選擇、PLL配置、總線時鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準算法、軟...

關(guān)鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當前智能家居產(chǎn)品需求不斷增長 ,在這一背景下 ,對現(xiàn)有澆花裝置缺陷進行了改進 ,設(shè)計出基于STM32單片機的全 自動家用澆花機器人。該設(shè)計主要由機械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機械結(jié)構(gòu)通過麥克納姆輪底盤與噴灑裝置的結(jié)合實現(xiàn)機器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過性強

用c++編程似乎是讓你的Arduino項目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個圖形化編程平臺將復(fù)雜電子項目的創(chuàng)建變成了拖動和連接塊的簡單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術(shù)的無線傳感網(wǎng)絡(luò)憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測、工業(yè)自動化等場景的核心解決方案。然而,如何在復(fù)雜電磁環(huán)境中實現(xiàn)高效休眠調(diào)度與動態(tài)信道優(yōu)化,成為提升網(wǎng)絡(luò)能效與可靠性的關(guān)鍵挑戰(zhàn)。本...

關(guān)鍵字: STM32 LoRa

在實時控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對時間敏感的應(yīng)用場景中,中斷響應(yīng)延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(DMA)...

關(guān)鍵字: STM32 DMA

數(shù)字電源技術(shù)向高功率密度、高效率與高動態(tài)響應(yīng)方向加速演進,STM32微控制器憑借其基于DSP庫的算法加速能力與對LLC諧振變換器的精準控制架構(gòu),成為優(yōu)化電源動態(tài)性能的核心平臺。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關(guān)鍵字: STM32 數(shù)字電源

STM32微控制器憑借其針對電機控制場景的深度優(yōu)化,成為高精度、高可靠性驅(qū)動系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機控制領(lǐng)域的核心優(yōu)勢集中體現(xiàn)在FOC(磁場定向控制)算法的硬件加速引擎與PWM死區(qū)時間的動態(tài)補...

關(guān)鍵字: STM32 電機控制

無線充電技術(shù)加速滲透消費電子與汽車電子領(lǐng)域,基于Qi協(xié)議的無線充電發(fā)射端開發(fā)成為智能設(shè)備能量補給的核心課題。傳統(tǒng)模擬控制方案存在響應(yīng)滯后、參數(shù)調(diào)整困難等問題,而基于STM32的數(shù)字PID控制結(jié)合FOD(Foreign O...

關(guān)鍵字: STM32 無線充電
關(guān)閉