工程名称:魔法哔哔机
前言
如果你经常迷茫:
——不知道吃什么
——不知道选A还是B
那么,这个项目,或许能“拯救”你!!
我用STM32,做了一个“魔法”哔哔机!
它最大的亮点**是:**
——仅花30元,仅用一颗存储仅20KB SRAM的主控,就实现了11种功能!
那么问题就来了
这些界面、动画、字库和文本素材的总体积,显然无法全部放入主控有限的片内存储空间。
-
作者是如何利用外部Flash读取资源,并在仅20KB SRAM的条件下完成渲染的?
-
他如何设计架构?
-
如何基于FreeRTOS拆分系统任务?
-
……
话不多说,我们先介绍项目的具体功能,再一起看看,作者是怎么设计这个哔哔机的,又为什么这样设计!
*0***1
功能说明
”
它有11种玩法功能,和5大系统功能:
01
玩法功能
-
答案之书:迷茫的时候按一按
-
随机起名:如果你家最近有新出生的BB的话……
-
随机短语:不愁QQ微信的个性签名
-
求签:焊接前求个签,是上上签就奖励自己不焊了,是下下签就保护自己不焊了……bushi
-
滚动骰子:打麻将,做决定犹豫,带它就够了
-
出行随机推荐
-
美食随机推荐
-
影视随机推荐
-
玩什么随机推荐
-
干什么随机推荐
-
理论续航:8-7小时
无图无真相!
所有功能演示动图如下↓
左右滑动查看更多
02
系统功能
-
屏幕自定义:亮度调节、一键静音、画面翻转;
-
音频系统:内置《起风了》背景音乐,支持各类提示音效;
-
状态监测:实时采集锂电池电压,顶部状态栏直观展示剩余电量;
-
资源烧录:配套串口工具,批量烧录字库、图标、动画、文本素材至外部Flash。
-
支持定制:所有图标、开机动画、文本素材都支持自定义。
左右滑动查看更多
事实上,作者做这个项目的初衷,也就是发现市面上这类产品都卖100多,于是他就想挑战做一个低成本的更丰富产品级方案……
看起来,**这类方案不止有技术参考价值,商业参考价值也不低呢!*不过如果复刻作者的开源项目,需要遵循作者的开源协议,尊重原创,不可盲目商用哦*~
接下来,咱就看看它的硬件,软件设计方案
**
**
*0***2
硬件设计方案
”
01
设计图

原理图1

原理图2

PCB图

面板



面板实物图
02
硬件说明
整机硬件分为六大独立模块,布线采用双SPI总线互不干扰:
-
主控模块:STM32最小系统,保留SWD调试接口,上电重映射关闭JTAG,释放PB3/PB4用作按键;USB 5V经LDO稳压3.3V整机供电;
-
显示模块:SPI1驱动ST7789彩屏,PB11输出PWM信号调节背光,支持屏幕画面旋转切换;
-
Flash存储模块:独立SPI2总线挂载W25Q64,存储全部UI素材与文字资源,分离总线避免抢占带宽;
-
按键模块:PB3/PB4/PB5上拉输入,下降沿中断触发,自带软件消抖,操作无延迟;
-
发声模块:TIM4硬件PWM生成音频方波,CPU零中断开销,音色干净;
-
电源检测模块:PA3 ADC采集电池分压电压,实时换算电量并在顶部状态栏展示。
硬件基础,软件,就不基础了!
*0***3
软件架构
”
作者的架构设计很有趣:
-
MCU片内Flash主要存程序;
-
外部Flash负责存放大量静态资源;
-
运行时按需读取和渲染;
-
新增玩法时,可以主要扩充图片、文案和声音资源,不必更换主控。
同时,作者使用FreeRTOS,将系统拆分成按键、显示、Flash烧录、电量检测、音乐五个常驻任务,这样分配有这些好处:
-
电量检测应周期执行,不会影响操作;
-
Flash读写不会让系统长时间失去响应。
-
……
要知道,省事的做法,是将逻辑都写入一个巨大的while(1),但这会在增加功能时,出现状态判断失控的风险,也就是上述情况。
使用任务化设计,显然更适合这种拥有非常多功能,还只有单一芯片的作品。
虽然开始麻烦了点,但好处是扩展新玩法时更容易维护。且就算STM32F103资源紧张,也能实现1.9英寸彩屏、GIF动画和丰富内容。
或许这也是成本能压缩到30元的原因吧。
下面,就附上程序流程图、用户功能交互流程图、以及Flash烧录上位机的说明。
01
程序流程图
-
上电初始化全部外设与存储资源→加载本地配置参数→播放开机GIF动画→创建多任务并启动调度器;
-
按键任务实时监听输入,跳转对应UI界面;
-
显示任务循环渲染菜单与功能画面;
-
音乐任务按需加载、暂停背景音乐;
-
ADC定时刷新电量数据;
-
串口任务接收指令,完成Flash资源擦写。
因为用的MCU硬件资源确实有限,所有没用LVGL,自己手搓了个UI,要是用ESP32的话,那就不用担心这个了,直接上LVGL,至于为什么没用ESP32,主要是成本问题。

程序流程图
戳图片放大查看
02
用户功能交互流程图

戳图片放大查看
03
Flash存储架构图
因为MCU的片上Flash存储有限,所有的图标和文本字库等都放到外部Flash芯片中,以下是外部8MBFlash芯片的布局

04
最后,关于Flash烧录上位机
为了方便烧写图标字体文本等素材到外部Flash,我还做了一个专门用于外部Flash烧写的上位机软件工具(已经上传附录),通过串口配合STM32里面的程序,即可自动按上面Flash存储架构图中的位置自动烧写到对应的地址,方便之后程序去对应位置读取,不会出现乱码,操作简单,高效方便。


图21 图22 Flash烧录上位机界面
*0***4
开源网址
”
怎么样?你喜欢这个项目吗?你会想复刻吗?
如果你想给作者点赞or深入学习,欢迎前往开源网址~
开源网址:https://oshwhub.com/mikeytt/project\_zcblbphj

面板打样**免单**券:https://activity.szlcsc.com/panel\_free\_sample.html
领券活动
评论区
登录后即可参与讨论
立即登录