//粗延时函数,微秒
void delay_nus(u16 time)
{
u16 i=0;
while(time--)
{
i=10; //自己定义
while(i--) ;
}
}
//毫秒级的延时
void delay_nms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000; //自己定义
while(i--) ;
}
}
运用SysTick来实现准确定时:
SysTick_Config(SystemCoreClock / 10) 函数的形参就是systick重装定时器的值。
systick计数频率为每秒72000000次,所以7200000次就是1/10秒,也就是100ms。
SysTick是1个24bit递减计数器,通过对SysTick控制与状态寄存器的设置,可选择HCLK时钟(72M)或HCLK的8分频作为SysTick的时钟源。//V3.5默认为HCLK时钟
SysTick的重装寄存器决定了定时器频率。
若SysTick的时钟源是72M, SystemFrequency = 72000000Hz
所以 SysTick_Config(SystemCoreClock / 1000); 就是1ms时基。
SysTick的初始化设置: void Init_SysTick(void) { if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5库中 SystemFrequency 被 SystemCoreClock 取代。 while(1); } 延时函数: __IO uint32_t TimingDelay; void delay_ms(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } 中断函数: extern __IO uint32_t TimingDelay; void SysTick_Handler(void) { if (TimingDelay != 0x00) { TimingDelay--; } } delay_ms(1000);
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』