当前位置: 首页 > news >正文

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

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.lryc.cn/news/518765.html

相关文章:

  • Python中的format格式化、填充与对齐、数字格式化方式
  • winform第三方界面开源库AntdUI的使用教程保姆级环境设置篇
  • 如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目
  • SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门
  • 物联网:七天构建一个闭环的物联网DEMO
  • 景联文科技提供高质量多模态数据处理服务,驱动AI新时代
  • c#13新特性
  • LeetCode LCP17速算机器人
  • 杭州铭师堂的云原生升级实践
  • 计算机网络之---MAC协议
  • 微服务面试相关
  • Google发布图像生成新工具Whisk:无需复杂提示词,使用图像和人工智能将想法可视化并重新混合
  • docker pull(拉取镜像)的时候,无法下载或者卡在Waiting的解决方法
  • 51c~Pytorch~合集4
  • windows下,golang+vscode+delve 远程调试
  • 弥散张量分析开源软件 DSI Studio 简体中文汉化版可以下载了
  • 视频编辑最新SOTA!港中文Adobe等发布统一视频生成传播框架——GenProp
  • 多维方向性增强分割通过大规模视觉模型实现|文献速递-视觉大模型医疗图像应用
  • 【Linux探索学习】第二十五弹——动静态库:Linux 中静态库与动态库的详细解析
  • 远程和本地文件的互相同步
  • 自然语言处理之jieba分词和TF-IDF分析
  • 探索式测试
  • 服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例
  • ISP各模块功能介绍
  • Python 数据建模完整流程指南
  • 深入学习RocketMQ
  • 国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档
  • 数据结构二叉树-C语言
  • Python基于YOLOv8和OpenCV实现车道线和车辆检测
  • 代码随想录算法训练营第六十天|KM94.城市间货物运输Ⅰ|KM95.城市间货物运输Ⅱ|KM96.城市间货物运输Ⅲ