基于FreeRTOS的STM32多功能手表(软件设计)
项目简介
本项目是一个基于FreeRTOS操作系统的STM32多功能手表的软件设计。该项目旨在利用FreeRTOS的任务管理和资源调度功能,实现一个功能丰富的智能手表。手表的主要功能包括时间显示、多级菜单、万年历、模拟手电、温湿度显示和电子闹钟设置等。
项目背景
在四月份,作者使用标准库在裸机上复刻了谷歌小恐龙游戏和一个类似于天天酷跑炫飞模式的游戏,并写了一个多级菜单。在学习了FreeRTOS之后,作者决定使用FreeRTOS来开发这个项目,以实现更高效的任务管理和资源调度。
主要功能
- 时间显示:实时显示当前时间。
- 多级菜单:通过按键操作切换不同的功能菜单。
- 万年历:显示2024年份的日历。
- 模拟手电:提供手电筒功能。
- 温湿度显示:实时显示当前环境的温湿度信息。
- 电子闹钟设置:可以设置和开关系统声音的电子闹钟。
硬件平台
- STM32F103C8T6:主控芯片,具有20KB RAM和64KB ROM。
- 0.96寸OLED显示屏:用于显示时间、菜单和其他信息。
- 四个独立按键:用于用户输入和任务切换。
- 无源蜂鸣器:用于按键和电子闹钟的声音提示。
- DHT11传感器:用于检测环境的温湿度。
软件设计
FreeRTOS知识应用
- 任务管理:创建、删除和状态转换。
- 软件定时器:创建、启动和停止。
- 队列:创建、写队列和读队列。
- 二值信号量:创建、give和take。
- 中断管理:中断与任务通信。
- 资源管理:主要是堆栈大小的处理。
任务调度流程
在FreeRTOS初始化时,创建除默认任务之外的七个任务,分别是显示时间任务、菜单任务以及五个功能任务。在默认任务中创建两个软件定时器,分别是时间显示定时器和电子闹钟定时器。在中断中向队列写入数据与各个任务完成通信并响应操作。
代码讲解
- FreeRTOS初始化:创建显示时间定时器和电子闹钟定时器,以及默认任务和其他七个任务。
- 按键中断回调函数:在中断回调函数中将数据写入队列,实现按键消抖和任务切换。
- 显示时间任务:初始驱动并挂起其他任务,实时显示时间。
- 显示菜单任务:创建队列显示图像,读队列,图标移动,状态机进行任务切换。
- 其它任务:包括显示日历、模拟手电、温湿度显示和电子闹钟设置等。
总结
本项目是作者第一次尝试使用FreeRTOS进行项目开发,FreeRTOS的强大功能使得任务管理和资源调度变得更为高效。通过本项目,作者不仅提升了自己的编程能力,还深入理解了FreeRTOS的基本原理和应用。
开源链接
本项目的源代码和相关文档已开源,欢迎大家下载和使用。