1、中断方式
static __IO uint8_t _delayTimeOutFlag = 0;
/************************************************************************************
*函 数 名: void DELAY_ms(uint16_t _nms)
*函数描述: SysTick毫秒级(ms)延时函数
LOAD寄存器是24位的 最大值0xffffff
那么延时最大值计算公式为
nms<=0xffffff*8*1000/SYSCLK (SYSCLK单位Hz)
则nms的最大值为1864.135ms ,即1864毫秒
*输 入 值: uint16_t _nms: 延时时间(ms)
*返 回 值: void
*更新日期: 2019/10/11
************************************************************************************/
void Delay_Init(void)
{
SysTick_Config(SystemCoreClock/1000);// 1ms中断一次 SystemCoreClock=72MHz
}
/*************************************SysTick中断************************************/
void SysTick_Handler(void)
{
if(_1msDelayCount > 0)
{
if(--_1msDelayCount == 0)
{
_delayTimeOutFlag = 1;
}
}
}
/*************************************延时函数****************************************/
void DELAY_DelayMS(uint16_t _nms)
{
if(_nms == 0) return;
INT_DISABLE();
_1msDelayCount = _nms;
_delayTimeOutFlag = 0;
INT_ENABLE();
while(1)
{
if(_delayTimeOutFlag == 1) break;
}
}
2、非中断方式可以参考正点原子延时函数的源代码