1. 程式人生 > 其它 >STM32 中斷應用(NVIC簡介)

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 中我們預先為每個中斷都寫了一箇中斷服務函式,只是這些中斷函式都是為空,為的只是初始化中斷向量表。

實際的中斷服務函式都需要我們重新編寫,為了方便管理我們把中斷服務函式統一寫在 stm32f10x_it.c 這個庫檔案中。

關於中斷服務函式的函式名必須跟啟動檔案裡面預先設定的一樣,如果寫錯,系統就在中斷向量表中找不到中斷服務函式的入口,直接跳轉到啟動檔案裡面預先寫好的空函式,並且在裡面無限迴圈,實現不了中斷。