|
这节主要是使用Cortex-M0的系统滴答计时器写一个毫秒级延时函数。
static volatile unsigned int TimeTick = 0;
//初始化延迟函数
//SYSCLK:系统时钟
void delay_init(void)
{
SystemCoreClockUpdate();
}
void SysTick_Handler(void) //系统滴答中断服务函数
{
TimeTick++;
}
//延时nms
//nms:要延时的ms数
void delay_ms(unsigned int ms)
{
//SysTick->LOAD = 32*ms - 1;
SysTick->LOAD = SystemCoreClock/250000*ms - 1;
SysTick->VAL = 0;
SysTick->CTRL |= ((1<<1)|(1<<0)); //开定时器,开中断
while(!TimeTick);
TimeTick = 0;
SysTick->CTRL =0; //关定时器
}
用示波器验证一下延时准确度
delay_ms(1); 实际延时1.05ms
delay_ms(2); 实际延时1.95ms
delay_ms(5); 实际延时4.95ms
delay_ms(10); 实际延时9.75ms
delay_ms(20); 实际延时19.4ms
delay_ms(30); 实际延时29.2ms
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|