STM32 中斷應用(NVIC簡介)
一、異常型別
F103 在核心水平上搭載了一個異常響應系統, 支援為數眾多的系統異常和外部中斷。其中系統異常有 8 個(如果把 Reset 和 HardFault 也算上的話就是 10 個),外部中斷有 60個。除了個別異常的優先順序被定死外,其它異常的優先順序都是可程式設計的。有關具體的系統異常和外部中斷可在標準庫檔案 stm32f10x.h 這個標頭檔案查詢到,在IRQn_Type 這個結構體裡面包含了 F103 系列全部的異常宣告。
二、NVIC 暫存器簡介
表17-5
NVIC 初始化結構體
NVIC_InitTypeDef 結構體在韌體庫標頭檔案 misc.h 中定義
1 typedef struct {
2 uint8_t NVIC_IRQChannel; // 中斷源
3 uint8_t NVIC_IRQChannelPreemptionPriority; // 搶佔優先順序
4 uint8_t NVIC_IRQChannelSubPriority; // 子優先順序
5 FunctionalState NVIC_IRQChannelCmd; // 中斷使能或者失能
6 } NVIC_InitTypeDef;
1)NVIC_IROChannel:用來設定中斷源,不同的中斷中斷源不一樣,且不可寫錯,即使寫錯了程式也不會報錯,只會導致不響應中斷。具體的成員配置可參考stm32f10x.h 標頭檔案裡面的 IRQn_Type 結構體定義,這個結構體包含了所有的中斷源
2)NVIC_IRQChannelPreemptionPriority:搶佔優先順序,具體的值要根據優先順序分組來確定,具體參考表格 17-5 優先順序分組真值表 。
3)NVIC_IRQChannelSubPriority:子優先順序,具體的值要根據優先順序分組來確定,具體參考表格 17-5 優先順序分組真值表 。
4)NVIC_IRQChannelCmd:中斷使能(ENABLE)或者失能(DISABLE)。操作的是 NVIC_ISER 和 NVIC_ICER 這兩個暫存器。
3、編寫中斷服務函式
在啟動檔案 startup_stm32f10x_hd.s 中我們預先為每個中斷都寫了一箇中斷服務函式,只是這些中斷函式都是為空,為的只是初始化中斷向量表。
關於中斷服務函式的函式名必須跟啟動檔案裡面預先設定的一樣,如果寫錯,系統就在中斷向量表中找不到中斷服務函式的入口,直接跳轉到啟動檔案裡面預先寫好的空函式,並且在裡面無限迴圈,實現不了中斷。