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的计数器 ...
随机推荐
- chrome.webRequest
chrome.webRequest 描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截.阻止或修改请求. 可用版本: 从 Chrome 17 开始支持. 权 ...
- DevExpress 自动匹配宽度,及其他使用笔记
摘自: http://blog.sina.com.cn/s/blog_53b58e7c0101avl4.html GridControl列自动匹配宽度 -- : 327人阅读 评论() 收藏 举报 / ...
- 【笔记】探索js 的this 对象 (第三部分)
了解完函数的调用区域是如何影响this 对象的,还有this 的各种绑定方式以及各种绑定方式的优先级后 最后一部分,来了解一下this 的一些例外情况 1.被忽略的this 例如在使用bind 方法时 ...
- LVS+keepalived+nginx
LVS是Linux Virtual Server的简写,基于4层协议不处理,不响应,只转发,速度更快 wget -c http://www.linuxvirtualserver.org/softwar ...
- Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
转载:https://www.cnblogs.com/firstdream/p/8109352.html 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: l ...
- zabbix_LAMP源码安装
Zabbix源码包安装 Cenos5.3 Basic server 安装顺序 Libxml2 Libmcrypt Zlib Libpng Jpeg:需要创建目录jpeg /bin /lib /incl ...
- Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程
孙广东 2015.7.14 在新的网络引擎出现之前,Unity提供的是 内置 Raknet网络引擎, 这一次Unity想更新UGUI一样,花了大的手笔更新了, UNET. 原来的旧的网络组件 被提示 ...
- 在xcode5下利用Source Control 做 git 项目管理
xcode5做了很大的更新,其中一点非常实用的功能是集成了Source control项目管理,而且和git做了完美的结合:非常实用: 使用: 在新建项目时,选择 下面的 Create a git r ...
- 算法笔记_051:荷兰国旗问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫荷兰国旗,是因为 ...
- android 从Activity 获取 rootView 根节点
private static View getRootView(Activity context) { return ((ViewGroup)context.findViewById(android. ...