stm32 設定systick中斷搶先式優先順序

2021-06-07 17:16:25 字數 2028 閱讀 6898

最近使用stm32時希望將systick的中斷優先順序降低,但是cmsis裡給出的例子都是類似

nvic_initstructure.nvic_irqchannel = tim1_up_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

nvic_initstructure.nvic_irqchannelsubpriority = 0;

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

還是沒有配置systick。

中斷分為核心中斷和晶元的中斷,配置的暫存器位置不同。晶元的中斷配置在nvic的ip內,核心的中斷配置在scb內。

可以直接呼叫core_cm3.h裡的函式

static __inline void nvic_setpriority(irqn_type irqn, uint32_t priority)

/* set priority for cortex-m3 system interrupts */

else /* set priority for device specific interrupts */

}

這個函式實現了兩類中斷優先順序的配置。

但是直觀上來看看不到搶先式優先順序與子優先順序。

首先,配置優先順序組,可以使用韌體庫的程式,也可以用core_cm3.h的函式。

void nvic_prioritygroupconfig(uint32_t nvic_prioritygroup)

static __inline void nvic_setprioritygrouping(uint32_t prioritygroup)

引數範圍為0~7,具體如下

隨後配置各個中斷的優先順序,對於外設的中斷可以使用韌體庫的程式,比較直觀。如最前面所給出的例子,但是根據其實現,是不能夠用來配置核心中斷的,例如

nvic_initstructure.nvic_irqchannel = systick_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

nvic_initstructure.nvic_irqchannelsubpriority = 0;

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

這是錯誤的,因為內部使用irqn定址,而systick_irqn為-1.

所以對於sysick使用core_cm3.h的函式

nvic_setpriority(systick_irqn, 4);
這時不能顯式的看出搶先式優先順序與子優先順序,寫入的優先順序需要根據優先順序組的配置來選擇。

nvic_setpriority(systick_irqn, n);

n=0x00~0x03 設定systick為搶占優先順序0

n=0x04~0x07 設定systick為搶占優先順序1

n=0x08~0x0b 設定systick為搶占優先順序2

n=0x0c~0x0f 設定systick為搶占優先順序3

nvic_setpriority函式指定中斷優先順序的暫存器位(stm32只用4位來表示優先順序)的資料,例如中斷優先順序組設定為了2,即高2位用於指定搶占式優先順序,低2位用於指定響應優先順序,0x00~0x03高2位為0,所以搶占優先順序為0;0x04~0x07高2位為1,所以搶占優先順序為1,以此類推。

stm32的Systick定時器

systick定時器簡介 systick定時器就是系統滴答定時器,乙個24 位的倒計數定時器,計到0 時,將從reload 暫存器中自動重裝載定時初值。只要不把它在systick 控制及狀態暫存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。systick定時器被 在nvic中,用於產生sy...

STM32學習筆記3 Systick

對於stm32中,有乙個經常用到,卻在資料手冊上很少資料的工具,那就是systick,這個工具是所有cortex m0核心的微控制器所共有的,他是乙個系統定時器,其存在的主要目的是為嵌入式作業系統提供100hz 即10ms 的定時節拍。當然,也可以做為其它的普通定時等其他用途。下面,我們就開始理解這...

STM32之SysTick定時器

systick 作業系統的心跳 systick是系統滴答定時器,可以說是作業系統的的 心跳 它被綁在nvic中,用於產生systick異常 異常號 15 一旦產生systick異常,就會產生滴答中斷,這個滴答中斷對作業系統尤其重要。例如 作業系統可以為多個任務分配不同數目的時間片,確保沒有乙個任務霸...