娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

【STM32 LL庫編程】外部中斷與中斷管理

發(fā)布者:CreativeMind最新更新時間:2025-01-02 來源: jianshu關鍵字:STM32  外部中斷  中斷管理 手機看文章 掃描二維碼
隨時隨地手機看文章

0x01 > 什么是中斷

         所謂中斷就是指CPU正處于工作狀態(tài)時,外部發(fā)生了某一事件(按鍵按下),請求CPU進行處理,于是 CPU暫時中斷當前的工作,轉(zhuǎn)而處理所發(fā)生的的事件,處理完畢在回到原來被中斷的地方繼續(xù)工作,這樣的過程被稱為中斷

中斷示意圖


中斷包括以下幾部分


  • 中斷源

  • 中斷申請

  • 開放中斷

  • 保護現(xiàn)場

  • 中斷服務

  • 恢復現(xiàn)場

  • 中斷返回

我們知道 傳統(tǒng)的51單片機一共有 5 個中斷源,它們分別為:

  1. 外部中斷0

  2. 定時器0

  3. 外部中斷1

  4. 定時器1

現(xiàn)在正在學習的 STM32 有多少中斷呢?

0x02 > STM32  中斷基礎知識

  • Cortex-m3支持256個中斷,其中包含了16個內(nèi)核中斷,240個外部中斷。

  • STM32 只有84個中斷,包括16個內(nèi)核中斷和68個可屏蔽中斷

  • STM32 上只有60個可屏蔽中斷,f107上才有68個中斷

  • 先占優(yōu)先級也就是搶占優(yōu)先級,概念等同于51單片機中的中斷。假設有兩中斷先后觸發(fā),已經(jīng)在執(zhí)行的中斷先占優(yōu)先級如果沒有后觸發(fā)的中斷 先占優(yōu)先級更高,就會先處理先占優(yōu)先級高的中斷。也就是說又有較高的先占優(yōu)先級的中斷可以打斷先占優(yōu)先級較低的中斷。這是實現(xiàn)中斷嵌套的基礎。

  • 次占優(yōu)先級,也就是響應優(yōu)先級,只在同一先占優(yōu)先級的中斷同時觸發(fā)時起作用,先占優(yōu)先級相同,則優(yōu)先執(zhí)行次占優(yōu)先級較高的中斷。次占優(yōu)先級不會造成中斷嵌套。 如果中斷的兩個優(yōu)先級都一致,則優(yōu)先執(zhí)行位于中斷向量表中位置較高的中斷。

?  0x001 >> 嵌套向量中斷控制器 (NVIC)

? ? STM32 的中斷既然有這么多,那么要怎么管理呢?
ST也給了我們一些解決方案就是 使用 嵌套中斷向量控制器 NVIC,NVIC屬于內(nèi)核級的寄存器,所以當我們需要查詢 NVIC 相關定義 應該到 core_cm3.h 中(這里講解的芯片是 STM32F103ZE 是基于 Coretex-M3)

/* 訪問嵌套向量中斷控制器 (NVIC)的結(jié)構類型 */

typedef struct

{

  __IOM uint32_t ISER[8U];               /* 中斷使能寄存器 */

        uint32_t RESERVED0[24U];

  __IOM uint32_t ICER[8U];               /* 中斷清除寄存器 */

        uint32_t RSERVED1[24U];

  __IOM uint32_t ISPR[8U];               /* 中斷懸起寄存器 */

        uint32_t RESERVED2[24U];

  __IOM uint32_t ICPR[8U];               /* 中斷清空懸起寄存器 */

        uint32_t RESERVED3[24U];

  __IOM uint32_t IABR[8U];               /* 中斷有效位寄存器 */

        uint32_t RESERVED4[56U];

  __IOM uint8_t  IP[240U];               /* 中斷優(yōu)先級寄存器(8Bit wide) */

        uint32_t RESERVED5[644U];

  __OM  uint32_t STIR;                   /* 軟件觸發(fā)中斷寄存器 */

}  NVIC_Type;


?  0x002 >> 中斷優(yōu)先級定義 ☆

中斷優(yōu)先級設定寄存器


coretex-M3 內(nèi)核的中斷定義寄存器的寬度是8位的,在上圖中,我們能看到ST在設計中斷的時候只使用了高4位 [7:4]

The processor  implements only bits[7:4] of each field, bits[3:0] read as zero and ignore writes.
處理器只實現(xiàn)每個字段的位[7:4],位[3:0]讀為零,忽略寫。

ST在上述分組中,ST還將中斷分成了主優(yōu)先級(搶占優(yōu)先級)和子優(yōu)先級(響應優(yōu)先級)。對應的寄存器


優(yōu)先級分組寄存器


優(yōu)先級組

上圖就是,優(yōu)先級分組寄存器和對應的優(yōu)先級分組,下面來簡單的總結(jié)一下優(yōu)先級分組怎么用。


優(yōu)先級分組

/* LL 庫中斷優(yōu)先級分組,選項和實現(xiàn) */


#define NVIC_PRIORITYGROUP_0         ((uint32_t)0x00000007) /*!< 0 bit  for pre-emption priority,

                                                                 4 bits for subpriority */

#define NVIC_PRIORITYGROUP_1         ((uint32_t)0x00000006) /*!< 1 bit  for pre-emption priority,

                                                                 3 bits for subpriority */

#define NVIC_PRIORITYGROUP_2         ((uint32_t)0x00000005) /*!< 2 bits for pre-emption priority,

                                                                 2 bits for subpriority */

#define NVIC_PRIORITYGROUP_3         ((uint32_t)0x00000004) /*!< 3 bits for pre-emption priority,

                                                                 1 bit  for subpriority */

#define NVIC_PRIORITYGROUP_4         ((uint32_t)0x00000003) /*!< 4 bits for pre-emption priority,

                                                                 0 bit  for subpriority */


/**

  brief   Set Priority Grouping

  details Sets the priority grouping field using the required unlock sequence.

           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

           Only values from 0..7 are used.

           In case of a conflict between priority grouping and available

           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

  param [in]      PriorityGroup  Priority grouping field.

 */

__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

{

  uint32_t reg_value;

  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */


  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

  reg_value  =  (reg_value                                   |

                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

                (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) );               /* Insert write key and priority group */

  SCB->AIRCR =  reg_value;


假設我們有兩個外設 外設A 和外設B 我們將 兩個外設的主優(yōu)先級都配置為 0,將外設 A 的子優(yōu)先級配置為 1,外設 B 的子優(yōu)先級配置為 2,。當它們的中斷請求同時到來時,內(nèi)核將如何執(zhí)行?

內(nèi)核將比較兩個外設的主優(yōu)先級,如果外設的主優(yōu)先級相等,就會對子優(yōu)先級進行比較,子優(yōu)先級越高,子優(yōu)先級的數(shù)字就越小。

令人頭痛的問題,如果外設的主優(yōu)先級、子優(yōu)先級都相同,怎么判斷?

如果外設的主優(yōu)先級和子優(yōu)先級都相等,那么將會對硬件中斷編號進行比較

硬件編號在哪?

硬件編號 位于 《STM32 中文參考手冊_V10》第九章 中斷和事件 第9.1.2小節(jié) 中斷和異常向量表

0x03 > 總結(jié)

以上就是 關于 STM32F103ZE 的外部中斷與中斷管理的理論部分。這篇文章可能會讓你感到晦澀難懂,或者有漏洞,那是在所難免的問題。


關鍵字:STM32  外部中斷  中斷管理 引用地址:【STM32 LL庫編程】外部中斷與中斷管理

上一篇:STM32代碼的啟動過程
下一篇:如何在 VScode 創(chuàng)建 stm32 項目?

推薦閱讀最新更新時間:2025-05-02 10:51

STM32外部中斷處理流程及注意事項
STM32的外部中斷是以組為單位,例如PA0、PB0、PC0、PD0、PE0、PF0、PG0共用外部中斷0,我們再使用時從中選擇一個座位外部中斷0即可,其他中斷類推。 外部中斷包括EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10,Pin0--Pin4有各自獨立的中斷, Pin5--Pin9共用一個中斷,Pin10--Pin15共用一個中斷。 中斷號 Pin腳 EXTI0 Pin0 EXTI1 Pin1 EXTI2 Pin2 EXTI3 Pin3 EXTI4 Pin4 EXTI9_5 Pin5--Pin9 EXTI15_10 Pin10--Pin15 外部中
[單片機]
STM32外部中斷中斷控制器
在外部中斷和中斷控制器中,我們首先闡述嵌套向量中斷控制器(NVIC),他和處理器核的接口緊緊相連。可以實現(xiàn)低延時的中斷處理和處理晚到的中斷。主要具有以下幾個特點: 1.60個可屏蔽中斷通道; 2.16個可編程的優(yōu)先等級; 3.低延時的異常和中斷處理; 4.電源管理控制; 5.系統(tǒng)控制寄存器的實現(xiàn)。 其中每一個STM32系列芯片都會有一個產(chǎn)品向量表,博友們可以在相關 產(chǎn)品說明書中查看具體的中斷問題。 接下來介紹中斷優(yōu)先級 在M3中有兩個優(yōu)先級的概念-搶占優(yōu)先級和響應優(yōu)先級。每一個中斷源都必須指定這兩種優(yōu)先級。這里的中斷搶占其實和89C51差不多,高中斷優(yōu)先級可以搶占正在進行中斷處理的低中斷優(yōu)先級,也就是我們所說的中斷嵌套。學習過51
[單片機]
STM32 外部中斷配置
1配置中斷 1、 分配中斷向量表: /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 2、 設置中斷優(yōu)先級: NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //設置中斷優(yōu)先級 3、 初始化外部中斷: /*允許EXTI4中斷 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; //中斷通道 NVIC_InitS
[單片機]
STM32筆記之外部中斷GPIO
b) 初始化函數(shù)定義: void EXTI_Configuration(void); //定義IO中斷初始化函數(shù) c) 初始化函數(shù)調(diào)用: EXTI_Configuration();//IO中斷初始化函數(shù)調(diào)用簡單應用: d) 初始化函數(shù): void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化結(jié)構定義 EXTI_ClearITPendingBit(EXTI_LINE_KEY_BUTTON);//清除中斷標志 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_P
[單片機]
STC15單片機利用外部中斷測頻率
中斷測頻率 先來看張圖 圖中標明 ITx=0 時 下降沿觸發(fā)中斷; ITx=1 時 上升沿,下降沿均可觸發(fā)中斷,這里要注意不是隨便一個IO口有上升沿或下降沿時都觸發(fā)中斷,比如我的INT0 對應的端口是P32 ,所以 只有P32端口有上升沿、下降沿時才會觸發(fā)外部中斷0。 #include stc15f2k60s2.h #include intrins.h typedef unsigned char uchar; typedef unsigned int uint; uchar code smg ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; i
[單片機]
STC15單片機利用<font color='red'>外部中斷</font>測頻率
STM32F072RB 實作筆記(五)- 計時器加上中斷EXTI_IRQHandler(一)
中斷技巧增加平行處理的能力 寫單晶片程式有意思的地方除了那種“掌控”的感覺外,接著就是有那種“處理復雜事件的能力”! 基本的程式是循序進行,時間就會被耽擱。若是想要把程式并行處理,那么,“中斷”插入的方法是個好幫手,這個時候就要能同時處理不同的事件。我常常比喻電腦程式就像廚房;火爐是CPU,餐盤容器是暫存器,食材就是資料;這個做菜的程序容易理解,只是這時間不容易拿捏,所以,單晶片的內(nèi)部計時器就是一個好幫手。 這個M0 的計時器和中斷的寫法,比51族的mpu方便多了。 在M0 的C 語言里,使用中斷功能要寫下幾個功能: 設定中斷來源和 開啟中斷程式的向量指標 編寫中斷后要執(zhí)行的服務程式 a.是否接受巢式中斷 b.主程式轉(zhuǎn)移進來
[單片機]
STM32F072RB 實作筆記(五)- 計時器加上<font color='red'>中斷</font><font color='red'>EXTI</font>_IRQHandler(一)
STM8外部中斷不響應
在編寫STML152K4的一個簡單的按鍵輸入中斷時被迷惑了半天,做一個總結(jié)幫助后人填坑。 BUG坑現(xiàn)象 void key_init(void) { GPIO_Init(POWER_KEY, GPIO_Mode_In_FL_IT); EXTI_DeInit(); EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Falling);//下降沿觸發(fā) } 上面是一個按鍵外部中斷初始化的代碼,看似沒什么問題。但是調(diào)試時候問題出現(xiàn)了,稍微碰一下按鍵中斷在中斷函數(shù)里不斷進行觸發(fā),即使請了外部中斷標志位 還是不停觸發(fā)。通過調(diào)試發(fā)現(xiàn)需要在按鍵初始化前先關閉總中斷 然后在開
[單片機]
STM8<font color='red'>外部中斷</font>不響應
8051外部中斷1解析
程序?qū)崿F(xiàn)的功能: 在實驗板上左下方有一個黑色的獨立按鍵(K4), 當我們按下它時, D1(LED燈)的狀態(tài)就會取反. (外部中斷1和外部中斷0在處理上類似, 紅色的部分為不同之處) 中斷處理程序標號: 外部中斷0 ----------- 0 定時器0中斷 ----------- 1 外部中斷1 ----------- 2 定時器1中斷 ----------- 3 串口中斷 ----------- 4 獨立按鍵電路原理圖(K4對應P33): 程序源代碼: #include STC89C5xRC.H void delay()//獲得1ms延時
[單片機]
8051<font color='red'>外部中斷</font>1解析
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 盘山县| 铁岭市| 广昌县| 洞头县| 丹江口市| 大宁县| 全椒县| 乌鲁木齐县| 镇赉县| 曲水县| 江山市| 胶南市| 安塞县| 来安县| 克什克腾旗| 天峨县| 北流市| 南康市| 汉川市| 增城市| 花莲市| 开远市| 静海县| 辽宁省| 肇州县| 平昌县| 景泰县| 临高县| 酒泉市| 江城| 基隆市| 金秀| 大化| 璧山县| 萨嘎县| 绵竹市| 郸城县| 大渡口区| 永城市| 洛阳市| 临城县|