feat: 实现智能按摩器完整功能 (定时/语音/电机/显示)

- 新增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等
This commit is contained in:
2026-02-17 23:52:17 +08:00
parent 4c37261cc8
commit b883e0a7f9
16 changed files with 1802 additions and 184 deletions

281
README.md
View File

@@ -1,95 +1,280 @@
# SmartMassager_STM32
STM32 智能按摩控制系统项目
STM32 智能按摩控制系统项目
## 项目概述
本项目基于 STM32 微控制器开发的智能按摩控制系统集成了串口屏显示、FreeRTOS 实时操作系统、多种传感器控制等功能
本项目基于 STM32 微控制器开发的智能按摩控制系统集成了串口屏显示、FreeRTOS 实时操作系统、MP3语音提示、定时倒计时、多档位电机控制等功能。系统支持完整的按摩操作流程包括定时设定、档位调节、加热控制等并通过语音提示提供友好的用户交互体验
## 硬件平台
- 主控芯片STM32 系列微控制器
- 显示屏JC 系列串口屏(通过 USART1 通信)
- 操作系统FreeRTOS 实时操作系统
- **主控芯片**: STM32F103XE 系列微控制器
- **显示屏**: JC 系列串口屏(通过 USART1 通信,波特率 115200
- **MP3模块**: 通过 USART3 通信(波特率 9600
- **电机控制**: TIM3 PWM 输出(三档 PWM75% / 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** | 加热开关 | 切换加热开/关状态 |
## 软件架构
### 主要模块
1. **屏幕驱动模块** (`screen.c`)
1. **MP3驱动模块** (`mp3_driver.c`)
- 完整的 MP3 驱动协议实现
- 支持播放控制命令封装
- 自动校验和计算
2. **屏幕驱动模块** (`screen.c`)
- 串口屏底层驱动实现
- 支持基本绘图功能(点、线、矩形、圆形
- 分区显示功能Zone1/Zone2/Zone3
- GBK 字符显示支持
- 基本绘图功能(点、线、矩形、圆形)
- 图片显示功能
2. **任务调度模块**
- 基于 FreeRTOS 的多任务管理
- 各子系统任务协调运行
3. **电机驱动模块** (`motor_driver.c`)
- 三档 PWM 控制
- 启动加速功能
- 降档冲击优化
- 精确通道控制
3. **日志系统**
4. **GBK文本模块** (`gbk_text.c`)
- GBK 编码文本常量定义
- 支持动态时间字符串生成
5. **任务调度模块** (`freertos.c`)
- 基于 FreeRTOS 的多任务管理
- Motor 任务500ms 周期)
- Screen 任务10ms 周期)
- 定时器 Tick 处理1秒周期
6. **日志系统**
- 集成 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_Box()` - 绘制矩形框
- `Screen_Line()` - 绘制直线
#### 电机控制
- 多档位速度控制
- 启动加速功能
- 过流、超温保护
#### 按键处理
- 防抖处理
- 四个功能按键:
- M_KEY: 加档
- M_KEYC7: 减档
- HOT_KEY: 热敷开关
- TIME_KEY: 定时功能
#### 音频播放
- MP3音频播放支持
- TF卡文件读取
- `Screen_ShowZone1_Time()` - 显示Zone1时间状态
- `Screen_ShowZone2_Gear()` - 显示Zone2档位状态
- `Screen_ShowZone3_Heat()` - 显示Zone3加热状态
## 开发环境
- IDE: STM32CubeIDE
- 编译器: GCC ARM
- 调试工具: ST-LINK
- **IDE**: STM32CubeIDE
- **编译器**: GCC ARM
- **构建工具**: CMake
- **调试工具**: ST-LINK
## 构建说明
1. 克隆项目到本地
2. 使用 STM32CubeIDE 导入项目
3. 配置目标芯片型号
3. 配置目标芯片型号STM32F103XE
4. 编译项目
5. 通过 ST-LINK 下载到目标板
### 依赖文件
- `CMakeLists.txt` - CMake 构建配置
- `CMakePresets.json` - CMake 预设配置
- `STM32F103XX_FLASH.ld` - 链接脚本
- `startup_stm32f103xe.s` - 启动文件
## 使用说明
1. 上电后系统自动初始化
2. 屏幕显示设备名称和加载界面
3. 初始化完成后进入主操作界面
4. 通过按键控制按摩功能
### 基本操作流程
## 注意事项
1. **上电启动**
- 系统自动初始化
- 播放欢迎语音MP3文件1
- 屏幕显示加载界面
- 请确保电源电压符合要求
- 避免在潮湿环境中使用
- 定期检查连接线路
- 如遇异常情况请立即断电
2. **设定时间**
- 按下 `TIME_KEY` 选择定时时长10/20/30分钟
- 屏幕显示设定时间
- 播放相应语音提示
## 版本信息
3. **启动按摩**
- 按下 `M_KEY` 启动按摩(一档)
- RUN_LED 开始闪烁
- 开始倒计时
- 当前版本: v1.0.0
- 发布日期: 2024年
4. **调节档位**
- `M_KEY` 加档(一档→二档→三档)
-`M_KEYC7` 减档(三档→二档→一档→停止)
- 每次操作播放语音提示
5. **加热控制**
-`HOT_KEY` 开关加热
- 屏幕显示加热状态
- 播放语音提示
6. **定时结束**
- 倒计时归零
- 自动停止所有设备
- 播放"定时结束,按摩结束"语音
### 语音文件索引
| 索引 | 语音内容 | 触发时机 |
|------|----------|----------|
| 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运行指示和错误提示
- ✅ 完善操作安全机制
## 许可证
本项目仅供学习和参考使用。
---
**注意**: 使用前请确保所有硬件连接正确,电源电压符合要求,避免在潮湿环境中使用。