STM32在系统时钟为72M下的几个延时函数—V3.5库

//粗延时函数,微秒

  • 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);
转自:http://blog.sina.com.cn/s/blog_687bc39101016trt.html
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值