1、系统定时器SysTick的简介

  系统定时器SysTick属于内核外设,内嵌在NVIC中。SysTick是一个24位的向下递减的计数器,计数器根据SysTick的时钟源计数,当SysTick的计数器计数到0的时候,SysTick就产生一次中断,并且SysTick的重装载寄存器会给计数器重新赋值,以此循环往复。

  SysTick一般用于带操作系统的应用,用来产生时基,维持操作系统的心跳。

2、SysTick的寄存器

  SysTick有4个寄存器:

    • 控制及状态寄存器CTRL;
    • 重装载数值寄存器LOAD;
    • 当前数值寄存器VAL,即SysTick的计数器;
    • 校准数值寄存器CALIB;

  一般只需要配置CTRL、LOAD、VAL这三个寄存器,CALIB基本不使用。

  控制及状态寄存器CTRL

  CTRL的bit16位COUNTFLAG用来判断SysTick计数器是否递减到0,当SysTick递减到0的时候,COUNTFLAG会被置1,如果没有使用SysTick的中断功能,可以通过查询该位是否为1来判断SysTick定时器是否溢出。

  CTRL的bit2位CLKSOURCE用来选择SysTick的时钟源:

  当CLKSOURCE = 0时,SysTick的时钟源为AHB/8;

当CLKSOURCE = 1时,SysTick的时钟源为AHB;

一般ABH为SYSCLK的1分频,所以SysTick的时钟源可以选择为SYSCLK或SYSCLK/8。

  CTRL的bit1位TICKINT用来设置当SysTick计数到0的时候是否产生中断:

  当TICKINT = 0时,在SysTick计数到0的时候不会产生中断;

当TICKINT = 1时,当SysTick计数到0的时候产生中断。

  CTRL的bit1位ENABLE是SysTick的使能位,当ENABLE = 1时,SysTick开始计数。

  重装载数值寄存器RELOAD

  RELOAD寄存器是SysTick的自动重载数值寄存器,当SysTick的计数器递减到0的时候,RELOAD寄存器的值会重新赋值给SysTick的计数器,让SysTick可以重复计时。

  当前数值寄存器VAL

  当去读取VAL寄存器的值时,返回的是SysTick计数器的当前值;当去写VAL寄存器的时候,会使SysTick计数器的值清零,而且还会清除CTRL寄存器的bit16位COUNNTFLAG。

3、HAL库操作SysTick

  SysTick相关的寄存器定义和库函数操作都是在Core_CM3.h头文件内实现的。

  在HAL中使用SysTick比较简单,只需要通过Core_CM3.h文件中的SysTick_Config函数就可以了,通过将参数传入SysTick_Config函数设置SysTick的自动重载数值。

  调用SysTick_Config函数,SysTick的时钟源会被配置成AHB,并且使能中断,SysTick的中断优先级也在SysTick_Config函数中配置了。如果需要更改配置,可以找到SysTick_Config函数,并修改。

  SysTick的中断服务函数在stm32f1xx_it.c文件中,SysTick的中断处理过程在SysTick_Handler中实现。

  初始化代码如图:

  中断服务函数

STM32F103ZET6系统定时器SysTick的更多相关文章

  1. 实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)

    /** ****************************************************************************** * @file main.c * ...

  2. 使用系统定时器SysTick实现精确延时微秒和毫秒函数

    SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 ...

  3. Cortex-M0系统滴答定时器Systick详解

    上图是LPC1114系统滴答定时器(SysTick)的结构图.系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器.其 ...

  4. 第18章 SysTick—系统定时器

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  5. 系统滴答定时器(SysTick)中断配置

    系统滴答定时器(SysTick)中断配置 在STM32标准库中是通过SysTick_Config()函数配置时钟中断的,然后SysTick_Handler()函数自动定时触发其中的函数. if(Sys ...

  6. SysTick—系统定时器

    本章参考资料<ARM Cortex™-M4F 技术参考手册> -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick ...

  7. 第18章 SysTick—系统定时器—零死角玩转STM32-F429系列

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  8. stm32之Cortex系统定时器(SysTick)

    转载自:http://www.21ic.com/app/mcu/201811/781135.htm   SysTick时钟,俗称“嘀嗒定时器”,它能按设定的时间产生一次中断.控制工程代码中随处可见形如 ...

  9. SysTick系统定时器(功能框图和优先级配置)

    SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 ...

随机推荐

  1. python自动化第一课 - python安装以及pycharm配置

    1.安装python 1.1打开python官网https://www.python.org/downloads/windows/进行下载Python 3.8.0 1.2下载完毕后进行安装,1勾选 A ...

  2. Netty源码分析之ChannelPipeline—出站事件的传播

    上篇文章中我们梳理了ChannelPipeline中入站事件的传播,这篇文章中我们看下出站事件的传播,也就是ChannelOutboundHandler接口的实现. 1.出站事件的传播示例 我们对上篇 ...

  3. 深入理解计算机系统 (CS:APP) Lab2 - Bomb Lab 解析

    原文地址:https://billc.io/2019/04/csapp-bomblab/ 写在前面 CS:APP是这学期的一门硬核课程,应该是目前接触到最底层的课程了.学校的教学也是尝试着尽量和CMU ...

  4. MySql锁与InnoDB引擎

    MySql锁与InnoDB引擎 mysql的锁是面试中很高频问题,也是我们在日常开发中经常会遇到但是我们并没有注意到的地方.我把我自己理解的锁通过本篇博文分享出来,由于锁需要结合事务来理解,本文只介绍 ...

  5. Fink SQL 实践之OVER窗口

    问题场景 Flink SQL 是一种使用 SQL 语义设计的开发语言,用它解决具体业务需求是一种全新体验,类似于从过程式编程到函数式编程的转变一样,需要一个不断学习和实践的过程.在看完了 Flink ...

  6. 免注册公众号的三种微信推送消息服务的C#代码实现

    有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...

  7. Magento2-2.3.4 win10安装完magento无法加载静态资源导致无法进入后台登录页面

    后台面无法进入,截图如下

  8. angularJS表达式和指令

    主要是描述angularJS如何扩展html的:(模型后面会涉及) 例子1:通过指令来扩展html <body ng-app="myapp">  <!--  ng ...

  9. js正则校验表单

    /** * 表单校验规则 * 不符合规则时,返回错误文案 * 符合规则时,返回false */ var rules = {} // 是否必填 rules.required = function (va ...

  10. 决战Leetcode: easy part(51-96)

    本博客是个人原创的针对leetcode上的problem的解法,所有solution都基本通过了leetcode的官方Judging,个别未通过的例外情况会在相应部分作特别说明. 欢迎互相交流! em ...