基于正点原子mini开发板、STM32RCT6、库函数
一、Systick定时器介绍
ARM Cortex-M3 内核的处理器内部包含了一个简单的SysTick 定时器,它是一个24 位的倒计数定时器。
SysTick:系统定时器,24位到计数定时器,只能递减,存在于内核,嵌套在NVIC(中断向量控制器)中,所有的Cortex-M内核的单片机都具有这个定时器。
⚫ 当计到 0 时它就会从RELOAD 寄存器中自动重装载定时初值。只要不把CTRL 寄存器中的 ENABLE 为清 0,它就永不停息,即使在睡眠模式下也能工作。
⚫ SysTick定时器能产生中断
⚫ Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个复杂的定时器去实现简单的功能,比如在UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS的心跳时钟。
二、Systick相关寄存器
4个Systick寄存器:
CTRL SysTick 控制和状态寄存器
LOAD SysTick 自动重装载除值寄存器
VAL SysTick 当前值寄存器
CALIB SysTick 校准值寄存器
1.SysTick 控制和状态寄存器- CTRL
对于STM32,外部时钟源是HCLK(AHB总线时钟)的1/8;内核时钟是HCLK时钟。配置函数:
SysTick_CLKSourceConfig();
2.SysTick 重装载数值寄存器- LOAD
3.SysTick 当前值寄存器- VAL
三、Systick相关库函数
1.SysTick_Config(uint32_t ticks)
SysTick_Config(uint32_t ticks) //初始化systick,时钟为HCLK,并开启中断
//core_cm3.h文件中
主要的作用:
1)、初始化systick
2)、打开systick
3)、打开systick的中断并设置优先级
4)、返回一个0代表成功或1代表失败
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PR