wangbeihong b883e0a7f9 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等
2026-02-17 23:52:17 +08:00
```
2026-02-17 18:55:34 +08:00

SmartMassager_STM32

STM32 智能按摩器控制系统项目

项目概述

本项目基于 STM32 微控制器开发的智能按摩器控制系统集成了串口屏显示、FreeRTOS 实时操作系统、MP3语音提示、定时倒计时、多档位电机控制等功能。系统支持完整的按摩操作流程包括定时设定、档位调节、加热控制等并通过语音提示提供友好的用户交互体验。

硬件平台

  • 主控芯片: 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. 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运行指示和错误提示
    • 完善操作安全机制

许可证

本项目仅供学习和参考使用。


注意: 使用前请确保所有硬件连接正确,电源电压符合要求,避免在潮湿环境中使用。

Description
基于STM32的智能按摩仪器
Readme 105 MiB
Languages
C 97.5%
Assembly 1.9%
HTML 0.3%
C++ 0.2%