STM32F103學習筆記-中斷與中斷的控制

一、中斷的定義及其種類

  中斷是指當 CPU 執行程序時,由於發生了某種隨機的事件(外部或內部),引起 CPU 暫時中斷正在運行的程序轉去執行一段特殊的服務程序(中斷服務子程序或中斷處理程序),以處理該事件,該事件處理完後又返回被中斷的程序繼續執行。其中,引發中斷的隨機事件被稱爲中斷源。中斷的示意圖如下:


中斷示意圖

  另外,還有一種特殊的中斷類型——中斷嵌套,其指有些中斷還能夠被其他高優先級的中斷所中斷,即類似於C語言中的if嵌套。

  對於Cortex-M3系列來說,其內核支持256箇中斷,其中包含了16個內核中斷和240個外部中斷。但事實上,STM32F103並沒有包含以上所有中斷,它只有60個可屏蔽中斷。這些中斷中,除了三個優先級極高的中斷爲系統固定外,大部分中斷優先級都可以由用戶編程確定。

  具體中斷類型、名稱、說明都可以在《STM32F10X中文參考手冊》-9 中斷和事件上查找到,這裏就不在贅述。

二、NVIC

  NVIC英文全稱是Nested Vectored Interrupt Controller,中文意思就是嵌套向量中斷控制器,它屬於M3內核的一個外設,控制着芯片的中斷相關功能。core_cm3.h內定義了NVIC結構體類型,內包括中斷使能、中斷清除、中斷優先級在內的多種寄存器。

三、中斷優先級

  中斷優先級表示的是不同的中斷在同時發生時,進行中斷的優先順序。STM32F103的中斷優先級寄存器包含4位,而優先級又可分爲搶佔式優先級指定響應優先級,這就代表了兩種優先級所佔的位數可以有5種情況,如下:

STM32F103中斷響應優先級分組

  其中,搶佔優先級的優先性大於指定響應優先級(下簡稱“響應優先級”)。下將分兩種情況討論:

  1. 當兩個中斷同時發生時,系統將會先處理搶佔優先級高的,若兩中斷搶佔優先級相同,則先處理響應優先級高的;
  2. 在A中斷程序運行時,B中斷啓動,則:若A的搶佔優先級大於或等於B,則B中斷程序暫不運行;若A的搶佔優先級小於B,則A中斷程序會停止運行,而B中斷程序開始運行。

  由以上討論,我們可以看出優先級的重要作用。那麼我們應該如何配置優先級分組呢?

四、中斷優先級分組的配置

  中斷優先級分組的配置可以大致分爲以下幾步:

  1. 按照需要確定搶佔優先級和響應優先級的相應位數
  2. 將NVIC中斷相關的庫文件misc.c和misc.h放置到工程中,以備調用
  3. 調用優先級分組配置庫函數NVIC_PriorityGroupConfig()實現配置

  從STM32固件庫使用手冊中,我們可以查詢到NVIC_PriorityGroupConfig()的相關信息,現摘錄如下:

NVIC_PriorityGroupConfig()的相關信息

  而函數的形參u32 NVIC_PriorityGroup實質上就是第三節所述的優先級分組的五種類型,詳情如下:

NVIC_PriorityGroup的值

五、中斷配置

  作爲偏重實用性的人,我對中斷的內部機理並沒有研究過於深入,而首先將目光放在了中斷的配置上面,我們可以大致歸納出中斷配置的幾個步驟:

  1. 使能外設某個中斷, 這個具體是由外設相關中斷使能位來控制
  2. 設置中斷優先級分組, 初始化 NVIC_InitTypeDef 結構體, 設置搶佔優先級和響應優先級, 使能中斷請求
  3. 編寫中斷服務函數

  該節所述的中斷配置過程只是一個配置的大體思路,中斷配置的相關操作將在日後的學習筆記中詳細闡述。

六、中斷的作用

  編者按:其實這段還是很難寫的,因爲作爲一個對STM32F103系列的初學者,對中斷的接觸和了解還不夠深入,而且由於對項目接觸不深,對中斷的使用也不是很清楚。所以這段會先寫一點自己對中斷應用的看法,後期隨着對STM32F103的瞭解加深,再改動本節。

  由現象看本質,由定義看作用。中斷作爲一個能切換程序運行的重要操作,有以下幾個作用:

  1. 及時終止損壞時鐘、硬件系統的程序運行。我們從參考手冊上可以看到,優先級爲固定的幾個中斷都有保護時鐘及硬件系統的終止作用。這說明中斷是單片機的一種自我保護機制的體現
  2. 作爲一種特殊的開關。我們可以看到,NVIC很重要的一個功能即是通過上升沿\下降沿來判斷中斷是否開啓,若開啓(且中斷不被屏蔽)則進行中斷程序。中斷因爲這種性質,故可以作爲一種特殊的開關。
  3. 定時器的控制。利用中斷可以構造一個定時器,當達到初始定時時間時,即開啓中斷完成中斷程序。

  總而言之,中斷是包括STM32在內的單片機系統裏非常重要的一種操作。

發佈了12 篇原創文章 · 獲贊 22 · 訪問量 3447
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章