STM32F1筆記(四)NVIC中斷優先順序管理

2021-08-25 13:55:57 字數 2286 閱讀 9639

stm32將中斷分為5個組,組0~4。配置**如下:

nvic_prioritygroupconfig(nvic_prioritygroup_2);
在標準庫里,分組的定義如下: 

/** @defgroup preemption_priority_group 

* @{

*/#define nvic_prioritygroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority

4 bits for subpriority */

#define nvic_prioritygroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority

3 bits for subpriority */

#define nvic_prioritygroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority

2 bits for subpriority */

#define nvic_prioritygroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority

1 bits for subpriority */

#define nvic_prioritygroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority

0 bits for subpriority */

翻譯過來就是:

分組0為0位搶占優先順序,4位響應優先順序;

分組1為1位搶占優先順序,3位響應優先順序;

分組2為2位搶占優先順序,2位響應優先順序;

分組3為3位搶占優先順序,1位響應優先順序;

分組4為4位搶占優先順序,0位響應優先順序;

假設使用分組3,可以使用的搶占優先順序為2^3=8,即0~7,**可配置如下:

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 1;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 2;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 3;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 4;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 5;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 6;

//nvic_initstructure.nvic_irqchannelpreemptionpriority = 7;

可以使用的響應優先順序為2^1=2,即0~1,**可配置如下:

nvic_initstructure.nvic_irqchannelsubpriority = 0;

//nvic_initstructure.nvic_irqchannelsubpriority = 1;

優先順序邏輯:

1、搶占優先順序的級別高於響應優先順序。即搶占優先順序高的中斷可以打斷正在執行的優先順序低的中斷。

2、數值越小所代表的優先順序就越高,即0為最高優先順序。

3、當搶占優先順序相同時,響應優先順序高的不可以打斷優先順序低的。

4、如果兩個中斷的搶占優先順序和響應優先順序都一樣,哪個中斷先發生就先執行。

nvic配置示例:

nvic_initstructure.nvic_irqchannel = usart1_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

nvic_initstructure.nvic_irqchannelsubpriority = 1;

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

STM32f1學習筆記 GPIO

參考文章 stm32自學筆記 stm32可以提供很多gpio,一般分別在5個埠 port gpioa gpioe 每個埠有16個gpio,最大耐壓值為5v。每個埠有32為寬頻的設定暫存器,一共64位,每個gpio占用4位配置位。其中兩位設定gpio的方向,另外兩位設定gpio的工作模式。1 gpio...

STM32f1學習筆記 USART

typedef struct usart inittypedef usart stopbits usart stopbits引數 描述usart stopbits 1 在幀尾傳輸1個停止位 usart stopbits 0.5 在幀尾傳輸0.5個停止位 usart stopbits 2 在幀尾傳輸2...

STM32F1筆記(九)通用定時器

stm32f1的定時器分為time1 8等高階定時器,time2 5等通用定時器,time6 7基本定時器。三者的區別主要參考 stm32中文參考手冊 裡特性的每種定時器主要特性的異同。先看中文手冊中通用定時器的簡介 通用定時器的暫存器有乙個比較有趣的地方。該暫存器在物理上實際對應著2個暫存器。乙個...