帶你瞭解STM32中斷系統

4.3 中斷

中斷是指計算機運行過程中,出現某些意外情況需要計算機處理時,技能能自動暫停正在運行的程序並轉入處理新情況的程序,處理完畢後又返回原先被暫停的程序繼續運行的功能。

舉一個生活例子來說明:小明在廚房幹活,流程是燒水——洗菜——切菜——煮飯——煮湯。燒水需要10分鐘,當小明加完水點火後,需要等10分鐘才能燒完水。此時小明爲了提高效率,不應該白白地10分鐘,於是小明繼續洗菜。洗菜的過程中,水開了,燒水壺發出了聲音,小明停止手裏正在洗菜的工作,把燒水的火關了,防止燒乾,然後回來繼續洗菜。

這個過程中,小明在洗菜等同於計算機正在處理當前程序。水開了等同於中斷髮生了;小明停止洗菜,去把火關了,等同於計算機開始處理新程序。之後小明繼續回來洗菜等同於計算機返回原先被暫停的程序繼續運行。

通過這個例子,我們可以知道中斷有3個重要的因素:

(1)中斷源。引發中斷髮生的原因,例如水開了就是一箇中斷源。

(2)中斷處理函數。當中斷髮生時,我們必須爲計算機指定該中斷對應的處理函數,否則計算機不知道如何處理這個中斷。例如小明把火關了這個動作就是中斷處理函數。

3. 可返回。中斷處理完後必須返回到原先程序。

中斷是計算機系統的關鍵技術之一,可以有效提高計算機的效率,滿足實時性的要求。

4.3.1 STM32中斷向量表

STM32具有非常強大的中斷系統,將中斷分爲兩種類型:內核中斷和外部中斷,並將所有中斷編排起來,形成一個表,我們稱之爲中斷向量表。需要注意的是,STM32系列芯片有很多型號,每種型號的中斷向量表都不一樣,讀者需要根據自己的芯片型號去ST官網下載對應的芯片手冊查看。本書這裏只列出STM32F407系列芯片的中斷向量表。如圖4.29所示。

其中,-3 ~ 6 被標黑的這幾列屬於內核中斷。從7開始屬於外部中斷。

內核中斷是不能被打斷的,也不能設置優先級的,凌駕於外部中斷之上。常見的內核中斷有:復位(Reset)、不可屏蔽中斷(NMI)、硬中斷(HardFault)等

外部中斷是我們學習的重點,可配置優先級。優先級分爲兩種:搶佔優先級和響應優先級。

1. 搶佔優先級

搶佔優先級高的中斷能打斷搶佔優先級低的中斷,等優先級高的任務處理完後,再回來繼續處理之前低優先級的中斷任務。所有當存在多個搶佔優先級不同的任務時,可能會出現

2. 響應優先級

響應優先級又被稱爲次優先級,若兩個任務的搶佔式優先級一樣,那麼響應優先級較高的任務則先執行,且在執行的同時不能被下一個響應優先級更高的任務打斷。

STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 個可屏蔽中斷通道,16 個可編程優先級(使用了 4 位中斷優先級)。

圖4.29 STM32F407中斷向量表

 

4.3.2 中斷控制器

由於STM32的中斷系統比較複雜,所以內核中有一個專門管理中斷的控制器:NVIC。

STM32標準庫提供了一套通過NVIC來控制中斷的API。我們首先來看NVIC_Init()函數,這套函數首先要定義並填充一個結構體:NVIC_InitTypeDef 該結構體的定義如下:

NVIC_IRQChannel :需要配置的中斷向量。

NVIC_IRQChannelCmd :使能或者關閉相應中斷向量的中斷響應。

NVIC_IRQChannelPreemptionPriority :配置相應中斷向量的搶佔優先級。

NVIC_IRQChannelSubPriority :配置相應中斷的響應優先級。

不過要注意一點的是,NVIC只可以配置16種中斷向量的優先級,其搶佔優先級和響應優先級都用一個4位的數字來決定。在庫函數中,將其分爲了5中不同的分配方式:

第0組:所有的4位都有來表示響應優先級,能夠配置16種不同的響應優先級。中斷優先級則都相同。

第1組:最高一位用來配置搶佔優先級,剩餘三位用來表示響應優先級。那麼就有兩種不同的搶佔優先級(0和1)和8種不同的響應優先級(0~7)。

第2組:高兩位用來配置搶佔優先級,低位用來配置響應優先級。那麼兩種優先級就各有4種。

第3組:高三位用來配置搶佔優先級,低位用來配置響應優先級。有8種搶佔優先級和2種相應優先級。

第4組:所有位都用來配置搶佔優先級,即有16種搶佔優先級,沒有響應屬性。

這5種不同的分配方式,根據項目的實際需求來配置。

配置的API如下:

NVIC_PriorityGroupConfig();

其中括號內可以輸入以下一個參數,代表不同的分配方式:

NVIC_PriorityGroup_0

NVIC_PriorityGroup_1

NVIC_PriorityGroup_2

NVIC_PriorityGroup_3

NVIC_PriorityGroup_4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章