STM32 系统(SysTick)定时器实验

2023-10-27

SysTick 简介

SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。
因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

SysTick 寄存器介绍

SysTick—系统定时器有 4 个寄存器,简要介绍如下。在使用 SysTick 产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。

寄存器名称 寄存器描述
CTRL SysTick控制及状态寄存器
LOAD SysTick重装载值寄存器
VAL SysTick当前数值寄存器
CALIB SysTick校准数值寄存器

SysTick控制及状态寄存器
在这里插入图片描述
SysTick重装载值寄存器
在这里插入图片描述
SysTick当前数值寄存器
在这里插入图片描述
SysTick校准数值寄存器
在这里插入图片描述
系统定时器的校准数值寄存器在定时实验中不需要用到。有关各个位的描述这里引用手册里面的英文版本,比较晦涩难懂。

SysTick 定时时间计算

T = reload * (1/clk)
Clk = 72M时, T = (72) * (1/72M) = 1us
Clk = 72M时, T = (72000) * (1/72M) = 1ms

SysTick 定时实验

利用 SysTick 产生 1ms/us 的时基,LED 以自己设定的值(ms/us) 的频率闪烁。
硬件材料
SysTick 属于单片机内部的外设,不需要额外的硬件电路,剩下的只需一个 LED 灯即可。可以使用开发板上自带的LED灯,我这里用的是正点原子的战舰,stm32f103无论何家的都能使用。

软件设计
SysTick 配置函数在固件库里面core_cm3.h 中,可以找到整个函数,无需修改。

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{ 
	// 判断 tick 的值是否大于 2^24,如果大于,则不符合大于
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            
	
	//初始化reload寄存器的值
                                                               
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      
	//配置中断优先级,配置为15,默认为最低优先级
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  
	//初始化 counter的值位0
  SysTick->VAL   = 0;  
	//配置 systick 的时钟为 72M
	//使能中断
	//使能systick
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                   SysTick_CTRL_TICKINT_Msk   | 
                   SysTick_CTRL_ENABLE_Msk;                    
  return (0);                                                  
}

systick.c

#include "systick.h"
#include "misc.h"

#if 0
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{ 
	// 判断 tick 的值是否大于 2^24,如果大于,则不符合大于
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            
	
	//初始化reload寄存器的值
                                                               
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      
	//配置中断优先级,配置为15,默认为最低优先级
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  
	//初始化 counter的值位0
  SysTick->VAL   = 0;  
	//配置 systick 的时钟为 72M
	//使能中断
	//使能systick
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                   SysTick_CTRL_TICKINT_Msk   | 
                   SysTick_CTRL_ENABLE_Msk;                    
  return (0);                                                  
}
#endif

/*实现微秒级的延时*/

void sysTick_Delay_us(uint32_t us)
{
	uint32_t i;
	SysTick_Config(72);//这是根据系统时钟频率
	for(i = 0; i < us; i++){
		while( !(SysTick->CTRL) & 1<<16);//1和1&还是1,当这个位为1的时候表示计数完毕,跳出循环
		
		
	}
	
	
	
	
}

/*实现毫秒级的延时*/
void sysTick_Delay_ms(uint32_t ms)
{
	uint32_t i;
	SysTick_Config(72000);//72,ms就是要*1000
	for(i = 0; i < ms; i++){
		while( !(SysTick->CTRL) & 1<<16);//1和1&还是1,当这个位为1的时候表示计数完毕,跳出循环
		
	}
	
	
}

main.c

#include "systick.h"
#include "led.h"


int main()
{
	LED_Init();
	while(1){
		LED0 = 0;
		sysTick_Delay_us(50000);
		LED0 = 1;
		sysTick_Delay_us(50000);
	}
	

}

!!!!!!切记!!!!!!
一定要在你自己编写文件的.h文件中加上

#include "stm32f10x.h"

我这边是systick.h

#ifndef __SYSTICK_H
#define __SYSTICK_H

#include "stm32f10x.h"
#include "core_cm3.h"

void sysTick_Delay_us(uint32_t us);
void sysTick_Delay_ms(uint32_t ms);
#endif /* __SYSTICK_H */


不然会报如下错误
在这里插入图片描述

实验结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 系统(SysTick)定时器实验 的相关文章

随机推荐

  • 服务器运行tomcat报错误java.security.UnrecoverableKeyException: Cannot recover key

    问题 项目部署在阿里云服务器上 一直都是正常运行 因业务需要重启服务器 之后就启动tomcat 然后就发现启动不了了 报错 java security UnrecoverableKeyException Cannot recover key
  • MVS、SFM的区别和联系

    文章目录 一 双目相机重建步骤 二 SFM重建步骤 三 MVS重建步骤 四 SFM 和MVS 各自的目的 五 传统MVS和深度学习MVS对比 一 双目三维重建 binocular stereo 输入左右两张图片 二 SFM Structur
  • 法律法规

    法律体系 我国法律体系基本框架 由宪法和宪法相关法 民法商法 行政法 经济法 社会法 刑法 诉讼及非诉讼程序法构成 法的形式 法的形式的4个含义 1 法律规范的创制机关的性质及级别 2 法律规范的外部表现形式 3 法律规范的效力等级 4 法
  • 平时都用Python绘制二维图,如果用来绘制三维图会有什么效果?

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 通常我们用 Python 绘制的都是二维平面图 但有时也需要绘制三维场景图 比如像下面这样的 这些图怎么做出来呢 今
  • 备赛电赛学习STM32篇(九):ADC

    目录 一 ADC的简介 二 逐次逼近型ADC 2 1 逐次逼近型ADC框图 2 2 STM32 ADC内部介绍 2 2 1 STM32ADC的通道以及存储数据的寄存器 2 2 2 触发方式 2 2 3 STM32ADC时钟部分 2 2 4
  • 机器学习——聚类——距离聚类法——K-means

    目录 理论部分 1 1 聚类概念 1 1 1 定义 1 1 2 与分类的区别 1 2 相似度测量 1 2 1 欧式距离 1 2 2 马氏距离 1 3 聚类准则 1 3 1 试探方法 1 3 2 聚类准则法 1 4 常见聚类方法 1 5 K均
  • 判断(if)语句

    先说一下if语句的应用场景 生活中我们会有这样那样的如果 发工资为例 我们将它转化成代码 if 今天发工资 先还信用卡的钱 四个空格或tap键 不能混用 if 有剩余 就要买买买 else 难受ing else 期待下个月 正是有了判断 我
  • C#使用protobuf简述

    编译依赖项 首先 创建一个C 4 5以上project 因为最新的protobuf依赖于C 5 0的语言特性 然后 我们通过nuget 为项目添加对protobuf的引用 搜索protobuf就可以开始安装了 安装完成后 可以编译一次工程
  • JVM运行原理及优化之 jstat -gc

    我们写好的代码 是要通过JVM才能运行的 JVM 想要执行一个类 首先要加载类 在加载类之前 需要先编译成字节码class 文件 然后就执行类的加载过程 JVM 加载类的话 需要类加载器 类加载器是分层级的 遵循双亲委派机制 最上层是Boo
  • 服务端与移动端交互信任的锚点---维护授信证书与私钥

    HTTPS 分为 HTTP SSL 安全套接字层 后面SSL3 0之后被重命名为TLS1 0 其实就是SSL3 0的进化版本 TLS1 0 Transport Layer Security 安全传输层协议 可以说TLS就是SSL的新版本3
  • css中只使用vue的变量

    参考 https blog csdn net FellAsleep article details 130617163 1 必须作用在用一个div上 2 变量必须有双横杠 span class bb 11 span data return
  • 低代码开发平台能开发什么类型的系统和软件?

    低代码开发平台能开发什么类型的系统和软件 1 数据分析和报告系统 使用低代码平台 企业可以创建数据看板 集成不同数据源 自动提取 分析和可视化数据 这种系统适用于监控业务指标 分析趋势 并为决策提供数据支持 2 信息管理系统 低代码平台能够
  • Mock代理对象失效问题分析

    Mockito 简介 Mockito是一种常用的java单测框架 主要功能就是用来模拟接口的实现 对于测试环境无法执行的方法可以通过mock来执行我们定义好的逻辑 通常代码写法如下 public class AimServiceTest 将
  • http-2.4版本编译安装

    httpd 2 4版本新特性 1 mpm支持运行dos机制 2 支持event mpm 3 支持异步读写 4 支持每模块及每个目录分别使用各自的日志级别 5 每请求配置 6 增强版的表达式分析 7 支持毫秒级别的keeplivetimeou
  • Spring框架学习day_02:组件扫描 / 注解内部读解 / 组件扫描中配置作用域和生命周期 / 解耦 / 自动装配(两种方式) / 读取文件

    1 组件扫描 首先 必须让Spring扫描组件所在的包 并且 组件类的声明之前必须添加 Component注解 其实 除了 Component注解以外 还可以使用以下注解实现同样的效果 Controller 推荐添加在控制器类之前 Serv
  • C++泛型 显式实例化与显式具体化区别

    显式实例化 相当于通知编译器接下来我要使用这种数据类型的函数 显示的通知编译器生成对应的模板 以此和隐式的实例化相区别 隐式的实例化通过实参的类型来控制编译器对于通用函数模板相应类型的生成 而显式实例化为明文通知 实际效果上两者似乎并无太大
  • MARKDOWN使用方式

    这里写自定义目录标题 欢迎使用Markdown编辑器 红色字体 空格 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居
  • Spring Data Redis中的事务陷阱

    原文地址 转载请注明出处 https blog csdn net qq 34021712 article details 79606551 王赛超 之前spring整合redis开启事务 在功能测试环境下跑了N天之后 突然发现服务异常 查看
  • pandas进阶修炼300题,全新上线!

    大家好 现在 经过一个多月的整理 全新的 pandas进阶修炼300题 来了 下面是一些介绍 文末可以免费下载 01 全新目录 新版pandas300题 按照操作分为 10大章节 每章均配有独立的真实数据 每个操作的习题在20 40题左右
  • STM32 系统(SysTick)定时器实验

    目录 SysTick 简介 SysTick 寄存器介绍 SysTick 定时时间计算 SysTick 定时实验 实验结果 SysTick 简介 SysTick 系统定时器是属于 CM3 内核中的一个外设 内嵌在 NVIC 中 系统定时器是一