STM32F103ZET6系统定时器SysTick
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的更多相关文章
- 实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)
/** ****************************************************************************** * @file main.c * ...
- 使用系统定时器SysTick实现精确延时微秒和毫秒函数
SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 ...
- Cortex-M0系统滴答定时器Systick详解
上图是LPC1114系统滴答定时器(SysTick)的结构图.系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器.其 ...
- 第18章 SysTick—系统定时器
第18章 SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 系统滴答定时器(SysTick)中断配置
系统滴答定时器(SysTick)中断配置 在STM32标准库中是通过SysTick_Config()函数配置时钟中断的,然后SysTick_Handler()函数自动定时触发其中的函数. if(Sys ...
- SysTick—系统定时器
本章参考资料<ARM Cortex™-M4F 技术参考手册> -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick ...
- 第18章 SysTick—系统定时器—零死角玩转STM32-F429系列
第18章 SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- stm32之Cortex系统定时器(SysTick)
转载自:http://www.21ic.com/app/mcu/201811/781135.htm SysTick时钟,俗称“嘀嗒定时器”,它能按设定的时间产生一次中断.控制工程代码中随处可见形如 ...
- SysTick系统定时器(功能框图和优先级配置)
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 ...
随机推荐
- iOS中使用block进行网络请求回调
iOS中使用block进行网络请求回调 HttpRequest.h // // HttpRequest.h // UseBlockCallBack // // Created by Michael o ...
- [每日一题系列] LeetCode 1071. 字符串的最大公因子
题目 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 "T 能除尽 S". 返回最长字符串 X,要求满足 X 能除尽 ...
- Oracle学习笔记--Oracle启动过程归纳整理
Oracle 启动过程分为nomount状态mount状态open状态 每个状态下Oracle都会进行不同的操作:1.nomount状态 在$ORACLE_HOME/dbs目录下寻找参数文件 参数文件 ...
- python3.7安装pygame
经过各种找,下面这个安装地址中的版本是最全的 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 本机python版本
- Python基础数据类型2
lst.extend([1,2,3]) # 扩展 --- 迭代添加 整型和布尔值不能迭代print(lst) lst1 = [1,2,3]lst2 = [4,5,6]lst3 = lst1 + lst ...
- List remove ConcurrentModificationException源码分析
代码块 Java Exception in thread "main" java.util.ConcurrentModificationException at j ...
- js 随机产生100个0~1000之间的整数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【TIJ4】第三章全部习题
题目都相当简单没啥说的直接放代码就行了... 3.1 package ex0301; //[3.1]使用“简短的”和正常的打印语句来写一个程序 import static java.lang.Syst ...
- 【2020-03-21】Dubbo本地环境搭建-实现服务注册和消费
前言 本周主题:加班工作.本周内忙于CRUD不能自拔,基本每天都是九点半下班,下周上线,明天还要加班推进进度.今天是休息日,于是重拾起了dubbo,打算近期深入了解一下其使用和原理.之所以说是重拾,是 ...
- python爬取网站页面时,部分标签无指定属性而报错
在写爬取页面a标签下href属性的时候,有这样一个问题,如果a标签下没有href这个属性则会报错,如下: 百度了有师傅用正则匹配的,方法感觉都不怎么好,查了BeautifulSoup的官方文档,发现一 ...