首页 > 其他分享 >【STM32】利用SysTick定时器定时1s

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

时间:2025-01-11 15:59:47浏览次数:3  
标签:1s SystemCoreClock STM32 定时器 SysTick 定时 1000

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定时
    }
}

标签:1s,SystemCoreClock,STM32,定时器,SysTick,定时,1000
From: https://blog.csdn.net/Backlight__/article/details/145067415

相关文章

  • STM32之LWIP网络通讯设计-上(十四)
    STM32F407系列文章-LWIP-Network(十四)目录前言一、以太网简介二、网络协议简介1.OSI模型2.TCP/IP协议3.协议层报文间的封装与拆封4.lwIP1.lwIP特性2.lwIP开源网址3.lwIP参考书籍三、通讯连接示意四、STM32内部ETH 1.内部MAC2.内部DMA五、PHY驱动芯片1.功......
  • SENT协议深度解析-----使用STM32发送SENT信号
    一、SENT信号的结构在上一期中,我们介绍了SENT信号的接收,这一期我们来讲解一下SENT信号的发送,在讲解之前,我们需要先了解一下SENT信号的结构,SENT信号分为两种类型:快速通道类型、慢速通道类型,慢速通道分为短串行数据、增强串行数据,一共三种信号结构发送方式,在汽车MCU领域中,SEN......
  • 【STM32】MCU运行多段代码,Flash程序更新的实现方式之一
    【STM32】MCU运行多段代码,Flash程序更新的实现方式之一文章目录BootLeader跳转到BootLeader跳转到Flash其他位置MCU运行多段代码其他程序更新烧录方式附录:Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时......
  • STM32垃圾分类系统设计与实现
    引言垃圾分类作为现代环保和资源回收的重要环节,已经成为了各地政府和环保组织高度关注的议题。合理的垃圾分类不仅能够有效减少垃圾的填埋量,还能提高资源的回收利用率,减少环境污染。随着物联网技术的发展,智能垃圾分类系统的设计和实现成为了当前研究的热点。本文将介绍如......
  • STM32驱动0.96寸OLED基于 “软/硬IIC协议”
    一、简介      本章讲解模拟IIC和硬件IIC驱动方式,软件IIC可以使用任意GPIO进行模拟,比较灵活,但是速率和稳定性不如硬件IIC,硬件IIC由单片机硬件自主完成时序,并支持多种速率模式,在资源充足情况下推荐使用硬件IIC。二、0.96寸OLED模块介绍    2.1简介:  ......
  • STM32之两种驱动 “旋转编码器“ 方式
    一、简介       本章讲解旋转编码器驱动方式,一种为普通GPIO边沿检测方式,一种为定时器编码器方式,各有优缺点,当资源不足时可以选择第一种但是精度不如定时器编码器方式,资源充足时建议时间定时器方式较优且可靠。二、旋转编码器原理    2.1介绍:  ......
  • STM32MP157AAA开发板通过GPIO实现模拟I2C驱动获取光照,红外,接近传感器的数据
    实验目标:硬件:STM32MP157AAA开发板+拓展板管脚:拓展板光照,红外,接近传感器(AP3216C)I2C1_SCL对应核心板PF14,I2C1_SDA对应核心板PF15,可知从机地址为0X1E。梳理:I2C各信号下SCL与SDA的机制可查看STM32MP157AAA开发板通过GPIO实现模拟I2C驱动获取温湿度传感器数据-CSDN博客光照,红......
  • STM32MP157AAA开发板通过GPIO模拟SPI驱动通信控制数码管
    实验目标:硬件:STM32MP157AAA开发板+拓展板管脚:拓展板上数码管(M74HC595),由下图可知,数码管通过SPI与核心板通信,时钟(S)CK对应PE12、主机输出从机输入(MOSI)对应PE14、主机输入从机输出(MISO)对应PE13、从设备选择(CSN)对应PE11,由于当前电路SPI只有一个从设备,因此在硬件层面上将PE11常置为......
  • NRF24L01模块STM32-调试心得:报错 1E
    前言环境:芯片:STM32F103C8T6Keil:V5.24.2.0调试时我们会尝试读取STATUS寄存器状态来了解模块目前的状态,但是我们在读取时至为0x1E,这就很纳闷,根据寄存器描述0x1E:对应寄存器4:1,关系有:达到最大重发次数        RXFIFO为空,第四位很好理解也......
  • 【芳心科技】E. 基于STM32的便携式电脉冲理疗仪
    实物效果图:实现功能:采用STM32单片机作为控制核心,其采用先进的ARM内核。采用XL6007升压电路产生高压,采用高压三极管控制多种电脉冲产生,频率1HZ-400HZ之间,脉冲电压小于100V,安全可靠。采用LCD12864显示屏作为人机交互,能够直观显示理疗仪当前工作状态和相关参数。可以通过按键......