找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 4436|回复: 0
收起左侧

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

[复制链接]
ID:91350 发表于 2015-10-29 18:55 | 显示全部楼层 |阅读模式
//粗延时函数,微秒

  • void delay_nus(u16 time)
  • {   
  •    u16 i=0;
  •   while(time--)
  •    {
  •     i=10;  //自己定义
  •      while(i--) ;   
  •    }
  • }
//毫秒级的延时
  • void delay_nms(u16time)
  • {   
  •    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);


回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表