SysTick可在休眠下执行减轻资源占用
标准库函数在<misc.h><core_cm3.h>中
void delay_init(unsigned char systemtick)//参数为系统时钟 MHz
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择系统时钟8分频
nus=systemtick/8;
nms=systemtick/8*1000;
}
void delay_us(unsigned int us)
{
unsigned int temp;
SysTick->LOAD = us*nus; //设置计数重装载值 因为LOAD为24位 所以 us<=1864135
SysTick->VAL = 0; //清空计数值
SysTick->CTRL = 0x01; //设置 清零计数标志位 选择外部时钟 计数完成无动作 使能SysTick
do
{
temp=SysTick->CTRL;
}while(temp&0x01 && !(temp&(1<<16))); //当控制位关闭或CTRL第十六位计数完成置一时 退出循环
SysTick->CTRL=0x00; //清空计数值
SysTick->VAL =0X00; //关闭
}
void delay_ms(unsigned int ms)
{
unsigned int temp;
SysTick->LOAD = ms*nms; //ms<=1864
SysTick->VAL = 0;
SysTick->CTRL = 0x01;
do
{
temp=SysTick->CTRL;
}while(temp&0x01 && !(temp&(1<<16)));
SysTick->CTRL=0x00;
SysTick->VAL =0X00;
}
图片 Cortex-M3权威指南