SysTick中斷屬于核內(nèi)外設(shè)中斷器,中斷號(hào)為-1。想要使用SysTick中斷,只需在SysTick查詢定時(shí)上進(jìn)行稍微的修改。需要添加開啟中斷,直接用中斷函數(shù)對(duì)計(jì)數(shù)標(biāo)志位進(jìn)行清零,不再使用查詢方式判斷計(jì)數(shù)是否結(jié)束去清零。中斷函數(shù)接口SysTick_Handler在匯編文件中已經(jīng)給出定義,直接到文件中查找即可。
本來NVIC提供了中斷使能的函數(shù),但是要求中斷號(hào)要大于0(Value cannot be negative.),所以就不能調(diào)用NVIC中斷使能函數(shù)了,直接在操作寄存器開啟中斷就可以了。
修改如下:
#include "delay.h"
#include "led.h"
void Systick_Delayus(u32 us)
{
SysTick- >CTRL = 0; //選擇時(shí)鐘源,8分頻
SysTick- >CTRL |= 1< 1; //開中斷
SysTick- >LOAD = 21*us - 1; //賦值裝載值
SysTick- >VAL = 0;
SysTick- >CTRL |= 1< 0; //使能計(jì)數(shù)器
}
void Systick_Delayms(u16 ms)
{
Systick_Delayus(ms * 1000);
}
void SysTick_Handler()
{
SysTick- >CTRL &=~ (1< 16); //清計(jì)數(shù)標(biāo)志位
LED_Toggle(DS0); //LED燈閃爍
}
中斷函數(shù)定義好后,直接初始化中斷時(shí)間,主函數(shù)中不需要對(duì)中斷進(jìn)行其他處理,這樣就能實(shí)現(xiàn)SysTick中斷讓LED燈閃爍了。
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main()
{
LED_Init(); //初始化LED燈
Systick_Delayms(500);
while(1)
{
}
}
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
108323 -
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121002 -
NVIC
+關(guān)注
關(guān)注
0文章
35 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
13978 -
Systick
+關(guān)注
關(guān)注
0文章
62瀏覽量
13131
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論