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

【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++;           //每执行一次中断,该计数值加1
    if(SysTick_count > 1000)   //每进来一次中断时间为1ms,所以当计数到1000*1ms=1s,即为1s
    {
        SysTick_count = 0;     //将计数变量清0,使其执行下一次的1s定时
    }
}

3.完整代码

#include "stm32f10x.h"

#define SystemCoreClock    72 000 000    //72MHz

int SysTick_count = 0;        //SysTick定时器计数变量

void main()
{
    SysTick_Config(SystemCoreClock / 1000);    //预装载值
    while(1)
    {
        //此处可添加定时1s需要实现的功能
    }
}

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


http://www.kler.cn/a/488367.html

相关文章:

  • mybatisX插件的使用,以及打包成配置
  • Linux好用软件
  • 10_Redis数据结构-HyperLogLog基数统计
  • 《深度学习模型在鸿蒙分布式框架下的跨设备高效之旅》
  • Spring 项目 基于 Tomcat容器进行部署
  • 为深度学习引入张量
  • Linux MISC杂项设备驱动
  • 回顾 Tableau 2024 亮点功能,助力 2025 数据分析新突破
  • WebSocket在实时体育比分网站中的应用
  • javaEE初阶————多线程初阶(1)
  • Git 常用命令指南
  • Vue.js 组件开发指南
  • 模式识别-Ch3-极大似然估计
  • Euler 21.10(华为欧拉)安装oracle19c-RAC
  • Django SimpleUI 配置详解:SIMPLEUI_CONFIG 和常用图标
  • Windows系统安装ComfyUI
  • 简单易用的PDF工具箱
  • 编译时找不到需要的库,如何在PyCharm中为你的项目添加需要的库
  • OpenPCDet从环境配置到模型训练
  • CAN201 Introduction to Networking(计算机网络)Pt.5 网络安全
  • 【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)
  • 2025最新版Visual Studio Code安装使用指南
  • 学习反射5(获取成员方法)
  • 中学综合素质笔记3
  • 创建基本的 Electron 应用项目的详细步骤
  • 学习及笔记