国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

【STM32 LL庫(kù)編程】外部中斷與中斷管理

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

0x01 > 什么是中斷

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

中斷示意圖


中斷包括以下幾部分


  • 中斷源

  • 中斷申請(qǐng)

  • 開(kāi)放中斷

  • 保護(hù)現(xiàn)場(chǎng)

  • 中斷服務(wù)

  • 恢復(fù)現(xiàn)場(chǎng)

  • 中斷返回

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

  1. 外部中斷0

  2. 定時(shí)器0

  3. 外部中斷1

  4. 定時(shí)器1

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

0x02 > STM32  中斷基礎(chǔ)知識(shí)

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

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

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

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

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

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

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

/* 訪問(wèn)嵌套向量中斷控制器 (NVIC)的結(jié)構(gòu)類(lèi)型 */

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)先級(jí)寄存器(8Bit wide) */

        uint32_t RESERVED5[644U];

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

}  NVIC_Type;


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

中斷優(yōu)先級(jí)設(shè)定寄存器


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

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

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


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


優(yōu)先級(jí)組

上圖就是,優(yōu)先級(jí)分組寄存器和對(duì)應(yīng)的優(yōu)先級(jí)分組,下面來(lái)簡(jiǎn)單的總結(jié)一下優(yōu)先級(jí)分組怎么用。


優(yōu)先級(jí)分組

/* LL 庫(kù)中斷優(yōu)先級(jí)分組,選項(xiàng)和實(shí)現(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;


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

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

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

如果外設(shè)的主優(yōu)先級(jí)和子優(yōu)先級(jí)都相等,那么將會(huì)對(duì)硬件中斷編號(hào)進(jìn)行比較

硬件編號(hào)在哪?

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

0x03 > 總結(jié)

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


關(guān)鍵字:STM32  外部中斷  中斷管理 引用地址:【STM32 LL庫(kù)編程】外部中斷與中斷管理

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

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

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

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved