ARM Cortex-Mx 权威指南笔记—SysTick定时器

news2024/11/15 15:58:11

前言

通过本次学习你可以学到:
1、什么是SysTick定时器?

2、Systick定时器的操作。

3、如何使用Systick定时器。
正文内容参考 ARM Cortex-Mx 权威指南笔记 9.5小节。

什么是Systick定时器

SysTick定时器是Cortex-M处理器内部集成的名为系统节拍定时器,属于NVIC的一部分,并且可以产生Systick异常,是一个向下计数的24位定时器。可以作为一个周期的中断来触发内核,需要保证处理器运行在非特权模式下无法禁止该定时器,以免锁定系统。使用Systick定时器增加了软件的可移植性。由于所有的 Cortex-M处理器都具有相同的SysTick定时器,为一种Cortex-M3/M4 微控制器实现的OS也能适用于其他的Cortex-M3/M4 微控制器。

Systick定时器的操作

SysTick 定时器中存在4 个寄存器。CMSIS-Core 头文件中定义了一个名为SysTick的结构体,方便对这些寄存器的访问。
在这里插入图片描述其内部的包含的24位计数器如图所示,根据处理器时钟或者一个参考信号来减小计数。

在这里插入图片描述

在设置控制和状态寄存器的第0位使能该计数器后,当前值寄存器在每个处理器时钟周期或参考时钟的上升沿都会减小。若计数减至0,它会从重加载寄存器中加载数值并继续运行。

另外一个寄存器为 SysTick 校准值寄存器。它为软件提供了校准信息。由于 CMSIS-Core 提供了一个名为 SystemCoreClock 的软件变量,因此它就未使用SysTick 校准值寄存器。系统初始化函数 Systemlnit()函数设置了该变量,而且每次系统时钟配置改变时都要对其进行更新。这种软件手段比利用 SysTick 校准值寄存器的硬件方式更灵活。

Systick的寄存器细节如图所示:
在这里插入图片描述

使用Systick定时器

最简单产生周期性Systick中断的方法是:

uint32 t SysTick Config(uint32 t ticks);

该函数将 SysTick 中断间隔设置为 ticks,使能计数器使用处理器时钟,然后设置 SysTick异常为最低优先级。

例如,若要在 30MHz 的时钟频率下产生1kHz的 SysTick 异常则可以使用

SysTick Config(SystemCoreClock / 1000);

变量 SystemCoreClock 应该存放正确的时钟频率数值,也就是 30X 10。另外只需
使用:

SysTick Config(30000);         //30MHz /1000=30000

SysTick Handler(void)的触发频率就变成了1kHz。

许多情况下,可能会使用参考时钟或者不想使能 SysTick 中断,那么就不要使用 SysTick_Config 函数。此时需要直接操作 SysTick 寄存器,推荐使用下面的流程:

(1)将0写入 SysTick->CTRL禁止 SysTick 定时器。这个操作是可选的。若重用了其他代码,则由于 SysTick 之前可能已经使能过了,因此本操作是推荐使用的。

(2)将新的重加载值写人 SysTick->LOAD,重加载值应该为周期数减1。

(3)将任何数值写写入SysTick 当前值寄存器SysTick->VAL,该存器会被清零。

(4)写入SysTick 控制和状态寄存器 SysTick->CTRL启动 SysTick 定时器。

由于 SysTick 定时器向下计数到 0,因此,若要设置 SysTick 周期为 1000,则应该将重加载值(SysTick->LOAD)设置为999。

若要在轮询模式中使用 SysTick 定时器则可以利用 SysTick 控制和状态寄存器(SysTick->CTRL)中的计数标志来确定定时器何时变为 0。例如,可以将SysTick 定时器设置为特定数值,然后等它变为 0,并以此实现延时:

SysTick ->CTRL = 0;			//禁止 SysTick
SysTick-> LOAD =0xFF;		//计数范围 255~(256 个周期)
SysTick -> VAL =0;			//清除当前值和计数标志
SysTick ->CTRL= 5;			//使能 SysTick 定时器并使用处理器时钟
while((SysTick->CTRL&0x00010000)==0);			//等待计数标志置位
SysTick->CTRL = 0;			//禁止SysTick

若要将 SysTick 中断用作在一定时间后触发的单发操作,则可以将重加载值减小 12 个周
期,以补偿中断等待时间。例如,要使 SysTick 定时器在 300个时钟周期后执行:

volatile int SysTickFired;		//全局软件标志,表示SsTickAlarm 已执行
SysTick->CTRL= 0;			//禁止SysTick
SysTick->LOAD =(300-12);	//设置重加载值,由于异常等待减去12
SysTick->VAL =0;			//将当前值清为0
SysTickFired =0;			//将软件标志设为0
SysTick ->CTRL = 0x7;	//使能 SysTick,使能 SysTick 异常且使用处器时钟
while (SysTickFired == 0);		//等待 SysTick处理将软件标志置位

其他考虑

在使用 SysTick 定时器时需要考虑以下几点:
1、SysTick 定时器中的寄存器只能在特权状态下访问
2、参考时钟在一些微控制器设计中可能会不存在。
3、若应用中存在嵌人式 OS,SysTick 定时器会被 OS 使用因此就不能再被应用务使用了。
4、当处理器在调试期间暂停时,SysTick 定时器会停止计数。
5、根据微控制器的实际设计SysTick 定时器可能会在某些休眠模式中停止计数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1367100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【FPGA】分享一些FPGA数字信号处理相关的书籍

在做FPGA工程师的这些年,买过好多书,也看过好多书,分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

【Linux Shell】10. 函数

文章目录 【 1. 函数的定义 】【 2. 函数参数 】 【 1. 函数的定义 】 所有函数在使用前必须定义 。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。 调用函数仅使用其函数名即可 。 函数返回值在调用该函数后通过 $? 来…

《罗素论教育》笔记

目录 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 教育的目的 二、品性的教育 一岁前的教育 主要是2岁到6岁的教育 三、智力教育 14岁前的课程安排 最后的学年 大学教育 四、结束语 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 1、我…

Mysql大数据量下流式查询优化:Jdbc中的useFetchSize参数及其原理解析

前言 最近我朋友公司有个需求场景:查询千万级数据量并写入txt文件的程序优化需求。 朋友找到我对程序进行优化, 不然饭碗不保......💦 下面就分享一下解决这个优化问题的过程和思路,并总结一下,在以后不要在踩同样的坑…

滴水逆向1

八进制加法乘法表 EF11101111 j记住其映射关系 十进制的定义:由十个符号组成,分别是0 1 2 3 4 5 6 7 8 9 逢十进一。九进制的定义:由九个符号组成,分别是0 1 2 3 4 5 6 7 8 逢九进一。十六进制的定义:由十六个符号组成…

C++ 对象模型 | 关于对象

一、C 对象模型 1、对象内存布局 在C中,有两种数据成员:static和nonstatic,以及三种成员方法static、nonstatic、virtual,下面从虚函数、非虚函数、静态成员变量、非静态成员变量等维度来分析,类对象的内存布局。例如…

苍穹外卖Day01——总结1

总结1 1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 技术选项 3. Swagger4. 补充内容(待解决...) 1. 软件开发整体介绍 1.1 软件开发流程 1.2 角色分工 从角色分工里面就可以查看自己以后从事哪一…

lv14 IO模型:阻塞和非阻塞 7

1 五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞:不能操作就返回错误(通过轮询即才能实现阻塞的情况 ) 多路复用:委托中介监控 信号驱动:让内核如果能操作时发信号,在信号处理函数中操作 异步IO&a…

视频AI智剪方法:快速批量处理视频,批量剪辑视频的操作

随着科技的飞速发展,视频内容已是获取信息和娱乐的主要方式之一。对于视频创作者和内容生产者来说,如何快速、高效地处理和剪辑大量视频已成为一项重要的需求。现在借助AI技术的不断发展,可以更加智能、高效的处理视频。下面来看云炫AI智剪如…

kubernetes入门到进阶(5)

目录 镜像仓库:怎么用好docker hub这个宝藏 什么是镜像仓库(Registry) 什么是docker hub 如何在docker hub上挑选镜像 docker hub上进行概念股命名规则是什么 该怎么上传自己的镜像 离线环境该怎么办 小结 镜像仓库:怎么用好docke…

《BackTrader量化交易图解》第8章:plot 绘制金融图

文章目录 8. plot 绘制金融图8.1 金融分析曲线8.2 多曲线金融指标8.3 Observers 观测子模块8.4 plot 绘图函数的常用参数8.5 买卖点符号和色彩风格8.6 vol 成交参数8.7 多图拼接模式8.8 绘制 HA 平均 K 线图 8. plot 绘制金融图 8.1 金融分析曲线 BackTrader内置的plot绘图函…

多线程-synchronized详解

1、基本作用:Java提供了一种内置的锁机制来支持原子性,同步代码块(Synchronized Block ) 同步代码块包括两个部分: 1、锁的对象引用。2、锁作用的代码块。 例子: synchronized(Object){ //被保护的共享…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

【陈老板赠书活动 - 21期】- Python树莓派编程从零开始(第3版)

陈老老老板🧙‍♂️ 👮‍♂️本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 🤴本文简述:活就像海洋,只有意志坚强的人,才能到达彼岸。 👳‍♂️上一篇文章&#xff…

LaTex引用字体变色

使用下面这条语句进行修改。 ‘citecolor’改变参考文献颜色, ‘linkcolor’改变图标公式引用的颜色, ‘urlcolor’ 文本网站超链接颜色。 \usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolorblue, linkcolorblue, urlcolorblue]{hyper…

Python 常用数据类型

Python 常用数据类型有以下这些: 数据类型中文解析例子int整数,表示整数值1、2float浮点数,表示带有小数点的数值3.14、2.718complex复数,表示实部和虚部组成的复数12j、3-4jstr字符串,表示文本数据,用引号…

最优化理论分析复习--最优性条件(一)

文章目录 上一篇无约束问题的极值条件约束极值问题的最优性条件基本概念只有不等式约束时 下一篇 上一篇 最优化理论复习–对偶单纯形方法及灵敏度分析 无约束问题的极值条件 由于是拓展到向量空间 R n R^n Rn, 所以可由高数中的极值条件进行类比 一阶必要条件 设函数 f (…

SpringCloud系列篇:核心组件之配置中心组件

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.前言 二.配置中心组件是什么 三…

【年度重磅】《2023华为开发者宝典》覆盖16+技术领域,30+华为云专家倾力打造,免费下载

《2023华为开发者宝典》重磅发布,点击下载,欢迎大家转发赠阅,相互交流学习。 时光荏苒,转眼间我们已经告别挑战与机遇并存的2023年,迎接充满无限可能的2024年。 截至到2023年,华为云生态已聚合了全球超过5…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中使用Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查…