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. 必备技能五、router路由钩子

    在路由跳转的时候,我们需要一些权限判断或者其他操作.这个时候就需要使用路由的钩子函数. 定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数. 总体来讲vue里面提供了三大类钩子 ...

  2. var, let ,const区别

    ES6中加入了let,const字符,先说说新的区别: 作用域:let 声明的变量只在它所在的代码块内有效,而且不存在变量提升,即变量可以在声明之前使用,值为undefined.let未声明变量前会报 ...

  3. 编码的来源于格式简介ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE

    编码一直是让新手头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚.但是编码又是那么重要,特别在网页这一块.如果你打出来 ...

  4. Design Patterns | 02 什么样的代码是好代码

    目录 01 - 什么是好的代码? 02 - 评价代码的标准有哪些 2.1 可维护性(maintainability) 2.2 可读性(readability) 2.3 可扩展性(extensibili ...

  5. npm 安装包总结

    1.前端可视化json:vue-json-viewer; 2.富文本编辑: vue-quill-editor;    https://www.cnblogs.com/ZaraNet/p/1020922 ...

  6. vue之冒泡阻止

    用了Element ui写页面 <el-dropdown-menu slot="dropdown"> <el-dropdown-item> <el-s ...

  7. 普通索引和唯一索引如何选择(谈谈change buffer)

    假设有一张市民表(本篇只需要用其中的name和id_card字段,有兴趣的可以翻看“索引”篇,里面有建表语句) 每个人都有一个唯一的身份证号,且业务代码已经保证不会重复. 由于业务需求,市民需要按身份 ...

  8. Python习题集(三)

    每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 写一个小程序:控制 ...

  9. 2. weddriver的定位方法

    一. find_element_by_****的方式 首页在网页上鼠标右键选择检查并点击,查看需要定位的元素. https://www.baidu.com  以百度为例 导入模块的: from sel ...

  10. Blazor-断开连接后重新加载浏览器

    在大多数情况下,Blazor将与以前相同的线路上重新连接到服务器.但有时无法重新连接,需要重新加载web浏览器才能使网站重新工作.如果服务器回收应用程序池,则需要手动重新加载页面在没有调试的情况下在I ...