滴答定时器的使用

u8 SYSCLK为168,因为我们用到的AHB时钟是168M
void SysTick_init(u8 SYSCLK)
{
	u32 reload;
 	SysTick->CTRL |= 0x00000004;  //根据CTRL的第三位的是0的话AHB的8分频,1就是AHB的频率
	reload=SYSCLK;					   
	reload*=1000000/configTICK_RATE_HZ;	   //configTICK_RATE_HZ为20
    //根据delay_ostickspersec设定溢出时间 定时数为(168M / 20)*(1 / 168M)= 1 / 20 = 0.05s
    //reload为24位寄存器,最大值:16777216,在168M下,约合0.0998s左右	
 	SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;//开启SYSTICK中断
	SysTick->LOAD=reload; 					//每1/configTICK_RATE_HZ断一次	
	//reload寄存器最大值位24位存的最大值即为16777216,所以在168m的滴答定时器下面最大定时的时间都   
	//不会超过1s,但是在168M的8分频的情况下是可以的
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK     每隔50ms进入一次滴答定时器的中断
}	  


你可能感兴趣的:(滴答定时器)