系统滴答定时器

news2024/11/24 18:38:31

定时器

目录

定时器

回顾GPIO、中断

定时器的分类

一、系统滴答定时器

应用:非阻塞轮询思想


回顾GPIO、中断

  • 理论:

GPIO:八种模式概念,能够根据电路的实际情况,去分析该使用哪一种模式。
上拉 下拉 浮空 模拟
推挽 开漏 复用推挽 复用开漏

中断:知道中断的概念、中断的运行流程、中断的优先级、中断在内核和 mcu 如何管理。
目的:提高实时性
流程:中断源发送中断请求,cpu 收到请求后,暂停当前的主流程、进行压栈,去执行中断,执行完毕之后回到刚才的位置、进行出栈,继续执行。
内核: 256 个中断(240+16) 256 个优先级 8 位数
单片机: 84 个中断(68(不同的单片机型号不一样)+16个系统异常)
16 个优先级
4 位数(高四位)
优先级:(数字越小,优先级越高)
抢占:高抢占可以打断低抢占
响应:抢占一致,并且同时发生,谁的响应高,谁就先执行。
优先级分组:决定抢占和响应各自的取值范围

  • 代码:

寄存器、库函数的使用
记住代码的框架、流程。
应用函数:每一个模块的应用函数都不一样

  • 初始化函数:

时钟 :
IO :
外设:每一个外设,都不一样。
中断:
其他:每一个模块,都不一样。

定时器的分类

-- 软件定时器:不存在硬件,系统模拟的

  • Systick:系统滴答定时器

-- 硬件定时器:硬件真实存在,8 个

  • 基础定时器:tim2 tim3
  • 通用定时器:tim4 tim5 tim6 tim7
  • 高级定时器:tim1 tim8

一、系统滴答定时器

Systick:处在内核里面

内核手册 150 页,计数器的计数范围:2 的 24 次方,最大值:2 的 24 次方减 1

-- 组成:

  • 计数器: 计数(周期性)
  • 时钟频率:计数的频率 如果是 1Mhz/s == 1M/s(1s计数1M次)
  • 重装载值:计数的最大值

时钟频率为1MHz/s = 1M/s (1s计数1M,100ms计数100000)(计一次数1/1Ms) 那么要100ms,要计数多少次?是100000

alt text

-- 计数方式:

  • 向上计数:从 0 计数到重装载值
  • 向下计数:从重装载值计数到 0

应用:非阻塞轮询思想

alt text

  • 采用系统滴答定时器可以达到非阻塞

  • 系统滴答函数

//SysTick_Config(72M);	//滴答定时器初始化 //()里面写的是重装载值 //时钟频率是72MHz //要想实现1s的定时,写72M
SysTick_Config(72K);	//定时1ms
  • 该定时器已经被系统初始化,所以不需要再次初始化 

    alt text

  • 找到定时器的中断服务函数

alt text

alt text

  • 这里设置的是定时1ms,所以每1ms进入一次中断服务函数,所以这里可以设置一个全局变量,每进入一次中断,该变量加1,这样就可以实现定时1ms。

-- 在.h文件中声明全局变量

alt text

  • 按键不会影响流水灯
int main()
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置优先级分组(相当于内核的第五组)因为在整个工程里只用分一次,所以写在main函数
	led_init();
	buzzer_init();
	relay_init();
	key_init();
	
//	buzzer_on();
//	Delay_nms(100);
//	buzzer_off();

	relay_on();
	Delay_nms(100);
	relay_off();
	
	uint8_t keyflag = 0;
	
	while(1)
	{
		SysTick_Config(72000);	//定时1ms
		
		while(1)
		{
			//非阻塞
			if(ledtime >= 1000)//1s后执行
			{
				ledtime = 0;
				water_led();
			}
			
			if(keytime>=50)//50ms执行一次
			{
				keytime=0;
				keyflag = get_key();
				switch(keyflag)
				{
					case 1: buzzer_on(); break;
					case 2: buzzer_off(); break;
				}
			}	
			
		}
    }
}

uint8_t waterflag = 0;
void water_led(void)
{

	switch(waterflag)
	{
		case 0:LED1(1);LED2(0);LED3(0);LED4(0);break;
		case 1:LED1(0);LED2(1);LED3(0);LED4(0);break;
		case 2:LED1(0);LED2(0);LED3(1);LED4(0);break;
		case 3:LED1(0);LED2(0);LED3(0);LED4(1);break;
	}
	waterflag++;
	waterflag %= 4;
}

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

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

相关文章

【2024W32】肖恩技术周刊(第 10 期):太阳神鸟

周刊内容: 对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率,每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

uboot无法使用nfs下载文件的问题

一、系统环境 见这篇博客。 二、问题描述 uboot使用nfs下载文件出现 “T T T”,一直无法下载 三、解决方法 编辑/etc/nfs.conf文件: sudo xed /etc/nfs.conf开启udp: udpy之后重启nfs服务器: sudo /etc/init.d/nfs-kernel-server re…

(学习记录)使用HAL库 STM32CubeMX——GPIO引脚输入配置

STM32F103C8T6的GPIO引脚输入配置 时钟配置 (学习记录)使用 STM32CubeMX——配置时钟(入门)https://blog.csdn.net/Wang2869902214/article/details/142423522 GPIO 引脚输出配置 (学习记录)使用 STM32…

优青博导团队指导-组蛋白甲基化修饰、实验设计、实验结果分析、测序分析及SCI论文辅助,精准高效,为农医学科研保驾护航!

组蛋白甲基化修饰工具(H3K4me3 ChIP-seq) 组蛋白甲基化类型也有很多种,包括赖氨酸甲基化位点H3K4、H3K9、H3K27、H3K36、H3K79和H4K20等。组蛋白H3第4位赖氨酸的甲基化修饰(H3K4)在进化上高度保守,是被研究最多的组蛋白修饰之一。

相亲交友网站为不同年龄层提供的服务差异

随着互联网技术的飞速发展,相亲交友网站已经成为现代人寻找伴侣的重要途径之一。无论是年轻人还是中老年人,都可以通过相亲交友网站找到自己的另一半。然而,不同年龄层的人在使用相亲交友网站时的需求和服务体验上存在显著差异。本文将探讨这…

【视频讲解】非参数重采样bootstrap的逻辑回归Logistic应用及模型差异Python实现

全文链接:https://tecdat.cn/?p37759 原文出处:拓端数据部落公众号 分析师:Anting Li 本文将深入探讨逻辑回归在心脏病预测中的应用与优化。通过对加州大学欧文分校提供的心脏病数据集进行分析,我们将揭示逻辑回归模型的原…

思维可视化:2024年四大创新思维导图软件排行榜!

在快节奏的现代生活中,如何提高工作效率、整理繁杂信息成为许多人关注的焦点。思维导图作为一种高效的信息梳理工具,越来越受到职场人士的喜爱。今天,就为大家推荐几款优秀的思维导图软件,助您轻松应对各种工作场景。 福昕思维导…

《程序猿之设计模式实战 · 适配器模式》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

C++(学习)2024.9.24

目录 容器 1.标准模板库STL 2.概念 3.顺序容器 (1)array数组 (2)vector向量 (3)list列表 (4)deque 队列 4.关联容器 5.迭代器 面向对象核心 继承 概念 构造函数 1.派生…

软件需求规格说明书编制模板参考(Doc原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需…

项目实战总结-Kafka实战应用核心要点

Kafka实战应用核心要点 一、前言二、Kafka避免重复消费2.1 消费者组机制2.2 幂等生产者2.3 事务性生产者/消费者2.4 手动提交偏移量2.5 外部存储管理偏移量2.6 去重逻辑2.7 幂等消息处理逻辑2.8 小结 三、Kafka持久化策略3.1 持久化文件3.2 segment 分段策略3.3 数据文件刷盘策…

Leetcode面试经典150题-39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…

加固与脱壳01 - 环境搭建

虚拟机 VMWare 多平台可用,而且可以直接激活,需要先注册一个账号 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro KALI 类Ubuntu系统,官方提供了 vmware 版本,直接下载就可以使用。…

【Python机器学习】NLP信息提取——提取人物/事物关系

目录 词性标注 实体名称标准化 实体关系标准化和提取 单词模式 文本分割 断句 断句的方式 使用正则表达式进行断句 词性标注 词性(POS)标注可以使用语言模型来完成,这个语言模型包含词及其所有可能词性组成的字典。然后,该…

三子棋小游戏

使用C语言编写代码,实现一个简单小游戏---三子棋 这里创建1个game.h文件,用来声明函数、宏的文件,一个game.c文件用来实现函数game(),一个play.h文件用来作为该游戏的源文件。 具体代码如下: …

利用大型语言模型轻松打造浪漫时刻

当情人节年年如约而至,每每都需费尽心思为对方营造一场令人难忘的仪式,却因缺乏创意与思路而倍感困扰。今天,我决定让大型语言模型为我们提供一些灵感和建议,让我们能够轻松实现这一目标。让我们开始行动吧!此前&#…

问卷是否要做信效度分析,5类信度与4类效度常用指标及评价标准

论文问卷进行分析时,大家是否有这样的疑惑—— 我收集的问卷是否需要进行信效度分析呢? 下面一文给大家梳理问卷信效度分析的相关内容,包括什么样的题目需要进行信效度分析、5类信度分析与4类效度分析常用指标及评价标准。 一、问卷是否需…

JW01二氧化碳传感器(串行通信 STM32)

目录 一、介绍 二、传感器原理 1.工作原理介绍 2.串口数据流格式 三、程序设计 main.c文件 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JW01-CO2检测模块是一种用于检测空气中二氧化碳浓度的传感器模块。它可以广泛应用于室内空气质量…

java算法OJ(1)位运算

目录 1.前言 2.正文 2.1位运算符号 2.1俩数相除 2.1.1题目 2.1.2示例 2.1.3题解 2.2二进制求和 2.2.1题目 2.2.2示例 2.2.3题解 2.3只出现一次的数字 2.3.1题目 2.3.2示例 2.3.3题解 2.4只出现一次的数字(进阶版) 2.4.1题目 2.4.2示例…

glb数据格式

glb数据格式 glb 文件格式只包含一个glb 文件,文件按照二进制存储,占空间小 浏览 浏览glb工具的很多,ccs,3D查看器等都可以,不安装软件的话用下面网页加载就可以,免费 glTF Viewer (donmccurdy.com) glb…