滴答定时器

news2024/11/25 13:15:33

1.定时与计数的本质 

2.滴答定时器的原理

1.向下计数,24位的计数器。滴答定时器属于内核。

每来一个脉冲计数值减一。当为零时。继续把重载寄存器给计数值。然后每来一个脉冲减一。

可以不停重复次操作。

 

控制寄存器:时钟的选择(bit2),是否开启中断(bit1),滴答定时器是否使能(bit0)

COUNTFLG(bit16)当计数值为0改为为1,当重新把重载寄存器给计数器。改为为0。

3.代码实现

systick.h


#ifndef SYSTICK_H
#define SYSTICK_H

#include <stdint.h>

/* configure systick */
void systick_config(void);
/* delay a time in milliseconds */
void inter_1ms(uint32_t count);
/* delay decrement */
void delay_decrement(void);

#endif /* SYSTICK_H */

systick.c



#include "gd32f10x.h"
#include "systick.h"
#include "LED.h"

volatile static uint32_t delay_reload;
volatile static uint32_t delay_value;

/*!
    \brief      configure systick
    \param[in]  none
    \param[out] none
    \retval     none
*/
void systick_config(void)
{
    /* setup systick timer for 1000Hz interrupts */
    if (SysTick_Config(SystemCoreClock / 1000U)){
        /* capture error */
        while (1){
        }
    }
    /* configure the systick handler priority */
    NVIC_SetPriority(SysTick_IRQn, 0x00U);
}

/*!
    \brief      delay a time in milliseconds
    \param[in]  count: count in milliseconds
    \param[out] none
    \retval     none
*/
void inter_1ms(uint32_t count)
{
    delay_reload = count;
		delay_value = delay_reload;
}

/*!
    \brief      delay decrement
    \param[in]  none
    \param[out] none
    \retval     none
*/
void delay_decrement(void)
{
    if (0U != delay_value){
        delay_value--;
    }else{
			LED1_Toggle();
			LED2_Toggle();
			delay_value = delay_reload;
		}
}

void SysTick_Handler(void)
{
    delay_decrement();
}

SysTick_Config函数是在core_cm3.h里

 */
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);   /* 重载值不是大于2的24次方 */

  SysTick->LOAD  = ticks - 1;  /* 设置重载值 */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0;                                     /* 清零计数值 */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | /* 滴答定时器时钟 */
                   SysTick_CTRL_TICKINT_Msk   | /* 开启中断 */
                   SysTick_CTRL_ENABLE_Msk;     /* 使能定时器 */
  return (0);    /* Function successful */
}

重载值是根据定时的时间来的:

每一次计数值减一是:1 / SystemCoreClock(频率)秒   转成毫秒:1000/SystemCoreClock.

这时计数值*1000/SystemCoreClock时间。因为计数值是重载值赋值的。

所以重载值*1000/SystemCoreClock 而重载值 SystemCoreClock / 1000 (SysTick_Config调用传递的)

两个相乘就是1ms。每一毫秒计数值为0.然后重载值又给计数值这样循环往复。

main.c 

#include "LED.h"
#include "systick.h"

int main(){
	LED_Init();
	systick_config();
	inter_1ms(1000);
	
	while(1){
		;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】通讯录系统实现 (保姆级教程,附源码)

目录 1、通讯录系统介绍 2、代码分装 3、代码实现步骤 3.1、制作菜单menu函数以及游戏运行逻辑流程 3.2、封装人的信息PeoInfo以及通讯录Contact结构体类型 3.3、初始化通讯录InitContact函数 3.4、增加联系人AddContact函数 3.5、显示所有联系人ShowContact函数 3.6、…

对比两个数组中 每个对应位置的元素大小 返回每个对比结果组成的列表 numpy.fmin()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 对比两个数组中 每个对应位置的元素大小 返回每个对比结果组成的列表 numpy.fmin() [太阳]选择题 请问代码中最后输出正确的是&#xff1f; import numpy as np a np.array([1, 3, 6, 8]) …

面试必考精华版Leetcode1372. 二叉树中的最长交错路径

题目&#xff1a; 代码&#xff08;首刷看解析)&#xff1a; class Solution { public:int maxAns;//dir 0 left,1 rightvoid dfs(TreeNode* root,bool dir,int len){maxAnsmax(maxAns,len);if(!dir){if(root->left) dfs(root->left,1,len1);if(root->right) dfs(roo…

给奶牛做直播之四

一、前言 给奶牛做直播之三 我们讲了怎么搭建RTMP直播服务器&#xff0c;前几天在折腾Android直播推拉流一直没个结果&#xff0c;顺手整理了一下Android如何加载SO动态库&#xff0c;本想顺着这条路把JNI、NDK、JSBridge、Python调用SO这些一起整理出来 &#xff0c;这样搞就…

叶工好容6-自定义与扩展

本篇主要介绍扩展的本质以及CRD与Operator之间的区别&#xff0c;帮助大家理解相关的概念以及知道要进行扩展需要做哪些工作。 CRD&#xff08;CustomerResourceDefinition&#xff09; 自定义资源定义,代表某种自定义的配置或者独立运行的服务。 用户只定义了CRD没有任何意…

28296-2012 含镍生铁 思维导图

声明 本文是学习GB-T 28296-2012 含镍生铁. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了含镍生铁的技术要求、试验方法、检验规则以及包装、储运、标志和质量证明书。 本标准适用于炼钢、铸造或合金材料中作为镍元素添加剂的…

C++实现集群聊天服务器

C实现集群聊天服务器 JSON Json是一种轻量级的数据交换模式&#xff08;也叫做数据序列化方式&#xff09;。Json采用完全独立于编程语言的文本格式来存储和表示数据。见解和清晰的层次结构使得Json称为理想的数据交换语言。易于阅读和编写。同时也易于支持机器解析和生成&am…

28384-2012 平台式平型网版印刷机 阅读笔记

声明 本文是学习GB-T 28384-2012 平台式平型网版印刷机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了平台式平型网版印刷机的术语和定义、型式与基本参数、要求、试验方法、检验规则、 标志、包装、运输与贮存。 本标准适用…

babel.config.js配置文件详解

文章目录 一、前言三、babel 详解四、拓展阅读 一、前言 项目开发阶段&#xff0c;使用可选链操作符 ?. 出现以下编译报错问题&#xff1a; 分析&#xff1a;由于可选链操作符 ?. 是ES2020&#xff08;即ES11&#xff09;中推出的新语法&#xff0c;允许我们不需要校验当前属…

【软考】系统集成项目管理工程师(五)项目立项管理【5分】

一、 项目建议书 1、定义 项目建议书又称为立项申请&#xff1b;建设单位向上级主管部门提交项目申请时所必须的文件&#xff0c;是对拟建项目提出的框架性的总体设想&#xff1b;是项目发展周期的初始阶段&#xff0c;是国家或上级主管部门选择项目的依据&#xff0c;也是可行…

取消excel表格中的隐藏行

Excel工作表中的行列隐藏了数据&#xff0c;如何取消隐藏行列呢&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 选中隐藏的区域&#xff0c;点击右键&#xff0c;选择【取消隐藏】就可以了 方法二&#xff1a; 如果工作表中有多个地方有隐藏的话&#xff0c;还是建…

【python基础】复杂数据类型-列表类型(元组)

1.初识元组 列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。 然而,有时候需要创建一系列不可修改的元素,元组可以满足这种需求 python将不能修改的值称为不可变的,而不可变的列表被称为元组。 元组看起来犹如列表,但使用圆括号而不是方括号来标识…

苹果文件传到mac电脑用什么软件?

在数字化时代&#xff0c;文件传输已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;苹果用户在将手机文件传输到电脑时&#xff0c;往往会面临一些困扰。曾经的“文件传输助手”并不能完全满足用户的需求。于是&#xff0c;很多人开始寻找更便捷的解决方案。在本文中…

Nginx 代理WebSocket

## √ map $http_upgrade $connection_upgrade {default upgrade; close; }## √ upstream websocket {server 127.0.0.1:9999 weight10 max_fails2 fail_timeout30s; }server {listen 8020;gzip on;gzip_min_length 1k;gzip_comp_level 9;gzip_types text/plain application/…

集合-set系列集合

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 5.集合-set系列集合-CSDN博客 文章目录 目录 系列文章目录 文章目录…

JS defineProperty详解

defineProperty Object.defineProperty():方法会在对象上直接定义个新的属性&#xff0c;或者修改现有的属性&#xff0c;并返回此对象 let obj {} //与我们使用 obj.name zhangsna 效果一样 但是用defineProperty定义的属性无法改变 或者删除 Object.defineProperty(obj,n…

【面试经典150 | 数组】加油站

文章目录 写在前面Tag题目来源题目解读解题方法方法一&#xff1a;暴力枚举方法二&#xff1a;一次遍历 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些…

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架&#xff0c;也是一个命令行的工具&#xff0c;比 unittest 测试框架更灵活。具有以下特点&#xff1a; 入门简单&#xff0c;易上手&#xff0c;官方文档丰富而且使用广泛&#xff0c;有大量的参数例子。 unittest…

2.索引操作

1. 创建索引 创建索引就等于创建数据库&#xff0c;ES使用put操作创建索引&#xff0c;我们创建一个students的索引&#xff0c;只需要发生put请求&#xff1a;http://127.0.0.1:9200/students 2. 查看索引 2.1 查看所有索引&#xff1a; 使用http://127.0.0.1:9200/_cat/ind…

抓包习讯云院校数据通过PHP解析导入数据库

前言 最近&#xff0c;打卡APP需要这个数据&#xff0c;通过抓包后发现这个数据是固定的&#xff0c;获取很简单&#xff0c;但是数据太多&#xff0c;手动导入不显示&#xff0c;于是分析了json格式后果断通过脚本完成 【推荐】 《【MQTT】Esp32数据上传采集&#xff1a;最…