同步操作将从 Rb/18级嵌入式三级项目 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
title: 大三上学期-嵌入式三级项目-stm32
date: 2020-12-23 13:48:06
tags: stm32
代码已经放到了我的 Gitee上面了,需要的小伙伴可以自己去下载,欢迎交流。
直接上图:
说一下大体的思路吧:
MuliButton 支持如下的按钮事件: |事件|说明| |:—:|:—:| |PRESS_DOWN |按键按下,每次按下都触发| |PRESS_UP |按键弹起,每次松开都触发| |PRESS_REPEAT| 重复按下触发,变量repeat计数连击次数| |SINGLE_CLICK |单击按键事件| |DOUBLE_CLICK| 双击按键事件| |LONG_RRESS_START| 达到长按时间阈值时触发一次| |LONG_PRESS_HOLD| 长按期间一直触发|
3.温湿度采集:该项目使用的温湿度传感器为:DHT11,大家应该都见过也都使用过,一个国产的很普遍的单总线数字温湿度传感器。优点:简单易上手,占用引脚少,仅需一根时钟线便可以操控。缺点:精度太低只有0.1%,不太灵敏,相应时间长。
4.24C02的使用:俗称EEPROM,可以将数据保存到该ic中,具有掉电不丢失的特性。 根据AT24C02的 Datasheet 可知AT24C02有2K bit,即256B,分为32页,每页8个字节,结合数据手册和原理图可以得知,板载AT24C02的读地址为0xA2,写地址为0xA3。
可以看见整个main函数轮询执行了任务调度处理。
可见任务定时器在系统滴答定时器终端回调中调用,每1ms任务定时器会进行递减。
①:包含头文件 ②:定义一个按键结构(按键对象) ③:初始化按键对象
MultiButton支持的按钮事件枚举如下:
在5ms任务中调用按键的心跳函数:
MultiButton中每个按键都抽象为了一个按键对象,每个按键对象是独立的,系统中所有的按键对象使用单链表串起来。
其中在变量后面跟冒号的语法称为位域,使用位域的优势是节省内存。
MultiButton自己定义了一个头指针:
//button handle list head.
static struct Button* head_handle = NULL;
用户插入一个按键对象的代码如下:
button_start(&button1);//启动按键
/**
* @brief Start the button work, add the handle into work list.
* @param handle: target handle strcut.
* @retval 0: succeed. -1: already exist.
*/
int button_start(struct Button* handle)
{
struct Button* target = head_handle;
while(target) {
if(target == handle) return -1; //already exist.
target = target->next;
}
handle->next = head_handle;
head_handle = handle;
return 0;
}
第一次插入时,因为head_hanler 为 NULL,所以只需要执行while之后的代码.
如果再插入一个buuton2按键对象:
---MultiButton设计思想来源Mculover666,感谢大佬让我学习到很多。
大体上项目的需求就是这些,这次三级项目丰富了我个个人经验,让我尝试用一些之前没有用到的方式去快速开发一个嵌入式项目,使用状态机方式去开发,以及分时调度器提高裸机开发的效率。同时感谢像Mculover666,0x1abin这样的大佬的贡献。我的代码以及开源到我的git,如有错误欢迎指正,共同进步!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。