什么时定时器:有规律计数的定时器
定时器的配置:
系统滴答定时器延时功能:
选择时钟源
清空当前值寄存器
设置重装载值
使能定时器
等待计数完成
关闭定时器
系统滴答定时中断功能:
/*定时器配置*/
选择时钟源
清空当前值寄存器
设置重装载值
使能定时器
/*NVIC控制器配置*/
优先级分组
计算优先级编码分组值
设置中断源(不需要使能中断源通道 因为SysTick和NVIC都是在M4内核里所以不需要设置通道)
具体使用系统滴答定时器:
需求:(使用场景:一个定时可以多个事件的定时使用)
每301ms 切换LED1 状态
每522ms 切换LED2转态
每655ms 切换LED3转态
每900ms 切换LED4转态
主程序按键控制蜂鸣器开关
用不同元素号的数组保存计数变量的思想 设置1ms进一次中断
U32 systick_cnt[10];
中断服务函数
{
清除中断标志位
systick_cnt[1]++; //事件1时间++
systick_cnt[2]++;//事件2
systick_cnt[3]++;//事件3
systick_cnt[4]++;//事件4
If(systick_cnt[1] == 301)
{
systick_cnt[1]=0;
Led1灯翻转 //事件1处理
}
If(systick_cnt[2] == 301)
{
systick_cnt[2]=0;
Led2灯翻转 //事件2处理
}
If(systick_cnt[3] == 301)
{
systick_cnt[3]=0;
Led3灯翻转 //事件3处理
}
If(systick_cnt[4] == 301)
{
systick_cnt[4]=0;
Led4灯翻转 //事件4处理
}
}
这样就可以一个定时器同时处理多个事件
注意喽当我们做项目需要跑系统的时候必须使用系统滴答定时器,所以一般情况我们不会用系统滴答定时器做延时或者定时中断