×
单片机 > 单片机程序设计 > 详情

STM32F4学习笔记5——SysTick定时器

发布时间:2020-08-31 发布时间:
|

SysTick 定时器被捆绑在 NVIC 中,用于产生 SYSTICK 异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 
Cortex—M4处理器内部包含了一个简单的定时器,该定时器时钟源可以是内部时钟,或者外部时钟的,不过STCLK的具体来源由芯片设计者决定。SysTick定时器能产生中断,CM为他专门开出一个异常类型,并且在向量表中有他的一席之地,共有4个寄存器控制SysTick定时器: 
·SysTick控制及状态寄存器 0xE000_E010 
第0位RW定时器使能位 第1位RW异常请求位 第2位RW外部内部时钟选择位 第16位计数标志位 
·SysTick重装载数值寄存器 0xE000_E014 
第0-23RW位当计数到0时将被重装载的值 
·SysTick当前数值寄存器 0xE000_E018 
第0-23RWc位读取时返回当前倒数计时的值,写它则使寄存器清零同时清除状态标志位 
·SysTick校准数值寄存器 0xE000_E01C 
第0-23RW位在10ms间隔中倒计数的格数,芯片设计者应该通过输入信号提供该数值,若读回为0则表示无法使用校准功能 第30R位1表示校准值不是准确的10ms,0表示准确的10ms 第31R位1表示没有外部参考时钟,0表示外部参考时钟可用

注:其他保留位置必须保持清零

嘀嗒定时器的运行是基于处理器时钟的,如果因为低功耗模式,时钟信号停止了,那么嘀嗒定时器也会停止的,确保软件使用字对齐访问来访问SysTick 寄存器。系统复位以后重载寄存器和当前值是没有定义的,正确的初始化顺序如下: 
·Program reload value. 
·Clear current value. 
·Program Control and Status register.

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)实现时钟源的选择 
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) 

/* Reload value impossible */ 
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); 
SysTick->LOAD = ticks - 1; /* set reload register */ 
/* set Priority for Systick Interrupt */ 
NVIC_SetPriority (SysTick_IRQn, (1<<__nvic_prio_bits>/* Load the SysTick Counter Value */ 
SysTick->VAL = 0; 
/* Enable SysTick IRQ and SysTick Timer */ 
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | 
SysTick_CTRL_TICKINT_Msk | 
SysTick_CTRL_ENABLE_Msk; 
/* Function successful */ 
return (0); 

这个函数配置的滴答定时器,其中重要的是将滴答定时器优先级默认设置为15,STM32F4xx支持16级的中断嵌套,这里15表示滴答定时器中断无论中断如何设置分组其中断已经是最低等级


关键字:STM32F4  SysTick  定时器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法