一、延时函数初始化
//配置systick的时钟
void Delay_Init(void)
{
systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);
count_1us = (float)(SystemCoreClock / 8 / 1000 / 1000);
}
二、us延时
void Delay_Us(uint32_t us)
{
uint32_t ctl;
SysTick ->LOAD = (uint32_t)(us * count_1us);
SysTick ->VAL = 0x0000U;
SysTick ->CTRL |= SysTick_CTRL_ENABLE_Msk;
do{
ctl = SysTick ->CTRL;
}while((ctl & SysTick_CTRL_ENABLE_Msk) && !(ctl & SysTick_CTRL_COUNTFLAG_Msk));
//停止
SysTick ->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick ->VAL = 0x0000U;
}
三、ms延时
void Delay_Ms(uint32_t ms)
{
while(ms--)
{
Delay_Us(1000);
}
}