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. 第四章、深入理解vue组件

    4-1.使用组件的细节 a.使用is解决html出现bug 如下 table下面应该为tr,所以页面渲染的时候没有找到tr是有问题的,所以是有小bug,所以table中必须是tr b.改上面bug,t ...

  2. new Date在IE下面兼容问题

    昨天碰到一个bug,用art-template模板进行渲染时候,周视图任务展示失败,都是暂无任务,我以为是模板兼容问题,但最开始我用的时候记得就是IE8的兼容性问题,引入es5-shim.min.js ...

  3. asp.net mvc core 管道以及拦截器初了解

    今天来看一下asp.net core的执行管道.先看下官方说明: 从上图可以抛光,asp.net core的执行顺序是,当收到一个请求后,request请求会先经过已注册的中间件,然后会进入到mvc的 ...

  4. openwrt sdk 添加软件包 Makefile 写法

    参考 https://openwrt.org/start?id=docs/guide-developer/packages ,英文稍好点的自己看吧,我写出来也就是方便,英文不好的人看. 软件包的来源, ...

  5. js 任意值变化封装

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Spark入门(三)--Spark经典的单词统计

    spark经典之单词统计 准备数据 既然要统计单词我们就需要一个包含一定数量的文本,我们这里选择了英文原著<GoneWithTheWind>(<飘>)的文本来做一个数据统计,看 ...

  7. Markdown试用

    目录 今天又是充满希望的一天 一.是什么 二.为什么 三.怎么做 代码 这世界上好人坏人都很多,我不是一个坏人. 我不是个英雄,我只是个拿

  8. Python第一周作业

    import turtle turtle.color('black','red') turtle.pensize(10) turtle.begin_fill() for i in range(5): ...

  9. scrapy框架xpath的几点说明

    1.xpath返回的是一个列表 2.调用Selector对象的extract方法将返回选中内容的Unicode字符串 SelectorList对象调用extract_first() 方法会返回其中第一 ...

  10. eclipse 配置tomcat运行环境

    eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上 1.打开Eclipse,单击“Window”菜单,选择下方的“Preferences”. 2.单击“Server”选项, ...