[stm32]stm32滴答定时器构建多组软件定时器

2024-01-09 02:38

本文主要是介绍[stm32]stm32滴答定时器构建多组软件定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

stm32有很多组定时器,处理一般业务已经足够用了。
但是杀鸡焉用牛刀,对时间精度要求不高的场合可以考虑使用软件定时器,使用方便,快捷。
怎么实现呢?其实并不难,就是使用回调函数即可。

1. 先将使用到的参数用结构体封装一下吧
#define get_time HAL_GetTick()typedef void (*pfunc)(u8);enum task_tmr_t{STMR_A=1,STMR_B,STMR_C,STMR_D,STMR_E};typedef struct STMR_t_{u32	start_value;u32 overtime_value;u8	timer_id;u8	busy;u8  repeat;u8	param;	
}stmr_TypeDef;
2. 将要使用的软件定时器注册一下
pfunc tmr_func;stmr_TypeDef soft_tmr;bool stmr_reg(u8 tmr_id, u32 overtime, u8 repeat, pfunc ptmr, u8 param){if(false == soft_tmr.busy){soft_tmr.timer_id = tmr_id;soft_tmr.start_value = get_time;soft_tmr.overtime_value = overtime;soft_tmr.repeat = repeat;soft_tmr.busy = true;soft_tmr.param = param;tmr_func = ptmr;return true;}return false;
}
3. 回调一下
void stmr_isr(void){tmr_func(soft_tmr.param);if(soft_tmr.repeat > 0){soft_tmr.repeat--;soft_tmr.start_value = geit_time;}else{memset(&soft_tmr, 0, sizeof(soft_tmr));tmr_func = NULL;}
}
4. 要回调的任务函数
void stmr_stop(u8 tmr_id){if(true == soft_tmr.busy){if((tmr_id == soft_tmr.timer_id) || (tmr_id ==STMR_ALL)){memset(&soft_tmr, 0, sizeof(soft_tmr));tmr_func = NULL;}}
}void STMR_A_task(void){printf("task a running\n");
}void STMR_B_task(void){printf("task b ruinning\n");
}void STMR_C_task(void){printf("task c ruinning\n");
}
5. 主程序框架
int main(void){BSP_Init();stmr_reg( ... );while(1){...if(true == soft_tmr.busy){if(get_time - soft_tmr.start_value > soft_tmr.overtime_value)stmr_isr();}...}
}

经过测试,软件定时器还是比较稳定的,上面的程序中虽然定义了五个定时器,但是只能分时复用,不能同时进行叠加使用。但是稍加改动就可以进行叠加使用了。只需把pfunc tmr_func;改为pfunc tmr_func[STMR_CNT];再对每一组定时器进行管理即可。

这篇关于[stm32]stm32滴答定时器构建多组软件定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/585675

相关文章

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口