首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

延时初始化及微秒级别延时函数

延时初始化及微秒级别延时函数

#include "delay.h"
#include "sys.h“
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数

void delay_init()

{
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//外部 HCLK/8
    fac_us=SystemCoreClock/8000000;
//为系统时钟的1/8
    fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数
};      




void delay_us(u32 nus)
{

      u32 temp;
   

      SysTick->LOAD=nus*fac_us; //时间加载
  

      SysTick->VAL=0x00;        //清空计数器
      SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数

       do
        {

temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器  
       SysTick->VAL =0X00;       //清空计数器

}
继承事业,薪火相传
返回列表