-
STM32
系统滴答定时器
(Systick)
彻底研究解读
stm32
系统滴答定时器
(Systick)
彻底研究解读
SysTick
起那些
TIM
定时器可以说简单多啦
~~~~~
哥的心情也好了不少,嘎
嘎!
!
arm
Cortex-M3
内核的处理器内部包含了一个
SysTick
定时器,它是一个
24
位的倒计数定时器,注意,是倒计数!当计到
0
时它就会从
LOAD
寄存器中自动重装载定时初值。只要不把
CTRL
寄存器中的
ENABLE
为清
0
,它就永不停息!遗憾的是,
Sy
sTick
定时器在《
STM32
参考手册》里一个屁都没放,只有在《
ARM
Cortex-M3
技术参考手册》和《
ARM
Cortex-M3
权威
指南》才找到相关寄存器的介绍。
一、
SysTick
的时钟来源
我先来看看
STM32
的时钟树
The RCC feeds the Cortex Sy stemTimer
(SysTick) external clock with the AHB
clock(HCLK) divided by SysTick can
work either with this clock or with the
Cortex clock(HCLK), configurable in
the Sy sTick Control and Status
Register
.
上面这段话的意思是,
SysTick
的时钟来源可以是
HCLK
的
8
分频或就是
HCLK
,
具体是哪种可通过配置
“
控制和状态寄存器(
CTRL
< br>)
”
来选择。
二、
SysTick
的寄存器简介
SysTick
的寄存器一共有
4
个。
另外还有一个校准值寄存器
CALIB
,暂时用不到,先不刁它!
三、
Sy
sTick
的库函数
1
、寄存器定义在哪里?答:在
core_cm3.h
中!
ty pedef struct
{
__IO uint32_t CTRL;
__IO uint32_t LOAD;
__IO
uint32_t V AL;
__I
uint32_t CALIB;
}
SysTick_Ty pe;
…
#define SysTick
((SysTick_Ty pe *) SysTick_BASE)
2
、函数在哪里?
< br>在
V3.3
的函数库中关于
Sy
sTick
的函数只有两个。一个是在
misc.C
文件中的
SysTick_CLKSourceConfig
函数,它是一个时钟源
配置函数;另一个是在
cor
e_cm3.h
文件中的
SysTick_Config
函数,它的输入参数只有一个,传给了重装值寄存器
LOAD
,另外
还将
VAL
寄存
器清
0
了,此外还将
CTRL
寄存器中的
[2:0]
三位都设为了
1
,分别是使用
HCLK
时钟,允许异常请求,开启计数
器。
在
misc.C
文件最后有下面一个函数
/**
*@
功能:
配置
SysTick
时钟源
*@
输入参数:
SysTick_CLKSource:
指定
SysTick
时钟源
.
*
该参数可以是以下其中一个值
:
* @ SysTick_CLKSource_HCLK_Div8: AHB
时钟
8
分频作为
Sy sTick
时钟源
* @
SysTick_CLKSource_HCLK: AHB
时钟作为
SysTick
时钟源
.
*/
void SysTick_CLKSourceConfig(uint32_t
Sy sTick_CLKSource)
{
/*
参数检查
*/
assert_param(IS_SYSTICK_CLK_SOURCE(Sy
sTi ck_CLKSource));
if(SysTick_CLKSource ==
SysTick_CLKSource_HCLK)
{
SysTick->CTRL |= SysTi
ck_CLKSource_HCLK;
}
-
-
-
-
-
-
-
-
-
上一篇:公务员考试行测言语理解易混词语辨析
下一篇:四季水果--日语