2-2 Systick系统定时器

按键的按下和放开存在抖动(可以使用两种方式对按键存在的抖动现象进行处理),一种是使用硬件的方式并联一个滤波电容(通过这种方式对按键进行抖动消除),一种是通过软件的方式(时间窗消抖)。

硬件消抖

软件消抖(通过时间窗的方式实现)

超过时间窗,在时间窗的位置进行判断,如果为高电平,或者低电平,判断响应的高低电平。

实现时间窗的方式

一种是通过延时死等的方式,但是会导致程序停留在这个位置,导致CPU无法执行其他的功能模块

通过定时器的方式可以解决这个问题(此次主要是使用systick系统定时器的方式来实现)

systick系统定时器

systick系统定时器

 

接口函数实现

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

  SysTick->LOAD  = ticks - 1;                                  /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                  /* Function successful */
}

Systick获取系统运行时间(systick.c)

#include "gd32f30x.h"                   // Device header
#include <stdint.h>


// 保存系统的运行时间
static uint64_t g_sysRunTime = 0;

// 系统定时器初始化
void Systic_Init(void){
	 //  实现1毫秒的定时中断,1毫秒产生一次中断
	 //  120M / 1000 
	 if(SysTick_Config(rcu_clock_freq_get(CK_AHB) / 1000)){
	       while(1);
	 }; 
}

// 定时中断服务函数,1ms产生一次中断
void SysTick_Handle(void){
   g_sysRunTime ++;
}

// 获取系统运行时间,返回值以1ms为单位
uint64_t GetSysRunTime(){
   return g_sysRunTime;
}

Systick.h

#ifndef _SYSTICK_H_
#define _SYSTICK_H_
#include <stdint.h>

// 系统定时器初始化
void Systic_Init(void);

// 定时中断服务函数,1ms产生一次中断
void SysTick_Handle(void);

// 获取系统运行时间,返回值以1ms为单位
uint64_t GetSysRunTime();


#endif

相关推荐

  1. STM32系统滴答定时器SysTick实现精确ms和us延时

    2024-05-13 18:42:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 18:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 18:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 18:42:02       82 阅读
  4. Python语言-面向对象

    2024-05-13 18:42:02       91 阅读

热门阅读

  1. matlab实现K均值聚类

    2024-05-13 18:42:02       35 阅读
  2. 图像下载的新趋势:Kotlin技术探索与实践

    2024-05-13 18:42:02       40 阅读
  3. SQL优化

    SQL优化

    2024-05-13 18:42:02      32 阅读
  4. MySQL中的查询语法

    2024-05-13 18:42:02       28 阅读
  5. 头歌C语言课程实验(递归函数、嵌套函数)

    2024-05-13 18:42:02       29 阅读
  6. centos7时间同步教程

    2024-05-13 18:42:02       30 阅读
  7. 传输层的TCP流量控制比数据链路层作用范围更广

    2024-05-13 18:42:02       30 阅读
  8. 音频提取特征

    2024-05-13 18:42:02       31 阅读