CM3内核的处理器,内部包含一个Systick定时器;
Systick是一个24位的倒计数定时器,当记到0时,将从RELOAD寄存器中自动重装载定时初值,只要不把它在Systick控制及状态寄存器中的使能位清除,就永不停息。
实现方式有两种:
1.中断方式:使用库函数,但有中断的存在,不利于在其他中断中调用延时函数。如下定义时间time_delay,Systick_Config()定义中断时间段,在中断中递减time_delay,从而实现延时。
volatile unsigned long time_delay; //延时时间 全局变量
void delay_ms(volatile unsigned long nms)
{
if(Systick_Config(SystemFrequency/1000)) //SYSTICK分频 1ms的中断
{
while(1);
}
time_delay=nms;
while(time_delay);
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL=0x00; //清空计数器
}
//延时 nus
void delay_us(volatile unsigned long nus)
{
if(Systick_Config(SystemFrequency/1000000)) //SYSTICK分频 1us的系统时钟中断
{
while(1);
}
time_delay=nus;//读取定时时间
while(time_delay);
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL=0x00; //清空计数器
}
SysTick_Handler(void)