基于FREERTOS的STM32多功能手表(软件设计)

目录

前言

程序现象 

项目背景

项目介绍

目前版本实现的功能

设计到的freertos知识

使用到的硬件

硬件连线图

实现思路

任务调度流程图

​编辑

 任务具体操作导图         

 代码讲解

freertos初始化

按键中断回调函数

显示时间任务

显示菜单任务

其它任务(ShowCalendarTask)

总结

开源链接



前言

        Hey,我是Moyiji,一个嵌入式小白,也是一名大三在读生,这是我的第一篇博客,在这里我将向你介绍过去一段时间我开发这个项目的经历和感受。并且通过这篇博客来记录自己的开发过程。

程序现象 

my_watch_video

项目背景

         在四月份我使用标准库在裸机上复刻了谷歌小恐龙游戏和一个类似于天天酷跑炫飞模式的游戏,并且写了一个多级菜单,在那之后我就决定写一个游戏机项目来集成这些游戏。同时我也在学习韦东山的FREERTOS教程,学习完FREERTOS之后我就感觉这玩意儿用来做这个项目实在太合适了!于是我便决定使用FREERTOS来开发这个项目。不过在五一前夕到五月中旬这段时间里我有足足四门考试要准备, 因此进度便搁置了一段时间。在考完试之后,我便着手开发这个项目(考试中也有缓慢推进)。在写了无数个bug之后,我终于完成了这个项目的软件开发(不过我转换了方向,从做游戏机换成了做多功能手表)。       

项目介绍

        基于FREERTOS的STM32多功能手表:正如标题所言,这个项目所使用的硬件平台是STM32(stm32f103c8t6),然后使用freerrtos来管理和协同各个任务。

目前版本实现的功能

  • 时间显示
  • 多级菜单显示
  • 万年历(显示2024年份的日历)
  • 模拟手电
  • 温湿度显示
  • 电子闹钟
  • 设置(开关系统声音)

        这里补充一下,本来我是准备加上血氧监测模块的,因为之前花了十几块大洋买了一个MAX30102一直在搁置,但是当我移植完之后发现这个驱动运行需要占用10K左右的RAM!这你受得了,因为c8t6只有20k RAM, 再加上freertos的占用,就,就没内存了,,,因此只能放弃这个功能了。。。

设计到的freertos知识

  • 任务管理(创建,删除,状态转换)
  • 软件定时器(创建,启动,停止)
  • 队列(创建,写队列,读队列)
  • 二值信号量(创建,give,take)
  • 中断管理(中断与任务通信)
  • 资源管理(主要是堆栈大小的处理)

使用到的硬件

  • stm32f103c8t6(20k RAM, 64KROM)
  • 0.96寸oled显示屏(黄蓝双色, u8g2库)
  • 四个独立按键(中断中写入队列与任务协调)
  • 无源蜂鸣器(按键或者电子时钟触发)
  • DHT11(显示温湿度信息)

硬件连线图

OLED KEY 蜂鸣器 DHT11
SCL(PB6) key.rdata(PB11) I/O(PA8) DAT(PA1)
SDA(PB7) key.ldata(PB10)
key.updata(PB1)
key.exdata(PB0)

实现思路

         在freertos初始化时创建除默认任务之外的七个任务,分别是显示时间task,菜单task以及五个功能task,在默认任务中创建两个软件定时器,分别是时间显示Timer和电子闹钟Timer,在中断中向队列写入数据与各个任务完成通信并响应操作,在显示时间task中挂起其它六个任务,在按键触发任务切换时恢复下一个任务,并且挂起自己。

任务调度流程图

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫忆己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值