STM32定时器实现毫秒/秒级任务框架

STM32定时器实现毫秒/秒级任务框架

  • CubeMX配置
  • 代码分享
  • 总结

这是一期代码思路分,通过定时器(以定时器10为例)实现规定时间间隔执行指定任务。。。。。。

CubeMX配置

在这里插入图片描述

  • 关于定时器的配置,这里不做介绍,不懂的可以看:夜深人静学32系列14——基本定时器

代码分享

  • main.c
void Proc2msTask(void)        //2ms任务
{if(Get_2ms_Flag() == 1)     //获取2ms标志位{Clear_2ms_Flag();      //清除2ms标志位//2mstask code}
}void Proc1sTask(void)       //1s任务
{if(Get_1s_Flag() == 1)     //获取1s标志位{Clear_1s_Flag();         //清除1s标志位//1stask code}      
}
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM10_Init();/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim10);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){Proc2msTask();       //调用2ms任务Proc1sTask();        //调用1s任务/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
  • Tim.c
static uint16_t Tim10_Count=0;
static uint8_t Tim10_2msFlag=0;
static uint8_t Tim10_1sFlag=0;uint8_t  Get_2ms_Flag(void)         //获取2ms标志位
{return Tim10_2msFlag;
}uint8_t Get_1s_Flag(void)           //获取1s标志位
{return Tim10_1sFlag;
}void Clear_2ms_Flag(void)           //清除2ms标志位
{Tim10_2msFlag = 0;
}void Clear_1s_Flag(void)           //清除1s标志位
{Tim10_1sFlag = 0;
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)        // 定时器溢出中断函数
{Tim10_Count++;if(tim_baseHandle->Instance == TIM10)                                   //判断是否为定时器10中断{HAL_TIM_Base_Start_IT(&htim10);                                     //开启定时器中断if(Tim10_Count%2==0)                                               //判断是否到达2ms{Tim10_2msFlag = 1; }                                                                   //判断是否到达1sif(Tim10_Count == 1000){Tim10_1sFlag = 1;Tim10_Count = 0;}}}

获取/清除标志位函数需要在对应的.h文件里面声明,这里不展示了

总结

  • 这样的代码框架,可以简化代码的复杂性,可读性大大增加
  • 同时也更好的整理的代码思路,很不错。。。。。
  • 这样子的实现方式,有点像操作系统里面的线程,指定时间执行某一任务,虽然我也不是很懂操作系统。。。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion - StableDiffusion WebUI 软件升级与扩展兼容

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134463035 目前,StableDiffusion WebUI 的版本是 1.6.0,同步更新 controlnet、tagcomplete、roop、easy-prompt-selector等…

合璧之光,共创辉煌|明道云伙伴大会2023圆满结束

2023年11月3日至11月4日,“合璧之光明道云伙伴大会2023”在上海星河湾酒店顺利举行,报名参会人数超过1800人。大会邀请到明道云标杆客户及合作伙伴分享组织落地零代码的经验及各行业领域解决方案,包括越秀集团、豫园股份、远大医药&#xff0…

君正X2100 读取CHIP_ID

每个处理器会有一个唯一的ID,这个ID可用做产品序列号,或其它。 X21000的CHIP_ID存放于芯片内部的efuse中,efuse是一次性可可编程存储器,初始值为全0,只能将0改为1,不能将1改为0。芯片出厂前会被写入一些信…

直击虎牙Q3财报:转身出击,一场应对不确定性的新战事

世界上唯一不变的,就是变化。 今年上半年,中国游戏市场销售仍在同比下降,游戏版号和行业政策都在趋严,游戏直播行业仍有较多不确定因素。延续过去的老路子,挖掘新的增量空间有限。 不过也要看到,行业出现…

Redis数据库双写一致性解决方案

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

解决requests 2.28.x版本SSL错误:证书验证失败

1、问题背景 在使用requests 2.28.1版本时,我进行HTTP post传输报告负载时,由于SSL验证设置为True,请求失败,错误如下:(Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certifi…

ROC 曲线:健康背景下的应用和解释

一、介绍 在医疗保健领域,做出明智的决策对于改善患者治疗结果、有效分配资源和设计有效的诊断测试至关重要。受试者工作特征 (ROC) 曲线是一个强大的工具,在评估诊断测试的性能、区分健康个体和患病个体以及优化医疗保健干预方面发挥着至关重要的作用。…

[C++历练之路]vector的介绍以及底层模拟实现

W...Y的主页 😊 代码仓库分享 💕 🍔前言: 我们学习了STL中的string以及其所有重要接口并进行了模拟实现,但是STL中包含的内容不止于此。学习了string之后继续学习STL中的vector,学习成本会大大降低&#…

LLM大模型 (chatgpt) 在搜索和推荐上的应用

目录 1 大模型在搜索的应用1.1 召回1.1.1 倒排索引1.1.2 倒排索引存在的问题1.1.3 大模型在搜索召回的应用 (实体倒排索引) 1.2 排序1.2.1 大模型在搜索排序应用(融入LLM实体排序) 2 大模型在推荐的应用2.1 学术界关于大模型在推荐的研究2.2 …

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium? Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用…

协同办公是什么?如何高效协同办公?读这篇就够了!

协同办公是指在工作中,团队成员通过共享信息、协作完成任务,实现高效的工作方式。它有助于促进团队成员之间的沟通、合作和协调,提升工作效率和质量。以下是一些实现高效协同办公的建议和好用的工具推荐。 首先,建立清晰的沟通渠…

二十一、数组(1)

本章概要 数组特性 用于显示数组的实用程序 一等对象返回数组 简单来看,数组需要你去创建和初始化,你可以通过下标对数组元素进行访问,数组的大小不会改变。大多数时候你只需要知道这些,但有时候你必须在数组上进行更复杂的操作…