# 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** | 加热开关 | 切换加热开/关状态 | ## 软件架构 ### 主要模块 1. **MP3驱动模块** (`mp3_driver.c`) - 完整的 MP3 驱动协议实现 - 支持播放控制命令封装 - 自动校验和计算 2. **屏幕驱动模块** (`screen.c`) - 串口屏底层驱动实现 - 分区显示功能(Zone1/Zone2/Zone3) - GBK 字符显示支持 - 基本绘图功能(点、线、矩形、圆形) - 图片显示功能 3. **电机驱动模块** (`motor_driver.c`) - 三档 PWM 控制 - 启动加速功能 - 降档冲击优化 - 精确通道控制 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_ShowZone1_Time()` - 显示Zone1时间状态 - `Screen_ShowZone2_Gear()` - 显示Zone2档位状态 - `Screen_ShowZone3_Heat()` - 显示Zone3加热状态 ## 开发环境 - **IDE**: STM32CubeIDE - **编译器**: GCC ARM - **构建工具**: CMake - **调试工具**: ST-LINK ## 构建说明 1. 克隆项目到本地 2. 使用 STM32CubeIDE 导入项目 3. 配置目标芯片型号(STM32F103XE) 4. 编译项目 5. 通过 ST-LINK 下载到目标板 ### 依赖文件 - `CMakeLists.txt` - CMake 构建配置 - `CMakePresets.json` - CMake 预设配置 - `STM32F103XX_FLASH.ld` - 链接脚本 - `startup_stm32f103xe.s` - 启动文件 ## 使用说明 ### 基本操作流程 1. **上电启动** - 系统自动初始化 - 播放欢迎语音(MP3文件1) - 屏幕显示加载界面 2. **设定时间** - 按下 `TIME_KEY` 选择定时时长(10/20/30分钟) - 屏幕显示设定时间 - 播放相应语音提示 3. **启动按摩** - 按下 `M_KEY` 启动按摩(一档) - RUN_LED 开始闪烁 - 开始倒计时 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运行指示和错误提示 - ✅ 完善操作安全机制 ## 许可证 本项目仅供学习和参考使用。 --- **注意**: 使用前请确保所有硬件连接正确,电源电压符合要求,避免在潮湿环境中使用。