NVIC中斷管理---STM32

NVIC:嵌套向量中斷控制器
在了解中斷之前,我們先了解搶占優先級和響應優先級

搶占優先級和響應優先級

  • 搶占優先級決定能不能打斷,高優先級的搶占可以中斷低優先級的搶占
  • 響應優先級在搶占優先級相同時,高響應優先級先執行,響應優先級不能打斷

注:數字越小,搶占和響應的優先級越大

比如說設置中斷優先級組為2,然后設置中斷3的搶占優先級為2,響應優先級為1,中斷6的搶占優先級為3,響應優先級為0,中斷7的搶占優先級為2,響應優先級為0,這三個中斷的優先級順序是:中斷7>中斷3>中斷6

中斷優先級分組

中斷優先級分組可以分成0~4組,每個組可以分成16種情況,因為一共有4位來設置搶占和響應優先級
在這里插入圖片描述
中斷優先級分組在代碼執行過程中,盡量只設置一次,不然會導致中斷管理混亂,因為對于不同的分組,搶占和響應的優先級個數都是不同的。

中斷優先級設置步驟

  1. 設置中斷優先級分組
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)
  1. 針對每個中斷,設置對應的搶占優先級和響應優先級
    使用的函數是:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

NVIC_InitTypeDef是一個結構體:

typedef struct
{uint8_t NVIC_IRQChannel; //設置中斷通道uint8_t NVIC_IRQChannelPreemptionPriority;//設置搶占優先級uint8_t NVIC_IRQChannelSubPriority; //設置響應優先級FunctionalState NVIC_IRQChannelCmd; //使能
} NVIC_InitTypeDef;

設置一個中斷

NVIC_InitTypeDef   NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;// 搶占優先級為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// 子優先級位2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);	//根據上面指定的參數初始化NVIC寄存器

設置兩個中斷:

  	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			//使能按鍵WK_UP所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//搶占優先級2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//子優先級3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中斷通道NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;			//使能按鍵KEY2所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//搶占優先級2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;					//子優先級2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中斷通道NVIC_Init(&NVIC_InitStructure);

總結

當我們需要中斷的時候,我們首先要設置中斷優先級分組,然后對每個中斷進行設置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java BigDecimal stripTrailingZeros()方法與示例

BigDecimal類stripTrailingZeros()方法 (BigDecimal Class stripTrailingZeros() method) stripTrailingZeros() method is available in java.math package. stripTrailingZeros()方法在java.math包中可用。 stripTrailingZeros() method is used to get a BigDecimal that is…

外部中斷---STM32F1

外部中斷概述 STM32的中斷控制器支持19個外部中斷/事件請求: 線0-15:對應外部IO口的輸入中斷線16:連接到PVD輸出線17:連接到RTC鬧鐘事件線18:連接到USB喚醒事件 STM32每個IO口都有可以作為外部中斷輸入,…

轉:點9圖

關于”點九” 轉:http://mux.baidu.com/?p1506“點九”是andriod平臺的應用軟件開發里的一種特殊的圖片形式,文件擴展名為:.9.png 智能手機中有自動橫屏的功能,同一幅界面會在隨著手機(或平板電腦)中的方向傳感器的參數不同而改變顯示的方向…

Python HTMLCalendar類| 帶實例的formatyear()方法

Python HTMLCalendar.formatyear()方法 (Python HTMLCalendar.formatyear() Method) formatyear() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns an HTML table consisting of th…

2009中國企業家新春聯誼會

2009中國企業家新春聯誼會——把握當前機遇,笑對經濟危機,暢飲將帥美酒尊敬的嘉賓:當前,國際形勢正在發生深刻而復雜的變化,由美國次貸危機引發的全球經濟危機已經愈演愈烈,美國前五大投資銀行有3家宣告破產…

串口通信的基本原理----STM32

串口通信基本原理 1. 處理器與外部設置通信的基本方式 并行通信:數據各個位同時傳輸串行通信:數據按位順序傳輸 在串行通信中,按照數據的傳輸方向,又分為: 單工:數據傳輸只支持在一個方向傳輸半雙工&am…

java獲取vm運行參數_如何獲取在Java中運行Java VM的版本?

java獲取vm運行參數To get the version of running VM (Virtual Machine) in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the version of running Java VM. 要獲取Java…

Spring MVC+Ant+Tomcat+Eclipse最簡單的demo

第一步是Java的Web環境搭建,下載Eclipse(或者更好的但收費的IDE-IntelliJ Idea,和Resharper一家公司出的),下載Tomcat,下載JDK,下載Spring,注意安裝Tomcat的時候配置一下管理員賬號和…

MySQL的環境變量配置詳細步驟

1.下載MySQL 例如下載:mysql-installer-community-5.5.60.1 我以這個版本為例 2.右擊->我的電腦->屬性 3. 4.找到在 系統變量 中找到 Path 5.找MySql的bin目錄(每個人的電腦上這個文件的位置應該是差不多的,找到之后復制下來&#x…

轉帖:強命名程序集(Strong Name Assembly)的概念

強命名程序集(Strong Name Assembly)的概念因為不同的公司可能會開發出有相同名字的程序集來,如果這些程序集都被復制到同一 個相同的目錄下,最后一個安裝的程序集將會代替前面的程序集。這就是著名的Windows “DLL Hell”出現的原…

串口發送通信---UART發送---STM32F4實現

串口發送程序配置過程(HAL庫) 初始化串口相關參數,使能串口 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)該函數的參數是串口的基址,在stm32f429xx.h文件中,定義了8個UART_HandleTypeDef的值&#x…

開源軟件 許可證密鑰_自由和開源軟件-1中的重要許可證

開源軟件 許可證密鑰Its important to take note that there are no good or bad licenses and that no license is superior to another. Anybody can make an open-source license that suits their extravagant, which is the explanation that there are such huge numbers…

串口接收中斷配置過程---STM32F4--HAL

串口接收中斷程序配置過程(HAL) 初始化相關參數,使能串口: HAL_UART_Init();該函數的參數是串口的基址,在stm32f429xx.h文件中,定義了8個UART_HandleTypeDef的值,分別是USART1、USART2、USART…

electron 切換至esm

前言 好消息,經過不知道多少年的討論。 electron28.0.0開始(23.08.31),默認支持esm了。 see https://github.com/electron/electron/issues/21457 使用方法 升級至electron^28.0.0簡單地在package.json中添加"type":…

javascript運算符_JavaScript中!=或!==運算符之間的區別

javascript運算符We can perceive the differences between these two operators as the same difference that occurs between double equalsTo () and triple equalsTo () operators. We already know that the (!) not-operator used along with () operator is used to che…

實訓09.09:簡單的彩票系統(機選多注)

package wsq; import java.util.Random; import java.util.Scanner;//機選多注 public class MoreCaiPiao {public static void main(String[] args) {// 定義二維數組 存儲多注彩票int[][] numArray new int[5][7];/** 二維數組中 未賦值之前的元素值都為0 { {0,0,0,0,0,0,0}…

項目組的激勵策略

我們經常會采取一獎勵措施,來激發大家工作的積極性,從而達到提高工作效率的目的。那么我們應該對項目組中的那些類型的人實施激勵呢?項目的實踐過程中,筆者認為有兩類人需要給予正面的獎勵。一,能夠主動思考&#xff0…

zk中的Datebox中得到Timestamp

String formatDate sdf.format(datebox.getValue()); para.setCreate_time(Timestamp.valueOf(formatDate)); 轉載于:https://www.cnblogs.com/avenxia/archive/2012/04/15/2450052.html

定時器--STM32f4--HAL

基本概念 STM32中有三種定時器,高級定時器,通用定時器,基本定時器,具體如下圖: 發生如下事件將產生中斷/DMA 更新:計數器向上溢出/向下溢出,計數器初始化觸發事件:計數器啟動、停…

實訓09.09:簡單的彩票系統(自選多注)

package wsq; import java.util.Scanner; public class CustomCaipiao {public static void main(String[] args) {/** 用戶自選彩票數字: 1.使用scanner來輸入彩票號碼! 2.直接寫成自選多注,注數由用戶輸入決定;* 3.紅球值1-33,不重復;藍球值1-16;*/// 定義二維數組 存儲所有的…