SysTick—系统定时器
本章参考资料《ARM Cortex™-M4F 技术参考手册》 -4.5 章节 SysTick Timer(STK), 和
4.48 章节 SHPRx,其中 STK 这个章节有 SysTick 的简介和寄存器的详细描述。因为
SysTick 是属于 CM4 内核的外设,有关寄存器的定义和部分库函数都在 core_cm4.h 这个头
文件中实现。所以学习 SysTick 的时候可以参考这两个资料,一个是文档,一个是源码。
SysTick 简介
SysTick—系统定时器是属于 CM4 内核中的一个外设,内嵌在 NVIC 中。系统定时器
是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置
系统时钟 SYSCLK 等于 180M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就
产生一次中断,以此循环往复。
因为 SysTick 是属于 CM4 内核的外设,所以所有基于 CM4 内核的单片机都具有这个
系统定时器,使得软件在 CM4 单片机中可以很容易的移植。系统定时器一般用于操作系统,
用于产生时基,维持操作系统的心跳。
SysTick 属于内核的外设,有关的寄存器定义和库函数都在内核相关的库文件
core_cm4.h 中。
用固件库编程的时候我们只需要调用库函数 SysTick_Config()即可,形参 ticks 用来设
置重装载寄存器的值,最大不能超过重装载寄存器的值 224,当重装载寄存器的值递减到 0
的时候产生中断,然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。紧随
其后设置好中断优先级,最后配置系统定时器的时钟为 180M,使能定时器和定时器中断,
这样系统定时器就配置好了,一个库函数搞定。
SysTick_Config()库函数主要配置了 SysTick 中的三个寄存器: LOAD、 VAL 和 CTRL,
有关具体的部分看代码注释即可。其中还调用了固件库函数 NVIC_SetPriority()来配置系统
定时器的中断优先级,该库函数也在 core_m4.h 中定义,
原型如下:
1 __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
2 {
3 if ((int32_t)IRQn < 0) {
4 SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] =
5 (uint8_t)((priority << (8 - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
6 } else {
7 NVIC->IP[((uint32_t)(int32_t)IRQn)] =
8 (uint8_t)((priority << (8 - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
9 }
10 }
因为 SysTick 属于内核外设,跟普通外设的中断优先级有些区别,并没有抢占优先级
和子优先级的说法。在 STM32F429 中,内核外设的中断优先级由内核 SCB 这个外设的寄
存器: SHPRx( x=1.2.3)来配置。有关 SHPRx 寄存器的详细描述可参考《 Cortex-M4 内核
编程手册》 4.4.8 章节。
,可以看出系统定时器此时设置的优先级
在内核外设中是最低的。
SysTick 初始化函数由用户编写,里面调用了 SysTick_Config()这个固件库函数,通过
设置该固件库函数的形参,就决定了系统定时器经过多少时间就产生一次中断。
SysTick 中断时间的计算
SysTick 定时器的计数器是向下递减计数的,计数一次的时间 TDEC=1/CLKAHB,当重装
载寄存器中的值 VALUELOAD 减到 0 的时候,产生中断,可知中断一次的时间
TINT=VALUELOAD * TDEC 中断= VALUELOAD/CLKAHB,其中 CLKAHB =180MHZ。如果设置为
180,那中断一次的时间 TINT=180/180M=1us。不过 1us 的中断没啥意义,整个程序的重心
都花在进出中断上了,根本没有时间处理其他的任务。
SysTick_Config(SystemCoreClock / 100000))
SysTick_Config()的形我们配置为 SystemCoreClock / 100000=180M/100000=1800,
从刚刚分析我们知道这个形参的值最终是写到重装载寄存器 LOAD 中的,从而可知我们现
在把 SysTick 定时器中断一次的时间 TINT=1800/180M=10us。

SysTick—系统定时器的更多相关文章
- 第18章 SysTick—系统定时器
第18章 SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 第18章 SysTick—系统定时器—零死角玩转STM32-F429系列
第18章 SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- SysTick系统定时器(功能框图和优先级配置)
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 ...
- STM32—SysTick系统定时器
SysTick是STM32中的系统定时器,利用SysTick可以实现精确的延时. SysTick-系统定时器 属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit 的向下 ...
- SysTick系统定时器
1.SysTick定时器介绍 SysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个 外设,被嵌入在 NVIC 中.它是一个24 位向下递减的定时器,每计数一 次所需时间为 ...
- stm32 SysTick系统定时器
它是一个24位向下递减的定时器,每计数一次所需时间为1/SYSTICK,SYSTICK是系统定时器时钟,它可以直接取自系统时钟,还可以通过系统时钟8分频后获取 当定时器计数到0时,将从LOAD 寄存器 ...
- 实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)
/** ****************************************************************************** * @file main.c * ...
- 使用系统定时器SysTick实现精确延时微秒和毫秒函数
SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 ...
- STM32F103ZET6系统定时器SysTick
1.系统定时器SysTick的简介 系统定时器SysTick属于内核外设,内嵌在NVIC中.SysTick是一个24位的向下递减的计数器,计数器根据SysTick的时钟源计数,当SysTick的计数器 ...
随机推荐
- 面经 | 我是如何通过校招拿到京东的Offer的
本文来自粉丝投稿,原作者:红鼻子熊. 版权归Hollis所有. OFFER:京东2018校招物流研发岗 个人:211小硕 面试时间:2017年秋天 整体:三轮面试,前两轮为技术面试,最后为hr面试 一 ...
- sql 改动表以及表字段
用SQL语句加入删除改动字段 1.添加字段 alter table docdsp add dspcode char(200) alter table tbl add meet ...
- 吐血整理 Delphi系列书籍 118本(全)
Delphi 教程 系列书籍 网友(老帅)整理 001_<Delhpi6数据库设计思想与实践> 002_<Delphi6应用开发指南> 003_<Delphi6开发人员指 ...
- shell学习:几道常见shell习题
1. 编写shell脚本,计算1-100的和: #! /bin/bash sum=0 for i in `seq 1 100`; do sum=$[$i+$sum] done echo $sum 计算 ...
- JVM调优思路
一.jvm内存调优 (Gc 和 Full gc) hotspot -Xms40m 最小堆内存 -Xmx512m 最大值内存 -verboose:gc -XX:PrintGCDetails -XX: ...
- screen space shadowmap unity
unity用到了screen space shadow map 1.camera 在light pos 生成depth1 2.screen space depth2 3.根据depth1 depth2 ...
- Hibernate:SQL查询 addScalar()或addEntity()
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.该 ...
- Md5Hash的测试
import org.apache.shiro.crypto.hash.Md5Hash; public static void main(String[] args) { /** * source 要 ...
- H5+CSS3简单动画 知识点 汇总
乱入几个: 1.h5的一个语义化标签 figure :用于规定独立的流内容(图像 图表 照片 代码等) figcapition:与figure配套使用,用于标签定义figure元素标题 2. ...
- 【License】一张图该诉你各种License的含义?
一张图该诉你各种License的含义: