SysTick中斷屬于核內外設中斷器,中斷號為-1。想要使用SysTick中斷,只需在SysTick查詢定時上進行稍微的修改。需要添加開啟中斷,直接用中斷函數(shù)對計數(shù)標志位進行清零,不再使用查詢方式判斷計數(shù)是否結束去清零。中斷函數(shù)接口SysTick_Handler在匯編文件中已經(jīng)給出定義,直接到文件中查找即可。
本來NVIC提供了中斷使能的函數(shù),但是要求中斷號要大于0(Value cannot be negative.),所以就不能調用NVIC中斷使能函數(shù)了,直接在操作寄存器開啟中斷就可以了。
修改如下:
#include "delay.h"
#include "led.h"
void Systick_Delayus(u32 us)
{
SysTick- >CTRL = 0; //選擇時鐘源,8分頻
SysTick- >CTRL |= 1< 1; //開中斷
SysTick- >LOAD = 21*us - 1; //賦值裝載值
SysTick- >VAL = 0;
SysTick- >CTRL |= 1< 0; //使能計數(shù)器
}
void Systick_Delayms(u16 ms)
{
Systick_Delayus(ms * 1000);
}
void SysTick_Handler()
{
SysTick- >CTRL &=~ (1< 16); //清計數(shù)標志位
LED_Toggle(DS0); //LED燈閃爍
}
中斷函數(shù)定義好后,直接初始化中斷時間,主函數(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燈
+關注
關注
22文章
1592瀏覽量
107763 -
寄存器
+關注
關注
31文章
5300瀏覽量
119858 -
NVIC
+關注
關注
0文章
35瀏覽量
11667 -
串口中斷
+關注
關注
0文章
64瀏覽量
13848 -
Systick
+關注
關注
0文章
62瀏覽量
13031
發(fā)布評論請先 登錄
相關推薦
評論