Skip to content

YJQ486/course-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

course-project

嵌入式课程设计

基于STM32F103C8T6的智能手表设计

2026 嵌入式系统课程设计项目 | 基于 FreeRTOS 实时操作系统

📋 项目概述

本项目是嵌入式系统课程设计作业,以 STM32F103C8T6 最小系统板 为核心主控,采用 FreeRTOS 抢占式多任务内核进行调度,集成 OLED 显示、MPU6050 六轴传感器、旋转编码器、蓝牙通信模块,实现智能手表的时间显示、运动计步、人机交互、无线数据同步等完整功能。

项目完成课程大纲全部基本要求,并实现扩展要求 1(编码器多级菜单)、扩展要求 2(蓝牙上位机同步)、扩展要求 4(运动计步与数据记录),不包含 PCB 设计。

✨ 功能特性

基础功能

  • 片内 RTC 精准走时:复用主控片内 RTC 外设 + 板载 32.768kHz 晶振(LSE)走时,无需外置 RTC 芯片;RTC 位于独立后备域,休眠(STOP)期间仍持续走时,唤醒后时间不丢失
  • 多页面显示:1.3 寸 OLED 屏幕,支持时间页、传感器数据页、计步统计页切换
  • 六轴传感采集:MPU6050 实时读取加速度与陀螺仪原始数据
  • 多任务调度:FreeRTOS 抢占式内核,任务间通过消息队列与互斥信号量安全通信
  • 独立电源系统:3.7V 锂电池供电,支持 Type-C 充电,搭配分立元件一键开机电路

扩展功能

  1. 旋转编码器交互:EC11 编码器 + 定时器硬件正交解码,实现多级菜单流畅翻页、参数调整与按键确认
  2. 蓝牙无线同步:JDY-31 经典蓝牙模块,配合 PC 端图形化上位机,实现运动数据与时间的双向无线同步
  3. 运动计步算法:基于加速度计的动态阈值 + 波峰检测滤波算法,过滤日常杂散抖动,支持步数统计、历史数据 RAM 缓存与内部 Flash 掉电持久化
  4. 低功耗管理:10s 无操作自动熄屏并进入 STOP 低功耗模式,支持编码器按键 / MPU6050 抬腕中断(EXTI)唤醒(STOP 下编码器旋转不参与唤醒)

🛠️ 硬件清单

模块 型号/规格 说明
主控单元 STM32F103C8T6 最小系统板 核心控制单元,由课程提供
显示模块 1.3 寸 OLED 128×64(软件 I2C) 界面与数据显示输出(软件 I2C 规避 F1 硬件 I2C 死锁)
运动传感器 MPU6050 六轴模块(I2C 接口) 姿态检测、计步数据采集
输入交互 EC11 旋转编码器(带微动开关) 菜单切换、数值调节与按键确认
无线通信 JDY-31 经典蓝牙模块(UART 接口) 与上位机进行无线数据交互
电源系统 3.7V 锂电池 + TP4056 充电模块 + XC6206 LDO 整机供电与锂电池充电管理
开机电路 SI2301 PMOS + S8050 NPN + 轻触按键 一键开关机控制逻辑
原型辅料 面包板、杜邦线、基础阻容件 电路原型搭建与调试

🧠 软件架构

FreeRTOS 任务规划

任务名称 优先级 触发方式 核心职责
Task_Power 4(最高) 超时触发 / 外部中断 电源状态监测、低功耗模式管理、唤醒事件处理
Task_Sensor 3(高) 20ms 定时周期 MPU6050 数据采样、计步算法运算、运动数据缓存
Task_UI 2(中) 事件驱动 多级菜单状态机维护、OLED 界面渲染刷新
Task_Comm 1(低) 数据队列触发 数据打包、蓝牙串口异步发送、上位机指令解析

核心技术点

  • OLED 软件 I2C + MPU6050 硬件 I2C1 双总线物理隔离,从根本上消除总线访问冲突;跨任务共享数据由消息队列与互斥锁保护
  • 定时器硬件正交解码,无阻塞高效处理编码器旋转输入
  • 动态阈值波峰检测计步算法,有效过滤日常抖动带来的误触发
  • 串口环形缓冲区设计,实现蓝牙异步无阻塞数据收发
  • 多级结构体菜单状态机,支持多层页面嵌套跳转与参数设置

📁 目录结构

📂 仓库目录结构

GitHub 仓库根目录采用模块化拓扑进行组织,具体架构如下:

SmartWatch_STM32
├── Hardware/    # 硬件资料(原理图、BOM清单)
├── Firmware/    # STM32CubeIDE 固件工程
│   ├── Core/    # 业务代码与 FreeRTOS 任务
│   ├── Drivers/ # HAL 库与外设驱动
│   └── FreeRTOS/# 操作系统内核
├── Host/        # 蓝牙上位机(Python)
├── Docs/        # 课程交付文档
└── README.md

🚀 快速开始

1. 硬件搭建

参考 Hardware/Schematic/ 目录下的原理图,在面包板上完成所有模块的接线,确认电源正负极无误后再上电测试。

2. 固件编译与烧录

  • 工具链:VSCode + CMake + Ninja + arm-none-eabi-gcc(工程已随仓库提供 CMakePresets.json 与工具链文件 Firmware/cmake/gcc-arm-none-eabi.cmake
  • 外设配置由 Firmware/SmartWatch.ioc(CubeMX 工程)生成;如需改引脚可参考 Firmware/CubeMX配置清单.md,应用层接入方式见 Firmware/集成说明.md
  • 编译(在 Firmware/ 目录下):
    cmake --preset Debug
    cmake --build --preset Debug
    生成的固件为 Firmware/build/Debug/SmartWatch.elf
  • 通过 ST-Link 调试器将 .elf 烧录至 STM32F103C8T6 最小系统板

3. 上位机使用

  • 安装 Python 依赖:pip install -r Host/requirements.txt(或 pip install pyserial pyqt5
  • 进入 Host/ 目录,运行 python watch_gui.py
  • 电脑配对蓝牙模块(JDY-31,出厂波特率 9600)后会生成一个串口,在下拉框选择该串口并连接,即可实时查看手表时间、步数与加速度数据,并可校时 / 请求同步

📅 开发进度

  • 阶段一(6.29 - 6.30):选题确认、物料采购、项目计划书提交
  • 🔄 阶段二(7.1 - 7.2):硬件原型搭建、底层驱动开发、系统设计文档提交
  • 阶段三(7.3 - 7.6):FreeRTOS 移植、核心功能开发、中期检查
  • 阶段四(7.7 - 7.8):全功能联调、上位机开发、验收准备
  • 阶段五(7.9 - 7.10):第一次验收、问题整改、最终验收

👥 团队分工

成员 负责方向 主要工作
周瑜亮 硬件与通信 硬件电路搭建、电源系统调试、蓝牙通信驱动、低功耗功能开发
郭浩哲 内核与算法 FreeRTOS 移植与任务调度、片内 RTC(LSE)走时与 Flash 持久化、运动计步算法开发
叶锦前 UI 与上位机 编码器驱动、多级菜单状态机、OLED 显示驱动、蓝牙上位机开发、项目文档维护

📄 许可证

本项目仅用于课程设计学习交流,代码部分遵循 MIT License。

About

嵌入式课程设计

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages