【STM32】利用SysTick定时器定时1s

embedded/2025/1/11 19:20:08/

1.SysTick简单介绍

SysTick定时器是一个24位的倒计数定时器,当计数到0时,将从RELOAD寄存器中自动重装载定时初值,开始新一轮计数。

SysTick定时器用于在每隔一定的时间产生一个中断,即使在系统睡眠模式下也能工作。

关于SysTick详细说明,请查看该文章:

STM32—delay和操作系统共用SysTick定时器_systick 与 delay 同时-CSDN博客

2.实现SysTick定时器延时1s

利用SysTick定时器延时1s只需要利用到以下两个函数:

SysTick_Config(SystemCoreClock / 1000);    //预装载值
void SysTick_Handler(void);               //SysTick中断函数

(1)函数SysTick_Config(SystemCoreClock / 1000);

这个函数是为SysTick定时器设置预装载值,其中

SystemCoreClock 表示系统时钟频率,

SystemCoreClock / 1000结果为预装载值,

定时时间=预装载值 / 系统时钟频率。

举个例子:

系统时钟频率 SystemCoreClock = 72MHz,那么其

预装载值 = SystemCoreClock / 1000 = 72 000 000Hz / 1000 = 72 000,

定时时间 = 预装载值 / 系统时钟频率 = 72 000 / 72 000 000 = 1ms。

注:表达式SystemCoreClock / 1000中的这个1000可以跟换为其他的数值。常用的有如下几种:

SysTick_Config(SystemCoreClock / 1000);        //定时1ms
SysTick_Config(SystemCoreClock / 100);         //定时10ms
SysTick_Config(SystemCoreClock / 10);          //定时100ms
SysTick_Config(SystemCoreClock / 1000 000);    //定时1us

(2)函数void SysTick_Handler(void);

这个函数是SysTick中断函数,当SysTick定时时间到,进入到该中断函数,所以要实现定时1s,设置一个计数值即可。

在此以预装载值为SysTick_Config(SystemCoreClock / 1000)为例实现定时1s。

int SysTick_count = 0;        //SysTick定时器计数变量
void SysTick_Handler(void)
{SysTick_count++;           //每执行一次中断,该计数值加1if(SysTick_count > 1000)   //每进来一次中断时间为1ms,所以当计数到1000*1ms=1s,即为1s{SysTick_count = 0;     //将计数变量清0,使其执行下一次的1s定时}
}

3.完整代码

#include "stm32f10x.h"#define SystemCoreClock    72 000 000    //72MHzint SysTick_count = 0;        //SysTick定时器计数变量void main()
{SysTick_Config(SystemCoreClock / 1000);    //预装载值while(1){//此处可添加定时1s需要实现的功能}
}//SysTick中断服务函数
void SysTick_Handler(void)
{SysTick_count++;           //每执行一次中断,该计数值加1if(SysTick_count > 1000)   //每进来一次中断时间为1ms,所以当计数到1000*1ms=1s,即为1s{SysTick_count = 0;     //将计数变量清0,使其执行下一次的1s定时}
}


http://www.ppmy.cn/embedded/153099.html

相关文章

《机器学习》从入门到实战——决策树

目录 一、简介 二、基本结构 三、构建过程 四、API接口解析 1、决策树--分类 (1)、接口调用方法 (2)、参数解析 2、决策树--回归 (1)、接口调用方法 (2)、参数解析 五、代…

计算机网络之---数据传输与比特流

数据传输的概念 数据传输是指将数据从一个设备传输到另一个设备的过程。传输过程涉及将高层协议中的数据(如包、帧等)转化为比特流,在物理介质上传输。 比特流的概念 比特流是数据传输中最基本的单位,它是由0和1组成的连续比特…

Swift UI开发指南:修饰器特性(modifiers)

SwiftUI开发指南:修饰器特性(Modifiers) 什么是修饰器?修饰器的特性示例:改变文本颜色代码:效果: 常用修饰器列表修饰器的最佳实践总结 在SwiftUI中,修饰器(modifiers&am…

[免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序(高校就业)招聘系统(Springboot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章: 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…

Spring Boot项目中增加MQTT对接

在Spring Boot项目中增加MQTT对接,通常涉及以下几个步骤: 一、搭建MQTT服务器 首先,你需要搭建一个MQTT服务器(Broker)。这可以通过多种方式实现,例如使用Docker来部署EMQX或Mosquitto等MQTT Broker。 以…

javaEE初阶————多线程初阶(1)

多线程初阶———— 1,认识线程 1.1 概念 1)线程是什么 线程就是一个“执行流”,可以理解为程序执行的最小单位; 可以看成轻量级的进程; 2)为啥要有线程 “并发编程” 的需要,但是我们不…

一个基于Spring Boot的简单网吧管理系统

一个基于Spring Boot的简单网吧管理系统的案例代码。这个系统包括用户管理、电脑管理、上机记录管理等功能。代码结构清晰,适合初学者学习和参考。 1. 项目结构 src/main/java/com/example/netbarmanagement├── controller│ ├── ComputerController.jav…