delay头文件分为三个函数
static u8 fac_us=0;//us延时倍数
static u16 fac_ms=0;//ms延时倍数
delay_init(void);
delay_ms(u16 nms);
delay_us(u32 nus);
delay_init(void)函数
//没看懂在干嘛
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
//SystemCoreClock 定义在芯片文件中 SYSCLK_FREQ_72MHz 72000000
//定义了系统时钟的频率常量 72MHz
//系统时钟通常与微控制器的主时钟源(如晶振或PLL输出)相关
//和现实的1us没什么关系,这里只是定义 1us是当前这个系统时钟的1/8
fac_us=SystemCoreClock/8000000;//8Mhz
// 1000us=1ms
fac_ms=(u16)fac_us*1000;
delay_us(u32 nus)函数;
//nus表示我们想要的演示 us数
void delay_us(u32 nus)
{
u32 temp;
//这个寄存器用于设置定时器的重载值,即 SysTick 定时器计数到达这个值时会重新加载并重新开始计数
SysTick->LOAD=nus*fac_us;
//你可以读取它来查看当前定时器的计数值,表示从0开始计时
SysTick->VAL=0x00;
//时钟使能,表示开始计时
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
//计时完成后,SysTick->CTRL寄存器的标志为改变
//具体就是 检查(temp&0x01) 和 !(temp&(1<<16) 这个标志为,如果满足就表示计时结束
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
//关闭计时使能位,关闭计时时钟
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
标签:函数,temp,--,nus,us,delay,SysTick,fac
From: https://www.cnblogs.com/blogofzcfu/p/18634153