延时


向大家介绍个STM32 1ms的延时函数

斌尖卡( 楼主 ) 2012-12-9 21:26:55 只看该作者 2048 | 8 倒序浏览
void delay1ms(u16 time)
{
u16 i;
while(time--)
{
i=12000;//可以自己修改的;
while(i--);
}
}













STM32在系统时钟为72M下的几个延时函数—V3.5库 (2012-11-25 17:47:42)转载▼
//粗延时函数,微秒
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);

相关主题
相关文档
最新文档