9.物联网操作系统之软件定时器

一。软件定时器概念及应用

1.软件定时器定义

        就是软件实现定时器。

2.FreeRTOS软件定时器介绍

        如上图所示,Times的左边为设置定时器时间,设置方式可以为任务设置或者中断设置;Times的右边为定时器的定时响应,使用CallBack响应。 

3.FreeRTOS软件定时器工作原理

 软件定时器可以参考一下手机的闹钟。单次响应与多次响应。

二。软件定时器函数应用

1.功能需求

- 使用软件定时器功能完成闹钟功能设计

- 当闹钟到达时,可根据执行动作,触发相关的led亮灭

2.API

(1)xTimerCreate()创建一个定时器

(2)xTimerStart()启动定时器

(3) xTimerReset()重启软件定时器

(4)pvTimerGetTimerID()获取软件定时器标识符值

(5)xTimerChangePeriod()修改软件定时器周期值

 3.功能设计

 如上图所示,需要三个部分,用户在串口端设置时钟参数,RTC作为定时器的核心,并驱动GPIO

(1)串口命令定义

1.设置实时时钟 参数头:年-月-日,小时:分钟:秒 realtime:2019-2-19,16:31:00

2.设置闹钟参数 参数头:小时:分钟:秒,是否重复,操作LED动作 alarmtime:16:32:40,0,0

(2)功能业务划分

1.实时时钟:RTC功能开发

2.命令参数配置:串口解析功能开发

3.软件定时功能:软件定时器

4.多任务消息同步:消息队列

4.功能实现分析

(1)Cubemx配置

1.配置RTC

2.配置串口

3.创建任务

4.创建消息队列

(2)实时时钟读写操作

1.设置实时时钟

2.读取实时时钟

(3)命令解析任务

1.使能串口接收中断

2.串口中断发送消息队列

3.解析命令字符串

4.解析实时时钟字符串

5.解析闹钟字符串

6.计算闹钟与实时时钟间隔

(3)软件定时器回调函数

1.定时器打印实时时钟

2.闹钟回调函数

(4)LED处理任务

LED处理任务

5.功能实现详细步骤

1.Cubemx创建工程

注意:是在物联网操作系统第5节消息队列的基础之上创建工程。

(1)使能RCC低速时钟(LSE)

注意:上述在核心板原理图上

具体解释:

        软件实现定时器,需要连接实时时钟,上述图片的晶振是操作实时时钟的晶振,这个晶振连接在低速时钟上,所以我们需要配置低速时钟。 

 (2)配置RTC

 (3)时钟配置为低速的外部时钟

2.FREERTOS配置

(1)软件定时器的配置

(2) 创建控制Led的消息队列

 (3)RTC时钟的创建

有一个定时打印的实时功能,所以创建一个RTC的时钟

 6.步骤:

1.RTC配置

(1)RTC.h的设置

typedef struct{RTC_TimeTypeDef RtcTime;RTC_DateTypeDef RtcDate;
}RTCTimeDates;void SetRTC(RTCTimeDates *pRTCTimeDate);
RTCTimeDates GetRTC(void);

(2)RTC.c的配置

void SetRTC(RTCTimeDates *pRTCTimeDate){if (HAL_RTC_SetTime(&hrtc, &pRTCTimeDate->RtcTime, RTC_FORMAT_BIN) != HAL_OK){Error_Handler();}if (HAL_RTC_SetDate(&hrtc, &pRTCTimeDate->RtcDate, RTC_FORMAT_BIN) != HAL_OK){Error_Handler();}
}RTCTimeDates GetRTC(void){RTCTimeDates	RTCTimeDate;if (HAL_RTC_GetTime(&hrtc, &RTCTimeDate.RtcTime, RTC_FORMAT_BIN) != HAL_OK){Error_Handler();}if (HAL_RTC_GetDate(&hrtc, &RTCTimeDate.RtcDate, RTC_FORMAT_BIN) != HAL_OK){Error_Handler();}printf("Real Time:%d-%d-%d %d:%d:%d\n",RTCTimeDate.RtcDate.Year + 2000,RTCTimeDate.RtcDate.Month,RTCTimeDate.RtcDate.Date,RTCTimeDate.RtcTime.Hours,RTCTimeDate.RtcTime.Minutes,RTCTimeDate.RtcTime.Seconds);return RTCTimeDate;
}

2.FREERTOS配置

(1)配置宏

//Ԯࠚޓ˕buff
#define MESSAGE_BUFF_SIZE 50
//ledޓ˕buff
#define LED_MESSAGE_BUFF_SIZE 20
//ʵʱʱדؖػԮͷ
#define REALTIME "realtime"
//ŖדؖػԮͷ
#define ALARMTIME "alarmtime"
//msתۻ
#define ST0MS 1000ul
#define MT0MS (ST0MS*60)
#define HT0MS (MT0MS*60)
#define DT0MS (HT0MS*24)

(2)解析

  for(;;){//每次读取消息之前,把索引初始化为0u8Index = 0;//1、一直等待接收消息,第一个消息应该放在消息缓冲区的第一个元素上if(xQueueReceive(CmdQueueHandle,&u8CmdBuff[u8Index++],portMAX_DELAY)==pdPASS){while(xQueueReceive(CmdQueueHandle,&u8CmdBuff[u8Index++],50)){}u8CmdBuff[u8Index] = '\0';//保证一包完整字符串信息vParseString(u8CmdBuff);//完成解析以后,要清空接收缓冲区,不然会出现问题memset(u8CmdBuff,0,20);}}

(3)

其余都在FREERTOS.c中,暂时没有解决

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

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

相关文章

OLAP ModelKit Crack,ADO.NET和IList

OLAP ModelKit Crack,ADO.NET和IList OLAP ModelKit是一个多功能的.NET OLAP组件,用C#编写,只包含100%托管代码。它具有XP主题的外观,并能够使用任何.NET数据源(ADO.NET和IList)。借助任何第三方组件(尤其是图表组件)呈现数据的能力扩展了产品…

MySQL alter命令修改表详解

目录 ALTER TABLE 语法 ALTER TABLE 实例 添加一列 添加多列 重命名列 修改列定义 修改列名和定义 添加主键 删除列 重命名表 修改表的存储引擎 结论 在使用表的过程中,如果您需要对表进行修改,您可以使用 ALTER TABLE 语句。通过 ALTER TAB…

春秋云镜 CVE-2020-25540

春秋云镜 CVE-2020-25540 Thinkadmin v6任意文件读取漏洞 靶标介绍 ThinkAdmin 6版本存在路径查找漏洞,可利用该漏洞通过GET请求编码参数任意读取远程服务器上的文件。 启动场景 漏洞利用 1、未授权列目录poc 读取网站根目录Payload: http://think.admin/Think…

【LeetCode】105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 这道题也是经典的数据结构题了,有时候面试题也会遇到,已知前序与中序的遍历序列,由前序遍历我们可以知道第一个元素就是根节点,而中序遍历的特点就是根节点的左边全部为左子树,右…

4用opencv玩转图像2

opencv绘制文字和几何图形 黑色底图 显示是一张黑色图片 使用opencv画圆形 #画一个圆 cv2.circle(imgblack_img,center(400,400),radius100,color(0,0,255),thickness10) 画实心圆 只需要把thickness-1。 cv2.circle(imgblack_img,center(500,600),radius50,color(0,0,255),t…

C#垃圾回收器GC、析构函数(Finalize 方法)和Dispose

1、垃圾回收器GC GC(Garbage Collection)是.NET中的垃圾回收器。以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象,通过识别它们是否被引用,来确定哪些对象是已经死亡的,哪些仍需要被使用。已经不再被…

Python Web 开发 Flask 介绍

WEB开发是现在程序必会的技能,因为大部分软件都以Web形式提供,及时制作后台开发,或者只做前台开发,也需要了解Web开发的概念和特点。由于Python是解释性脚本语言,用来做Web开发非常适合,而且Python有上百种…

batch_softmax_loss

每个用户抽取一定数量的困难负样本,然后ssm def batch_softmax_loss_neg(self, user_idx, rec_user_emb, pos_idx, item_emb):user_emb rec_user_emb[user_idx]product_scores torch.matmul(F.normalize(user_emb, dim1), F.normalize(item_emb, dim1).transpose(…

K8s持久化存储(nfs网络存储)

数据卷 emptydir,是本地存储,pod重启,数据就不存在了,需要对数据持久化存储 1.nfs,网络存储 ,pod重启,数据还存在的

elasticsearch的副本和分片的区别

es/elasticsearch的副本和分片的区别 一:概念 (1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互…

【C语言学习——————预处理3000字讲解】

欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页:-_Joker_- 🏷️专栏:C语言 📜代码仓库:c_code 🌹🌹欢迎大佬们的阅读和三连关注,顺着评论回访🌹&#x1f339…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]

文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…

Spring接口InitializingBean的作用和使用介绍

在Spring框架中,InitializingBean接口是一个回调接口,用于在Spring容器实例化Bean并设置Bean的属性之后,执行一些自定义的初始化逻辑。实现InitializingBean接口的Bean可以在初始化阶段进行一些必要的操作,比如数据的初始化、资源…

2023巅峰极客比赛web复现

<1> unserialize(反序列化字符串逃逸) 下载 www.zip得到源码&#xff1a; my.php 存在 pull_it恶意类 反序列化时会执行 $this-x 这里有一层过滤 $this-x不能为字母数字 可以取反、异或绕过 下面来找一找怎么去触发反序列化 index.php 会对我们登录框输入的参数先…

算法leetcode|67. 二进制求和(rust重拳出击)

文章目录 67. 二进制求和&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 67. 二进制求和&#xff1a; 给你两个二进制字符串 a 和 b &a…

Markdown系列之Flowchat流程图

一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具&#xff0c;使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网&#xff1a;…

链表相关操作:移除重复节点、删除中间节点

题目1&#xff1a;移除重复节点 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 输入&#xff1a;[1, 2, 3, 3, 2, 1] 输出&#xff1a;[1, 2, 3] 解题思路&#xff1a; 1.创建一个set表&#xff0c;将第一次出现的节点值保存起来 2.定义pre指针保…

【暑期每日一练】 Epilogue

目录 选择题&#xff08;1&#xff09;解析&#xff1a; &#xff08;2&#xff09;解析&#xff1a; &#xff08;3&#xff09;解析&#xff1a; &#xff08;4&#xff09;解析&#xff1a; &#xff08;5&#xff09;解析&#xff1a; 编程题题一描述输入描述&#xff1a;输…

ad+硬件每日学习十个知识点(23)23.8.3(LDO 设计实例)(涉及到自控没听懂,学完自控再回来看)

文章目录 1.输入电容的选取&#xff08;两个&#xff0c;一个大电容&#xff0c;一个小电容&#xff09;2.输出电容的选取&#xff08;两个&#xff0c;一个大电容&#xff0c;一个小电容&#xff09;3.有些LDO需要输出的最小负载电流&#xff0c;所以需要接一个下拉电阻。4. 1…

CSharp中构造函数、析构函数和IDisposable使用细节探究

1. 先来一个简单的Demo 1.1. 定义一个类 public class ParentClass {public ParentClass(){Console.WriteLine("ParentClass构造函数");}public void DoSomeThing(){Console.WriteLine("ParentClass做点什么DoSomeThing()");}~ParentClass(){Console.Wri…