滴答定时器的计数模式_【高手私藏】STM32学习笔记:SysTick滴答时钟

d23e5ff6bc40f1e21726f9e470cde661.png今天我们来说说SysTick定时器。SysTick定时器在从参考手册中根本没有介绍。我费了九牛二虎之力才在一个犄角格拉里找到SysTick定时器的英文版的说明。在Cotex-M3有介绍,为什么要找STM32的介绍,是因为功能设置上还有点区别。首先看一下SysTick定时器的作用,下面是Cotex-M3里的一段话:ff658a8c91d46a0c401f2c03b858ae8a.pngSysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟(CM3处理器上的STCLK信号)。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。24ed2f14a09d838cf579f9b968b4c1da.png知道我为什么找ST关于SysTick的说明了吧SysTick介绍下面介绍STM32中的SysTick。SysTick部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:
  • STK_CSR,0xE000E010—控制寄存器

  • STK_LOAD,0xE000E014—重载寄存器

  • STK_VAL,0xE000E018—当前值寄存器

  • STK_CALRB,0xE000E01C—校准值寄存器

1STK_CSR控制寄存器首先看STK_CSR控制寄存器:寄存器内有4个位具有意义
  • 第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。如果读取该位,该位将自动清零。

2STK_LOAD重载寄存器SysTick是一个递减的定时器。当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD重载寄存器是个24位的寄存器,最大计数0xFFFFFF。3STK_VAL当前值寄存器STK_VAL当前值寄存器也是个24位的寄存器。读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick控制及状态寄存器中的COUNTFLAG标志。4STK_CALRB校准值寄存器这个寄存器以我目前的水平还用不到,大体意思明白点,把英文说明放这吧。
  • 位31 NOREF:1=没有外部参考时钟(STCLK不可用),0=外部参考时钟可用。

  • 位30 SKEW:1=校准值不是准确的1ms,0=校准值是准确的1ms。

  • 位[23:0] :Calibration value。

英文说明Indicates the calibration value when the SysTick counter runs on HCLK max/8 as external clock. The value is product dependent, please refer to the Product Reference Manual, SysTick Calibration Value section. When HCLK is programmed at the maximum frequency, the SysTick period is 1ms. If calibration information is not known, calculate the calibration value required from the frequency of the processor clock or external clock.SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。SysTick定时器跑程序下面我们就应用SysTick定时器来裸奔,把它作为一个定时器来用,还是老一套,在寄存器头文件中添加定义寄存器。//*****************************************************************//*                               SystemTick-Register                                 //*******************************************************************#define SYSTICK_TENMS    (*((volatile unsigned long *)0xE000E01C))#define SYSTICK_CURRENT  (*((volatile unsigned long *)0xE000E018))#define SYSTICK_RELOAD   (*((volatile unsigned long *)0xE000E014))#define SYSTICK_CSR       (*((volatile unsigned long *)0xE000E010))配置SysTick寄存器:void SysTick_Configuration(void){SYSTICK_CURRENT=0; //当前值寄存器SYSTICK_RELOAD=20000; //重装载寄存器,系统时钟20M中断一次1mSSYSTICK_CSR|=0x06;// HCLK作为Systick时钟,Systick中断使能位}中断处理:void SysTick_Handler(void) //中断函数{extern unsigned long TimingDelay; // 延时时间,注意定义为全局变量SYSTICK_CURRENT=0;if (TimingDelay != 0x00)TimingDelay--;}利用SysTick的延时函数:unsigned long TimingDelay;  // 延时时间,注意定义为全局变量void Delay(unsigned long nTime)  //延时函数{SYSTICK_CSR|=0x07;   // 使能SysTick计数器TimingDelay = nTime; // 读取延时时间while(TimingDelay != 0); // 判断延时是否结束SYSTICK_CSR|=0x06;// 关闭SysTick计数器}int main(){SystemInit0();    //系统(时钟)初始化stm32_GpioSetup (); //GPIO初始化SysTick_Configuration(); //配置systick定时器while(1){GPIO_PORTB_ODR|=(1<<5);Delay(1000); //1SGPIO_PORTB_ODR&=~(1<<5);Delay(1000); //1S}}完成!Delay(1000);实现了1S的精确延时。利用Delay(unsigned long nTime);配合SysTick定时器,可以实现任意时间的精确延时。当然,通过定时器TIMx也是可以这样做的,我只是用它来说明SysTick定时器的用法。

c90715d83bb4a100f2d316fcbf3a225d.png

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

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

相关文章

2008wsus创建和管理计算机组,Windows Server 2012 R2 WSUS-6:配置计算机组和客户端目标...

转载&#xff1a;https://blog.51cto.com/543925535/1406660对于WSUS来说&#xff0c;配置计算机的方式有两个出发点&#xff0c;一个是使用update services控制台来配置计算机组&#xff0c;计算机分组的管理都需要手动维护&#xff0c;第二种是使用计算机上的组策略和注册表设…

多选框实现全选_Angular1.x-checkbox-全选amp;单选amp;多选

ng-checked&#xff1a;Angular里ng-checked属性影响复选框的状态&#xff0c;值>true则复选框选中&#xff0c;值>false则取消选中。HTML:<div class"col-lg-4"><fieldset><legend>选题列表</legend><div class"table-respon…

复旦计算机考研复试要口试吗,2017复旦大学考研复试:英语口语面试常见问题汇总...

2017复旦大学考研复试&#xff1a;英语口语面试常见问题汇总本站小编 辅仁网/2017-12-29A magazine publisher is trying to decide how many magazines she should deliver to each individual distribution out let in order to maximize profits. She has extensive histori…

2020笔记本性价比之王_什么笔记本性价比高?2020性价比最高的笔记本电脑

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供读者参考&…

专利计算机存储介质是智力活动,涉及计算机程序的发明专利申请的相关问题PPT课件.pptx...

文档介绍&#xff1a;1提纲涉及计算机程序的专利申请涉及算法的专利申请“方法与产品相对应”的情形2涉及计算机程序的专利申请涉及程序本身的权利要求主题名称为程序限定内容涉及程序本身限定内容仅涉及程序本身限定内容一部分涉及程序本身3涉及计算机程序的专利申请主题名称为…

前端请求接口post_接口自动化测试-WEB资讯专栏-DMOZ中文网站分类目录

为什么UI自动化维护成本更高&#xff1f;因为前端页面变化太快&#xff0c;而且UI自动化比较耗时(比如等待页面元素的加载、添加等待时间、定位元素、操作元素、模拟页面动作这些都需要时间)为什么接口自动化维护成本较低&#xff1f;因为接口较稳定&#xff0c;接口的响应时间…

input css年月日,input标签的type为date,显示的日期格式样式更改

这个///是改不了---的&#xff0c;这是谷哥自带的功能样式&#xff0c;只能改颜色背景色等&#xff0c;如果要那种效果可以用日历插件有个取巧的方法&#xff0c;一个不能改的input覆盖在input type"date"上面*{margin: 0;padding: 0;}#div{width: 500px;height: 300…

docker 容器安装conposer_docker和php:将依赖项(composer)放入容器中

目前我正致力于以下解决方案&#xff1a;开发环境&#xff1a;将整个src添加为volume&#xff1a;volumes:- .:/appinitial composer install commanddocker-compose exec app composer installinstall new composer package:docker-compose exec app composer require some/pa…

Windows虚拟服务器vm,史上最详细的虚拟机VMware12安装Windows7教程 | 心塞塞

首先你电脑必须安装了 VMware &#xff0c;推荐版本 VMware12 或者 VMware 11 版本&#xff0c;然后你还需要一个系统镜像&#xff0c;可以通过下面链接下载 Win7 的镜像&#xff0c;复制链接&#xff0c;打开迅雷新建任务即可下载&#xff1a;Windows7 64位1ed2k://|file|cn_w…

shader 获取法线_Unity Shader 入门到改行5——法线贴图

the best of blur1. 法线贴图理论1.1 什么是法线贴图一般的贴图中存储的是表面颜色值(RGBA)&#xff0c;而法线贴图存放的则是法线信息(xyzw)&#xff0c;假设某顶点处的 uv 坐标为 (u,v), 那么在法线贴图 (u,v)处纹素的值表示该顶点的“法线”方向。通常法线贴图中存储的并不是…

主站系统服务器选择,配电网自动化主站系统的结构_功能及操作系统的选择.doc...

业界建设行业专版水电暖通配电网自动化主站系统的结构&#xff0c;功能及操作系统的选择"徐德勇摘 要&#xff1a;本文主要从系统结构"子系统划分"设计实施"操作系统的选择"及其功能等方面介绍了配电自动化主站系统%关键词&#xff1a;配电自动化*系统…

python切面异常处理_Spring项目中优雅的异常处理

Spring项目中优雅的异常处理前言如今的Java Web项目多是以 MVC 模式构建的&#xff0c;通常我们都是将 Service 层的异常统一的抛出&#xff0c;包括自定义异常和一些意外出现的异常&#xff0c;以便进行事务回滚&#xff0c;而 Service 的调用者 Controller 则承担着异常处理的…

ubuntu查看服务器信息,查看Ubuntu服务器的版本信息

Docker on YARN在Hulu的实现这篇文章是我来Hulu这一年做的主要工作,结合当下流行的两个开源方案Docker和YARN,提供了一套灵活的编程模型,目前支持DAG编程模型,将会支持长服务编程模型. 基于Voidbox,开发者可以很 ...使用angularJS遇见的一些问题的解决方案1. angularJS的$http.…

方法 手写promise_JS探索-手写Promise

无意间在知乎上刷到Monad这个概念&#xff0c;去了解了一下&#xff0c;前端的Promise就是一种Monad模式&#xff0c;所以试着学习一下手写一个Promise.本文内容主要参考于只会用&#xff1f;一起来手写一个合乎规范的Promise​www.jianshu.comPromise是什么所谓Promise&#x…

dcs服务器性能指标,第6章DCS的性能指标.PDF

第6章DCS的性能指标第 6 章 DCS 的性能指标随着 DCS 的广泛应用&#xff0c;对 DCS 的可靠性要求也越来越高&#xff0c;因此正确评价 DCS 的可靠性越来越显得重要。DCS 的可靠与否&#xff0c;通常包含两重意思&#xff1a;一是指产品在规定的时间内&#xff0c;完成规定功能的…

12如何隐藏dock栏_一键隐藏 iPhone 刘海和底部 Dock 栏,简洁又好看

技能&#xff1a; 隐藏刘海和底部dock 栏难度系数&#xff1a;2颗星适用系统&#xff1a;iOS 13(部分非iOS13也适用)最近&#xff0c;小雷打开手机&#xff0c;看到最多的关键词&#xff0c;就是&#xff1a;iOS13又双叒叕更新了。。。而且也看到不止一位网友晒这个有趣的新功能…

湖南hp服务器虚拟化解决方案,HP刀片服务器虚拟化整合解决方案-20210729062411.docx-原创力文档...

HP刀片办事器 虚拟化整合解决方案22 -目录TOC \o "1-3" \h \u 1&#xff0e;办事器硬件整合 - 2 -什么是办事器整合 - 2 -1.2 为何要做办事器整合 - 2 -2&#xff0e;刀片办事器的观点 - 3 -3&#xff0e;刀片办事器如何整合IT资源 - 4 -3.1 新一代数据中心对IT设施系…

宝塔php安装那个合_使用宝塔面板安装nextcloud | 启用本地存储 | 安装smbclient

宝塔面板安装nextcloud | 启用本地存储使用宝塔面板搭建nextcloud服务后&#xff0c;在设置外部存储时总是无法启用本地存储。问题1&#xff1a;提示&#xff1a;“smbclient” 未安装。无法挂载 "SMB / CIFS", "SMB / CIFS 使用 OC 登录信息"。请联系管理…

springbboot加密打包_Spring Boot 配置 Security 密码加密

依赖org.springframework.bootspring-boot-starter-security注入beanSpringBootApplicationpublic class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}Beanpublic BCryptPasswordEncoder encoding(){retur…

mysql groupby 拼接_mysql groupby 字段合并问题(group_concat)

在我们的日常mysql查询中&#xff0c;我们可能会遇到这样的情况&#xff1a;对表中的所有记录进行分类&#xff0c;并且我需要得到每个分类中某个字段的全部成员。上面的话&#xff0c;大家看起来可能不太好懂&#xff0c;下面举一个例子来给大家说明。现在我们有一张表&#x…