提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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;
}