systick实现定时器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Systick使用场景

1.记录当前时间
2.通过时间窗配合状态机实现软件消抖

在这里插入图片描述
在这里插入图片描述

二、Systick介绍 ----一种中断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述具体运算解析:

如果在一个系统中,1秒钟的计数次数是120M(即120,000,000次),那么这意味着系统时钟的频率是120MHz(兆赫兹)。这是因为频率定义为每秒发生的周期数,所以120MHz表示每秒有120,000,000个周期。

如果你想要知道1毫秒(ms)内的计数次数,你可以简单地将1秒的计数次数除以1000,因为1秒等于1000毫秒。这样做的原因是基于比例关系:既然1秒可以计数120M次,那么1毫秒(1秒的千分之一)就可以计数120M的千分之一次。

计算公式如下: 1ms的计数次数=1秒的计数次数10001ms的计数次数=10001秒的计数次数​

将数值代入公式: 1ms的计数次数=120,000,0001000=120,0001ms的计数次数=1000120,000,000​=120,000

因此,1毫秒(ms)的计数次数是120,000次。

三、具体代码

#include <stdint.h>
#include "gd32f30x.h"

static volatile uint64_t g_sysRunTime = 0;

/**
***********************************************************
* @brief systick初始化
* @param
* @return 
***********************************************************
*/
void SystickInit(void)
{
	/*1ms 产生一次定时中断*/
	//rcu_clock_freq_get(CK_AHB)获取AHB的频率  HZ/s =  HZ/1000us
	if (SysTick_Config(rcu_clock_freq_get(CK_AHB) / 1000))
	{
		while (1);
	}
}

/**
***********************************************************
* @brief 定时中断服务函数,1ms产生一次中断
* @param
* @return 
***********************************************************
*/
void SysTick_Handler(void)
{
	g_sysRunTime++;
}

/**
***********************************************************
* @brief 获取系统运行时间
* @param
* @return 以1ms为单位
***********************************************************
*/
uint64_t GetSysRunTime(void)
{
	return g_sysRunTime;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值