- 新增MP3语音模块驱动,集成18个语音提示,支持播放/停止/音量调节 - 实现0/10/20/30分钟循环定时倒计时,实时显示剩余时间,定时结束自动停机 - 优化电机控制:一档力度提升至75%,降档冲击时间延长至800ms,降档时触发100%冲击防卡顿 - 屏幕显示重构为分区动态更新:时间状态(Zone1)/档位(Zone2)/加热(Zone3),性能优化 - 新增LED指示:运行时RUN_LED以500ms周期闪烁,无效操作ERR_LED亮1秒 - 操作逻辑改进:所有操作需先设定时间,否则播放"请先设定时间"并亮ERR_LED - 加热控制由GPIO改为PWM(TIM1_CH1),占空比300 - 调整USART3波特率为9600适配MP3模块 - FreeRTOS任务优化:Motor周期500ms,Screen周期10ms,新增定时器秒Tick处理 - 完善开发文档:MP3集成指南、校验和验证脚本、文件重命名工具等 新增文件:mp3_driver.h/c, 多项开发文档 修改文件:freertos.c, gbk_text.h/c, motor_driver.c, screen.h/c, usart.c, gpio.c等
SmartMassager_STM32
STM32 智能按摩器控制系统项目
项目概述
本项目基于 STM32 微控制器开发的智能按摩器控制系统,集成了串口屏显示、FreeRTOS 实时操作系统、MP3语音提示、定时倒计时、多档位电机控制等功能。系统支持完整的按摩操作流程,包括定时设定、档位调节、加热控制等,并通过语音提示提供友好的用户交互体验。
硬件平台
- 主控芯片: STM32F103XE 系列微控制器
- 显示屏: JC 系列串口屏(通过 USART1 通信,波特率 115200)
- MP3模块: 通过 USART3 通信(波特率 9600)
- 电机控制: TIM3 PWM 输出(三档 PWM:75% / 85% / 95%)
- 加热控制: TIM1 CH1 PWM 输出(占空比 300)
- 操作系统: FreeRTOS 实时操作系统
- 调试工具: ST-LINK
功能特性
核心功能
1. 定时倒计时系统
- 支持 0→10→20→30→0 分钟循环定时设定
- 实时倒计时显示,动态更新剩余时间
- 定时结束自动停止所有设备(电机、加热)
- 运行中按下定时键可取消定时并停止
2. MP3语音提示系统
- 18个预设语音文件,覆盖所有操作场景
- 支持播放控制:播放指定索引曲目、停止、暂停、设置音量、切换音源
- 自动校验和计算,确保通信可靠性
- 语音提示包括:欢迎语、定时设定、档位变化、加热开关、错误提示等
3. 多档位电机控制
- 三档力度调节:75%(一档) / 85%(二档) / 95%(三档)
- 启动冲击时间:1500ms
- 降档平滑过渡:800ms 适应时间 + 100% PWM 冲击
- 精确的 PWM 通道控制:
Motor_StartAll()/Motor_StopAll() - 优化一档力度从 65% 提升至 75%,改善低速按摩效果
4. 加热控制
- PWM 控制加热输出(TIM1 CH1,占空比 300)
- 开关状态实时显示
- 配合语音提示反馈
5. 分区屏幕显示
- Zone1: 显示时间状态(停止 / 设定时间 / 剩余时间倒计时)
- Zone2: 显示按摩档位(停止 / 一档 / 二档 / 三档)
- Zone3: 显示加热状态(开启 / 关闭)
- 动态生成剩余时间 GBK 字符串("时间:剩余XX分")
- 状态变化时才更新屏幕,优化性能
6. LED指示灯
- RUN_LED: 运行时以 500ms 周期闪烁,停止时熄灭
- ERR_LED: 无效操作时亮 1 秒提示
- 低电平点亮控制方式
7. 操作安全机制
- 所有操作(按摩、加热)需先设定时间,否则提示错误
- 未设定时间操作时播放语音"请先设定时间"并点亮 ERR_LED
- 完善的错误处理和用户提示
按键功能
| 按键 | 功能 | 说明 |
|---|---|---|
| TIME_KEY | 定时设定 | 循环切换:0→10→20→30→0 分钟 |
| M_KEY | 加档 | 从当前档位递增(0→1→2→3),到三档时提示"已到最大档位" |
| M_KEYC7 | 减档 | 从当前档位递减(3→2→1→0),减到0档时停止按摩 |
| HOT_KEY | 加热开关 | 切换加热开/关状态 |
软件架构
主要模块
-
MP3驱动模块 (
mp3_driver.c)- 完整的 MP3 驱动协议实现
- 支持播放控制命令封装
- 自动校验和计算
-
屏幕驱动模块 (
screen.c)- 串口屏底层驱动实现
- 分区显示功能(Zone1/Zone2/Zone3)
- GBK 字符显示支持
- 基本绘图功能(点、线、矩形、圆形)
- 图片显示功能
-
电机驱动模块 (
motor_driver.c)- 三档 PWM 控制
- 启动加速功能
- 降档冲击优化
- 精确通道控制
-
GBK文本模块 (
gbk_text.c)- GBK 编码文本常量定义
- 支持动态时间字符串生成
-
任务调度模块 (
freertos.c)- 基于 FreeRTOS 的多任务管理
- Motor 任务(500ms 周期)
- Screen 任务(10ms 周期)
- 定时器 Tick 处理(1秒周期)
-
日志系统
- 集成 EasyLogger 日志框架
- 多级别日志输出
核心 API
定时器 API
Timer_CanOperate()- 检查定时器是否可操作Timer_GetRemainingSeconds()- 获取剩余秒数Timer_GetMinutes()- 获取设定的分钟数Timer_IsRunning()- 检查定时器是否运行中
MP3播放 API
MP3_Play(uint8_t index)- 播放指定索引曲目MP3_Stop()- 停止播放MP3_Pause()- 暂停播放MP3_SetVolume(uint8_t volume)- 设置音量(0-30)MP3_SetSource(uint8_t source)- 设置音源
电机控制 API
Motor_SetGear(uint8_t gear)- 设置档位(0-3)Motor_StartAll()- 启动所有电机通道Motor_StopAll()- 停止所有电机通道Motor_GetCurrentGear()- 获取当前档位
屏幕控制 API
Screen_Init()- 屏幕初始化Screen_Clear()- 清屏Screen_DrawText16_GBK()- 绘制16号字体GBK文本Screen_DrawText24_GBK()- 绘制24号字体GBK文本Screen_ShowZone1_Time()- 显示Zone1时间状态Screen_ShowZone2_Gear()- 显示Zone2档位状态Screen_ShowZone3_Heat()- 显示Zone3加热状态
开发环境
- IDE: STM32CubeIDE
- 编译器: GCC ARM
- 构建工具: CMake
- 调试工具: ST-LINK
构建说明
- 克隆项目到本地
- 使用 STM32CubeIDE 导入项目
- 配置目标芯片型号(STM32F103XE)
- 编译项目
- 通过 ST-LINK 下载到目标板
依赖文件
CMakeLists.txt- CMake 构建配置CMakePresets.json- CMake 预设配置STM32F103XX_FLASH.ld- 链接脚本startup_stm32f103xe.s- 启动文件
使用说明
基本操作流程
-
上电启动
- 系统自动初始化
- 播放欢迎语音(MP3文件1)
- 屏幕显示加载界面
-
设定时间
- 按下
TIME_KEY选择定时时长(10/20/30分钟) - 屏幕显示设定时间
- 播放相应语音提示
- 按下
-
启动按摩
- 按下
M_KEY启动按摩(一档) - RUN_LED 开始闪烁
- 开始倒计时
- 按下
-
调节档位
- 按
M_KEY加档(一档→二档→三档) - 按
M_KEYC7减档(三档→二档→一档→停止) - 每次操作播放语音提示
- 按
-
加热控制
- 按
HOT_KEY开关加热 - 屏幕显示加热状态
- 播放语音提示
- 按
-
定时结束
- 倒计时归零
- 自动停止所有设备
- 播放"定时结束,按摩结束"语音
语音文件索引
| 索引 | 语音内容 | 触发时机 |
|---|---|---|
| 1 | 欢迎语 | 系统启动 |
| 2 | 设定10分钟 | 定时键按下 |
| 3 | 设定20分钟 | 定时键按下 |
| 4 | 设定30分钟 | 定时键按下 |
| 5 | 取消定时 | 定时键取消 |
| 6 | 按摩已停止 | 取消定时 |
| 7 | 按摩开始 | 首次启动按摩 |
| 8 | 一档 | 加档到一档 |
| 9 | 二档 | 加档到二档 |
| 10 | 三档 | 加档到三档 |
| 11 | 已到最大档位 | 尝试加到四档 |
| 12 | 一档 | 降档到一档 |
| 13 | 二档 | 降档到二档 |
| 14 | 按摩停止 | 降档到零档 |
| 15 | 加热已开 | 打开加热 |
| 16 | 加热已关 | 关闭加热 |
| 17 | 请先设定时间 | 未设定时间操作 |
| 18 | 定时结束,按摩结束 | 倒计时结束 |
项目结构
SmartMassager_STM32/
├── Core/ # 核心代码
│ ├── Inc/ # 头文件
│ │ ├── mp3_driver.h # MP3驱动头文件
│ │ ├── motor_driver.h # 电机驱动头文件
│ │ ├── screen.h # 屏幕驱动头文件
│ │ ├── gbk_text.h # GBK文本定义
│ │ └── freertos.h # FreeRTOS配置
│ └── Src/ # 源文件
│ ├── mp3_driver.c # MP3驱动实现
│ ├── motor_driver.c # 电机驱动实现
│ ├── screen.c # 屏幕驱动实现
│ ├── gbk_text.c # GBK文本实现
│ ├── freertos.c # FreeRTOS任务实现
│ └── main.c # 主程序
├── Drivers/ # STM32 HAL驱动
├── Middlewares/ # 中间件(FreeRTOS)
├── Development_Docs/ # 开发文档
│ └── Serial_Screen_Docs/ # 串口屏相关文档
│ ├── LIST/ # MP3集成文档和脚本
│ └── 测试记录/ # 功能测试记录
├── build/ # 构建输出目录
├── CMakeLists.txt # CMake配置
├── anmo.ioc # STM32CubeMX项目文件
└── README.md # 项目说明文档
文档资源
开发文档
Development_Docs/Serial_Screen_Docs/LIST/mp3_integration_summary.md- MP3集成文档Development_Docs/Serial_Screen_Docs/LIST/mp3_usage_example.py- MP3使用示例Development_Docs/Serial_Screen_Docs/LIST/rename_mp3_files.py- MP3文件重命名脚本Development_Docs/Serial_Screen_Docs/LIST/verify_mp3_checksum.py- MP3校验和验证脚本
测试记录
Development_Docs/测试记录/- 功能测试记录目录
技术支持
如有问题请联系开发团队或查看相关技术文档。
版本信息
- 当前版本: v2.0.0
- 发布日期: 2025年2月
- 主要更新:
- ✅ 完整实现定时倒计时功能
- ✅ 集成MP3语音提示系统
- ✅ 优化电机控制(一档力度提升、降档平滑)
- ✅ 新增分区屏幕显示
- ✅ 实现LED运行指示和错误提示
- ✅ 完善操作安全机制
许可证
本项目仅供学习和参考使用。
注意: 使用前请确保所有硬件连接正确,电源电压符合要求,避免在潮湿环境中使用。
Description
Languages
C
97.5%
Assembly
1.9%
HTML
0.3%
C++
0.2%