SysTick
定时器和普通定时器
SysTick
定时器
SysTick
定时器被捆绑在
NVIC
中,用于产生
SYSTICK
异常(异常号:
15
)
。在
以前,
大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,
作为
整个系统的时基。
例如,
为多个任务许以不同数目的时间片,
确保没有一个任务
能霸占系统;
或者把每个定时器周期的某个时间范围赐予特定的任务等,
还有操
作系统提供的各种定时功能,
都与这个滴答定时器有关。
因此,
需要一个定时器
来产生周期性的中断,
而且最好还让用户程序不能随意访问它的寄存器,
以维持
操作系统“心跳”的节律。
Cortex
‐
M3
处理器内部包含了一个简单的定时器。因为所有的
CM3
芯片都
带有这个定时器,
软件在不同
CM3
器件间的移植工作得以化简。
该定时器的时
钟源可以是内部时钟
(
FCLK
,
CM3
上的自由运行时钟)
,
或者是外部时钟
(
CM3
处理器上的
STCLK
信号)
。
不过,
STCLK
的具体来源则由芯片设计者决定,
因此不
同产品之间的时钟频率可能会大不相同,
你需要检视芯片的器件手册来决定选择
什么作为时钟源。
SysTick
定时器能产生中断,
CM3
为它专门开出一个异常类
型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在
CM3
器
件间的移植变得简单多了,因为在所有
CM3
产品间对其处理都是相同的。
通用定时器
STM32
一共包含
8
个通用定时器,其中,
TIME1
和
TIME8-
高级定时器,
TIME2~TIME5
通用定时器,
TIME6
和
TIME7
高级定时器。在这里我使用定时器的
作用是用定时器产生定时中断,以定时器
3
来说明产生定时中断的步骤;
1
)
TIM3
时钟使能。
这
里
我
们
通
过
APB1ENR
的
第
1
位
来
设
置
TIM3
的
时
钟
,
因
为
Stm32_Clock_Init
函数里面把
APB1
的分频设置为
2
,所以我们的
TIM3
时钟就
是
APB1
时钟的
2
倍,等于系统时钟。
2
)设置
TIM3_ARR
和
TIM3_PSC
的值。
通过这两个寄存器,我们来设置自动重装的值,以及分频系数。这两个参数
加上时钟频率就决定了定时器的溢出时间。
3
)设置
TIM3_DIER
允许更新中断。
因为我们要使用
TIM3
的更新中断,所以设置
DIER
的
UIE
位,并使能触
发中断。
4
)允许
TIM3
工作。
光配置好定时器还不行,没有开启定时器,照样不能用。我们在配置完后要
开启定时器,
通过
TIM3_CR1
的
CEN
位来设置。
5
)
TIM3
中断分组设置。