微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > +systick定时器

+systick定时器

时间:10-02 整理:3721RD 点击:

   Cortex序列内核系统都提供1个24位SysTick定时器、可以作为普通的定时器使用,在有RTOS的系统,一般都用它来做TICK时钟。

SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常。

Systick 部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:

STK_CSR,        0xE000E010  --  控制寄存器
STK_LOAD,     0xE000E014  --  重载寄存器
STK_VAL,        0xE000E018  --  当前值寄存器
STK_CALRB,   0xE000E01C  --   校准值寄存器

1,STK_CSR寄存器


第0位:ENABLE,Systick 使能位 (0:关闭Systick功能;1:开启Systick功能)
第1位:TICKINT,Systick 中断使能位 (0:关闭Systick中断;1:开启Systick中断)
第2位:CLKSOURCE,Systick时钟源选择 (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)
第3位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零

2,STK_LOAD  重载寄存器:


Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD  重载寄存器是个24位的寄存器最大计数0xFFFFFF。

3,STK_VAL当前值寄存器:


也是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志。

4,STK_CALRB  校准值寄存器:


这个寄存器,一般不使用,如果需要深入的研究,可以去查阅资料。上述资料在网上查阅的,放在这里跟大家分享。

下面我使用它来做普通的定时器。初始化为1MS定时器中断。通过LED周期性变化来验证结果。

1,LED初始化参照前面章节。

2,SysTick初始化:


HAL_NVIC_SetPriority这个函数是修改中断优先级的,一般默认就可以。


这里就初始化了SysTick时钟,使能了中断。



这个是中断处理函数。

初始化完成,到验证的时候了。

通过HAL_GetTick()函数读取uwTick计数值,实现led闪烁。



编译下载,结果得到验证。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top