STM32用一个定时器执行多任务写法

2023-12-16

文章目录

main.c

#include "stm32f4xx.h"

uint32_t Power_check_times;			  //电量检测周期
uint32_t RFID_Init_Check_times;  	//RFID检测周期

int main()
{
	Timer_Init(167,999);
	Power_check_times =  gt_get() + 200;//一开始最少是200ms+gt_get()的时间,所以最低是200ms
	RFID_Init_Check_times = gt_get() + 200;
	while(1)
	{				
//下面的两个if是这个文章想表达的具体实现什么不用管,本文章目的是用一个定时器,进行200ms进入执行程序
		if(gt_get_sub(Power_check_times) == 0) 	//目标时间200ms,然后定时器计时到了200ms则进来一次	
		{
			Power_check_times =  gt_get() + 200;			//电池电量检测,进来后让目标时间在+200,等程序出去后,就可以等待下一次的200ms测量
			Power_Check();
		} 
		if(gt_get_sub(RFID_Init_Check_times) == 0) 			
		{
			RFID_Init_Check_times =  gt_get() + 200;	//RFID初始化检测
			if(Rc522_GetLinkFlag() == 0)					
			{
				Readcard_daivce_Init();
				MP_SPK = !MP_SPK;
			} 
			else
			{
				MP_SPK = 0;
				LED4 = !LED4;
				Rc522_LinkTest();
			}
		 } 
}

Timer.c

#include "stm32f4xx.h"
#include "Timer.h"

volatile uint32_t global_times = 0;
volatile uint32_t delay_ms_const = 0;

void Timer_Init(uint16_t arr,uint16_t psc)//内部时钟168MHZ
{
	TIM_TimeBaseInitTypeDef TIM_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10,ENABLE);
	
	TIM_InitStructure.TIM_Period = arr;
	TIM_InitStructure.TIM_Prescaler = psc;
	TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_InitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM10,&TIM_InitStructure);

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	TIM_ITConfig(TIM10,TIM_IT_Update,ENABLE);
	TIM_Cmd(TIM10, ENABLE);
}


void TIM1_UP_TIM10_IRQHandler(void)//1ms进来一次,计数值global_times+1,global_times=1就代表为1ms
{
	if(TIM_GetITStatus(TIM10,TIM_IT_Update) == SET)
	{
			global_times++;
	}
	TIM_ClearITPendingBit(TIM10,TIM_IT_Update);
}

uint32_t gt_get(void)//获取计数值global_times
{
	return global_times;
}

uint32_t gt_get_sub(uint32_t c)
{
	if(c > global_times)//如果目标时间c大于计时时间global_times,则c=c-global_times,也就是算出它们的差值
		c -= global_times;
	else											//如果目标时间c小于等于计时时间global_times,则让返回值为0
		c = 0;
	return c;
}




Timer.h

#ifndef __TIMER_H__
#define __TIMER_H__

#include "stm32f4xx.h"                  // Device header

extern volatile uint32_t global_times;
extern volatile uint32_t delay_ms_const;

void Timer_Init(uint16_t arr,uint16_t psc);
uint32_t gt_get_sub(uint32_t c);
uint32_t gt_get(void);

#endif



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32用一个定时器执行多任务写法 的相关文章

  • 二叉树(接口函数的实现)

    今天继续来分享的是二叉树 我们废话不多说 直接来看下面的几个接口函数 然后我们把他们实现 我们就掌握二叉树的二分之一 今天粉丝破千了 属实有点高兴了 typedef char BTDataType typedef struct Binary
  • 八大排序(插入排序 | 选择排序 | 冒泡排序)

    在我们内存中我们一般会有一些没有顺序的数据 我们成为内排序 而今天分享八大排序的是时间复杂度为O N 2 的插入排序 选择排序和教学意义比较强的冒泡排序 插入排序 这是插入排序的动图 通过动图我们也是可以看到我们的插入排序的思想 从当前的位
  • Jmeter 测试 MQ 接口怎么做?跟我学秒变大神!

    MQ message queue 消息队列 是基础数据结构 先进先出 的一种典型数据结构 一般用来解决应用解耦 异步消息 流量削锋等问题 实现高性能 高可用 可伸缩和最终一致性架构 MQ 主要产品包括 RabbitMQ ActiveMQ R
  • 【教程】如何将重要文件进行混淆和加密

    怎么保护苹果手机移动应用程序ipa中文件安全 ios应用程序存储一些图片 资源 配置信息 甚至敏感数据如用户信息 证书 私钥等 这些数据怎么保护呢 可以使用iOS提供的Keychain来保护敏感数据 也可以使用加密技术 或者使用Ipa Gu

随机推荐

  • iOS-打包上架构建版本一直不出现

    iOS开发过程中 打包上架苹果审核是一个不可或缺的环节 说实话 这个问题我遇见两次了 为了让自己长点记性 决定写下来 首先 列举几种情况 1 iPa包上传至App store后 一个小时内不显示构建版本 等待15分钟 25分钟是正常的 2
  • 模拟使用相位分布PWM(PDPWM)技术的五电平(NPC)研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现
  • Nature | 中国陆地的碳汇量有多少?

    文献信息 题目 The size of the land carbon sink in China 来源 Nature 时间 2022
  • 【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机

    文章目录 前言 1 Mcsmanager安装 2 创建Minecraft服务器 3 本地测试联机 4 内网穿透 4 1 安装cpolar内网穿透 4 2 创建隧道映射内网端口 5 远程联机测试 6 配置固定
  • 网络安全专业期末考试题整理

    一 单选题 二 多选题 三 简答题 四 计算题
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • leetcode每日一题

    https leetcode cn problems subtree of another tree 这道题需要使用我们之前做过的一道题 那道题我们是来判断两颗树是不是相同的树 这里我们就需要用上这个接口函数 然后思路就是遍历左树和右树来看
  • C/C++---------------LeetCode第509. 斐波那契数

    斐波那契数列 题目及要求 暴力递归 备忘录的递归 动态规划 题目及要求 斐波那契数 通常用 F n 表示 形成的序列称为 斐波那契数列 该数列由 0 和 1 开始 后面的每一项数字都是前面两项数字的和 也就是 F 0 0 F 1 1 F n
  • Pytest自动化测试框架:mark用法---测试用例分组执行

    pytest中的mark mark主要用于在测试用例 测试类中给用例打标记 只能使用已注册的标记名 实现测试分组功能 并能和其它插件配合设置 测试方法 执行顺序等 如下图 现在需要只执行红色部分的测试方法 其它方法不执行 设置步骤如下 1
  • 当面试问你接口测试时,不要再说不会了!

    很多人会谈论接口测试 到底什么是接口测试 如何进行接口测试 这篇文章会帮到你 01 前端和后端 在谈论接口测试之前 让我们先明确前端和后端这两个概念 前端是我们在网页或移动应用程序中看到的页面 它由 HTML 和 CSS 编写而成 让我们看
  • 什么是自动化测试,看完你就懂了!

    随着互联网技术的飞速发展 软件本身的规模和复杂度也是逐步增加 为了保证软件项目能够保质保量交付到客户手中 软件测试环节就显得非常重要了 它可以看作是软件项目交付给客户最后一道安全保证 今天给大家聊聊软件测试当中自动化测试相关的知识 希望对大
  • 2023自动化测试框架大对比:哪个更胜一筹?

    所谓工欲善其事 必先利其器 在进行自动化测试时 选择一个合适的框架是至关重要的 因为一个好的测试框架可以大大提高测试效率 减少我们很多工作量 在选择框架之前 我们通常需要对不同的框架进行对比 以便找到最适合我们需求的框架 对框架进行对比的目
  • Python+Appium自动化测试大法,让你的测试效率飞升,绝不等待!封装元素定位方法超详解!

    在 appium自动化测试 脚本运行的过程中 因为网络不稳定 测试机或模拟器卡顿等原因 有时候会出现页面元素加载超时元素定位失败的情况 但实际这又不是bug 只是元素加载较慢 这个时候我们就会使用元素等待的方法来避免这种情况 增加代码的健壮
  • 手动测试 VS 自动化测试:哪一个更适合你的项目?

    什么是手动测试 手动测试是一种不借助任何工具 自动化 来执行测试的测试 在这个测试中 测试人员为代码编写测试用例 对软件进行测试 并给予关于该软件的最终报告 手动测试是耗时的测试 因为它是由人工完成的 并且存在人为错误的可性 进行手动测试以
  • Stm32最小系统板电路设计

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • app性能测试怎么做?内容全在这里了

    1 app性能测试 提到APP的性能测试这个概念比较笼统 因为APP的性能测试分为服务端的性能和手机端的性能测试 1 1 app服务端性能测试 app服务端的性能测试 利用jmeter等工具模拟并发 压测服务器系统 服务端性能测试 一般可以
  • 【计算机网络概述】第一章:概论 1.2什么是网络边缘

    学习目标 网络结构 端系统的客户 服务器模式与对等模式 两种面向网络实施的服务 前言 在第一章 我们学习了什么是 Internet 网络 计算机网络和互联网的知识点 但是由于计算机网络的知识点非常的抽象 内容又多 所以我们要反复的练习 记忆
  • 元素定位,年轻人在 Web UI 自动化成长道路上吃的第一个亏

    元素定位 对于 Web UI 自动化而言 绝对是大家成长道路上的一道绊脚石 很多初学者 都 死 在了元素定位上 从而失去了学习的兴趣 导致职业规划不得不半途而废 那么 今天 我们就使用 Katalon Studio 让工具帮我们进行元素定位
  • 软件测试面试题:如何测试App性能?

    为什么要做App性能测试 如果APP总是出现卡顿或网络延迟的情况 降低了用户的好感 用户可能会抛弃该App 换同类型的其他应用 如果APP的性能较好 用户体验高 使用起来丝滑顺畅 那该应用的用户粘性也必然会提高 那我们该如何做App性能测试
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer