日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32中断优先级快速入门

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32中断优先级快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.基本概念

STM32(Cortex-M3架構)中有兩個優先級的概念——搶占式優先級和響應優先級.有人把響應優先級稱作'亞優先級'或'副優先級',每個中斷源都需要被指定這兩種優先級。?


具有高搶占式優先級的中斷可以在具有低搶占式優先級的中斷處理過程中被響應,即中斷嵌套。


當兩個中斷源的搶占式優先級相同時,這兩個中斷將沒有嵌套關系,
當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先級高低來決定先處理哪一個;如果他們的搶占式優先級和響應優先級都相等,則根據他們在中斷表中的排位順序決定先處理哪一個。


2.優先級分組?
既然每個中斷源都需要被指定這兩種優先級,就需要有相應的寄存器位記錄每個中斷的優先級;STM32用4個比特來指定這兩種優先級。但是怎么分配,取決于組的選擇。

第0組:所有4位用于指定響應優先級?
第1組:最高1位用于指定搶占式優先級,最低3位用于指定響應優先級?
第2組:最高2位用于指定搶占式優先級,最低2位用于指定響應優先級?
第3組:最高3位用于指定搶占式優先級,最低1位用于指定響應優先級?
第4組:所有4位用于指定搶占式優先級 ?


3.中斷源的優先級配置

假設已經分組了,比如第三組,那么搶占優先級就是(000-111,8個級別,000最高,111最低),響應優先級就是(0-1,2個級別)。

對于每個中斷源,都應該配置為以上級別中的一個(8選一加上2選一)


4.代碼舉例

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

這個是選擇分組的函數,函數的參數是定義好的宏:

#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority4 bits for subpriority */ #define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority3 bits for subpriority */ #define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority2 bits for subpriority */ #define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority1 bits for subpriority */ #define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority0 bits for subpriority */ 要注意的是 ,在系統復位初始化之后,默認使用的是第0組優先級分組,也就是說,中斷不可嵌套(復位,NMI 和硬 fault除外,他們可以搶占其他中斷)

<span style="font-size:18px;">void AMIC_NVIC_Initial(void) {NVIC_InitTypeDef NVIC_InitStructure;/* Enable and set GDO1 EXTI Interrupt to the lowest priority */NVIC_InitStructure.NVIC_IRQChannel = AMIC_GIO1_EXTI_IRQn;<span style="color:#ff6666;">NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;</span>NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); } </span> 以上兩行用于指定搶占優先級和響應優先級。

本文只是粗略的介紹了stm32中的中斷優先級配置,很多問題并沒有深入。歡迎博友補充和深挖。

總結

以上是生活随笔為你收集整理的stm32中断优先级快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。