SYsTick叫系统滴答时钟,外围设备,24位计数器
查看《Cortex M3与M4权威指南》PDF,有关于系统定时器的说明
M4可以使用函数
uint32_t SysTick_Config(uint32_t ticks);
如果一秒想触发一千次中断,则填 SystemCoreClock/1000 ,系统内核时间1s/1000,相当于一毫秒触发一次中断
中断服务函数
void SysTick_Handler(void)
{
/*实现逻辑代码,以下例子为led灯的闪烁*/
static uint32_t cut = 0;
cnt++;
//到达500毫秒时,翻转led引脚的电平
if(cnt == 500)
{
cnt = 0;
PFout(9) ^= 1; //位带操作,通过寄存器地址直接控制引脚
}
}
delay_ms()和delay_us()的编写
参考《Cortex M3与M4权威指南》P353有详细说明,当不想使用SysTick_Config(uint32_t ticks)函数时,可以直接对寄存器操作
delay_ms(uint32_t n)
{
SysTick->CTRL = 0; //关闭系统定时器
SysTick->LOAD = (168000000/1000)*n; //填写计数值,一毫秒乘以定时数
SysTick->VAL = 0; //清空当前的值和计数标志位
SysTick->CTRL = 5; //选择时钟启动,5为系统定时器
while(SysTick->CTRL & 0x00010000 == 0); //死循环,等待计数完毕
SysTick->CTRL = 0; //关闭定时器
}
以上代码是直接修改参考代码得到,但是硬件有最大定时时间限制
1000ms 最大定时时间
—————— = ————————
168000000Hz 2^24
最大定时时间 = 9