目录
系统定时器(Systick)
SysTick定时器特性介绍
SysTick定时器的功能
SysTick定时器寄存器介绍
Systick定时器的使用
系统定时器(Systick)
SysTick定时器特性介绍
- 计数宽度:
24bit来存储数据,2^24=16,777,216
- 计数器的工作模式
向下递减
- 计数器的工作周期:
T=1/CLKSource,即1/72Mhz F(频率)=1/T(周期)
- SysTick系统定时器是属于 Cortex-M内核中的一个外设,内嵌在 NVIC 中。
- SysTick系统定时器含有一个计数宽度为24bit 的向下递减的自动重装载计数器,计数器每计数一次的时间为 1/CLKSource。一般我们设置CLKSource为系统时钟。以F103为例, CLKSource可以配置为72MHz。
- 当重装载数值寄存器的值递减到 0 的时候, SysTick系统定时器可以配置产生一次中断,以此循环往复。
- SysTick系统定时器是属于 Cortex-M内核的外设,所以一般基于 Cortex-M内核的单片机都具有这个系统定时器。这使得软件在 Cortex-M单片机中可以很容易的移植。
SysTick定时器的功能
- SysTick系统定时器可以用于操作系统,用于产生时基,维持操作系统的心跳。一般操作系统都需要一个时基,进行任务的调度、同步等功能实现。
- SysTick系统定时器最常用的功能,还是计数。比如用来进行微妙、毫秒延时,以此产生特定时序。
SysTick定时器寄存器介绍
工程讲解(基于CubeMX):
HAL库默认选择Systick作为系统时钟源(时基)
我们可以通过修改分频系数来设置Systick的时钟为9MHZ或者72MHZ
工程生成后,进入工程,CubeMX只是配置了系统时钟为72M
Systick定时器的使用
我们还需要自行配置systick的使用
(1)首先打开cortex.c文件,找到systick重装载寄存器配置函数
然后自定义板级支持包,定义一个毫秒级Systick延时函数
#include "./Systick/bsp_systick.h"
void systick_delay_ms(uint16_t ms)
{
uint32_t i;
//当前频率为1/72000000
HAL_SYSTICK_Config(72000);//1/72000000*72000=1/1000
for(i=0;i<ms;i++)
{
while( !((SysTick->CTRL) & (1<<16)) );
}
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}