Stm32f051 延时函数原理。 /******************延时函数:***************/ void Delay(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } Ntime等于多少,表示延时多少ms。 /******************系统滴答定时器***************/ void Systick_Init(void) { if (SysTick_Config(SystemCoreClock / 1000))//1毫秒 { /* Capture error */ while (1); } } 我们可以看到,假设系统时钟为48M,即systemcoreclock=48M,程序执行一个语句的机器周期是1/48000000,,如果不除1000的话,此时滴答定时器就为1S,同理,可以推出1ms是如何得出的。 /******************中断回调函数***************/ void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } 结合第一个delay函数为什么能ntime值为多少,则延时多少ms,是因为中断回调函数执行一次timingdelay的值,而进入一次中断的时间刚好是一次滴答定时器的时间,当ntime为1000时,则进入1000次中断,因为此时滴答定时器为1ms,则1000次刚好为1s,此时延时刚好为1s。 采用滴答定时器延时可以精确的延时,与51的for语句延时明显好很多。
|