您的位置:首页 > 健康 > 养生 > 打造品牌建设_中国建筑集团有限公司是国企吗_北京网络优化_专业seo排名优化费用

打造品牌建设_中国建筑集团有限公司是国企吗_北京网络优化_专业seo排名优化费用

2024/12/23 16:07:17 来源:https://blog.csdn.net/weixin_42332349/article/details/144549334  浏览:    关键词:打造品牌建设_中国建筑集团有限公司是国企吗_北京网络优化_专业seo排名优化费用
打造品牌建设_中国建筑集团有限公司是国企吗_北京网络优化_专业seo排名优化费用

这里写自定义目录标题


delay.h文件

#ifndef __DELAY_H
#define __DELAY_H#include "stm32f10x.h"//#define configTICK_RATE_HZ 1000		//时钟节拍频率,这里设置为1000,周期就是1ms//void SysTick_Init(void);
void delay_init(void);
void delay_ms(u16 nms);
void delay_us(u32 nus);#endif

delay.c文件

static u8  fac_us=0;                            //us延时倍乘数               
static u16 fac_ms=0;                            //ms延时倍乘数  //初始化延迟函数
//SYSTICK的时钟固定为HCLK时钟的1/8,即SYSTICK=SYSCLK/8
//SYSCLK:系统时钟
void delay_init()
{SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);    //选择外部时钟  HCLK/8fac_us=SystemCoreClock/8000000;                          //SYSTICK时钟为9M(即8分频)时,fac_us=9,即SysTick倒数9个数,耗时1usfac_ms=(u16)fac_us*1000;                                 //非OS下,代表每个ms需要的systick时钟数   
}    //查询SysTick->CTRL寄存器bit0是否为1,当为1时,说明倒计时时间到;
//整个延时方法中,不进入SysTick中断;
//延时nus
//nus为要延时的us数.                                               
void delay_us(u32 nus)
{        u32 temp;             SysTick->LOAD=nus*fac_us;                       //延时时间加载               SysTick->VAL=0x00;                              //清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //开始倒数      //do while 判断就是 systick 使能(bit0)位为 1 且(bit16)为1的时候等待结束do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));           //等待时间到达SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //关闭计数器SysTick->VAL =0X00;                             //清空计数器     
}//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
void delay_ms(u16 nms)
{                     u32 temp;           SysTick->LOAD=(u32)nms*fac_ms;                //时间加载(SysTick->LOAD为24bit)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;                           //清空计数器              
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com