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

server/2025/1/12 17:58:10/

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/server/157813.html

相关文章

maven多模块项目编译一直报Failure to find com.xxx.xxx:xxx-xxx-xxx:pom:1.0-SNAPSHOT in问题

工作中项目上因为多版本迭代,需要对不同迭代版本升级版本号,且因为项目工程本身是多模块结构,且依然多个其他模块工程。 在将工程中子模块的pom.xml中版本号使用变量引用父模块中定义的版本号时,一直报Failure to find com.xxx.x…

Web3 游戏 2024:牛市下的缺席者?

2024 年,Web3 游戏行业呈现复杂态势,在取得重大进展的同时也面临诸多挑战。虽然日活跃用户数激增超 300%,传统游戏公司也开始具体布局该领域,但从市场表现来看,该板块市值仅增长 60.5%,显著落后于 Meme 币和…

小学校园安全用电 防触电设备功能介绍 #电不伤人,电不漏电#

安科瑞刘鸿鹏 摘要 电力作为一种清洁能源,给人们带来了舒适、便捷的电气化生活。与此同时,由于使用不当,维护不及时等原因引发的漏电触电和电气火灾事故,也给人们的生命和财产带来了巨大的威胁和损失。 为了防止低压配电系统发…

ffmpeg常用命令及介绍

FFmpeg 是一个非常强大的多媒体处理工具,可以用来进行视频和音频的转换、剪辑、合并、提取等多种操作。以下是一些常用的 FFmpeg 命令及其功能介绍: 1. 基本命令结构 FFmpeg 的基本命令结构如下: ffmpeg [全局选项] [输入文件选项] -i 输入…

用c实现C++类(八股)

在 C 语言中,虽然没有内建的面向对象编程(OOP)特性(如封装、继承、多态),但通过一些编程技巧,我们仍然可以模拟实现这些概念。下面将用通俗易懂的方式,逐步介绍如何在 C 中实现封装、…

腾讯云AI代码助手编程挑战赛——贪吃蛇小游戏

作品介绍 贪吃蛇小游戏需要控制蛇的移动方向,使其吃掉地图上随机出现的食物,每吃掉一个食物,蛇的身体就会增长一格,是一款老少皆宜的小游戏,我们可以用腾讯ai助手生成全部代码,简单方便快捷。 技术架构 …

HTML + CSS:如何强制div内容保持一行?

参考:https://cloud.tencent.com/developer/information/HTML%20%2B%20CSS%3A%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6div%E5%86%85%E5%AE%B9%E4%BF%9D%E6%8C%81%E4%B8%80%E8%A1%8C%EF%BC%9F 在HTML和CSS中,要强制让div内容保持在一行,可以使用以下方法&a…

NFC碰一碰发视频源码搭建,支持OEM

在移动互联网技术迅速发展的当下,NFC(Near Field Communication)技术凭借其便捷、快速的交互特性,为诸多应用场景带来了创新机遇。其中,NFC 碰一碰发视频功能以其独特的交互体验,在营销推广、内容分享等领域…