Skip to content

AidenDJ/STM32_Phone

Repository files navigation

STM32 智能终端系统

项目简介

基于 STM32F103ZE 微控制器的多功能嵌入式智能终端系统,集成了游戏娱乐、文件管理、相册浏览、姿态显示、WiFi 连接等多种功能。系统采用模块化设计,具有类似智能手机桌面的用户界面,支持按键和红外遥控操作,具有良好的可扩展性和可维护性。

系统架构

系统框图

graph TB
    subgraph "STM32F103ZE 主控"
        MCU[STM32F103ZE<br/>主控制器]
    end
    
    subgraph "显示模块"
        LCD[TFT LCD<br/>显示屏]
        FONT[字库模块<br/>Font]
    end
    
    subgraph "输入模块"
        KEY[按键输入<br/>KEY0/1/2/UP]
        IR[红外遥控<br/>IR Receiver]
    end
    
    subgraph "通信模块"
        USART[串口通信<br/>USART1]
        WIFI[WiFi模块<br/>ESP8266]
    end
    
    subgraph "存储模块"
        FLASH[Flash存储<br/>内部Flash]
        SD[SD卡<br/>SDIO接口]
        FATFS[FatFS<br/>文件系统]
    end
    
    subgraph "传感器模块"
        MPU[MPU6050<br/>姿态传感器]
        RTC[RTC<br/>实时时钟]
    end
    
    subgraph "应用层"
        DESKTOP[手机桌面<br/>Phone_Desktop]
        TETRIS[俄罗斯方块<br/>Tetris Game]
        SETTINGS[设置菜单<br/>Settings]
        FILEMGR[文件管理器<br/>File Manager]
        ALBUM[相册浏览<br/>Photo Album]
        ATTITUDE[姿态显示<br/>Attitude Display]
    end
    
    subgraph "系统服务"
        SYSTICK[系统节拍<br/>SysTick]
        MEM[内存管理<br/>Malloc]
        PICLIB[图片库<br/>BMP/GIF/JPG]
    end
    
    MCU --> LCD
    MCU --> KEY
    MCU --> IR
    MCU --> USART
    MCU --> WIFI
    MCU --> FLASH
    MCU --> SD
    MCU --> MPU
    MCU --> RTC
    
    LCD --> FONT
    SD --> FATFS
    FATFS --> PICLIB
    
    DESKTOP --> TETRIS
    DESKTOP --> SETTINGS
    DESKTOP --> FILEMGR
    DESKTOP --> ALBUM
    DESKTOP --> ATTITUDE
    
    MCU --> DESKTOP
    MCU --> SYSTICK
    MCU --> MEM
Loading

硬件连接

  • TFT LCD: FSMC 接口,支持多种 LCD 驱动芯片(HX8357DN、ILI9341 等)
  • 按键: GPIOE (KEY0/1/2), GPIOA (KEY_UP)
  • 红外接收: GPIOB Pin9, EXTI9_5 中断
  • WiFi模块: ESP8266,通过串口通信
  • MPU6050: I2C 接口
  • SD卡: SDIO 接口
  • RTC: 内部 RTC 或外部 RTC 模块
  • LED: GPIO 控制

功能模块

1. 手机桌面 (Phone Desktop)

  • 主界面,提供应用图标网格布局
  • 支持 5 个应用入口:俄罗斯方块、设置、文件管理、相册、姿态显示
  • 状态栏显示时间、WiFi 状态等信息
  • 支持按键和红外遥控导航

2. 俄罗斯方块游戏 (Tetris)

  • 游戏功能:经典俄罗斯方块游戏实现
  • 主菜单:标题居中上方,菜单居中下方
  • 游戏区:右侧显示 10×20 网格游戏区域
  • 信息栏:左侧显示分数、下一方块预览、暂停状态
  • 方块操作
    • KEY2 / 红外左键:左移
    • KEY0 / 红外右键:右移
    • KEY_UP / 红外上键:旋转
    • KEY1 / 红外OK键:暂停/继续
    • 暂停时 KEY2:返回主菜单
  • 游戏特性
    • 满行自动消除并累计分数
    • 使用轻量伪随机数生成器生成方块序列
    • 差异更新绘制,减少闪烁
    • 游戏结束后显示 Game Over,按 KEY0/KEY2 返回菜单

3. 设置菜单 (Settings)

  • 调试模式:系统调试信息输出
  • WiFi 配置:WiFi 开关、SSID 配置、IP 显示
  • 开发者模式:模块化调试输出控制(WiFi、RTC、IR)

4. 文件管理器 (File Manager)

  • 基于 FatFS 文件系统
  • 支持 SD 卡文件浏览和管理
  • 支持文件操作(查看、删除等)

5. 相册 (Photo Album)

  • 支持多种图片格式:BMP、GIF、JPG
  • 自动扫描指定目录(默认 0:/PICTURE
  • 图片浏览和显示功能

6. 姿态显示 (Attitude Display)

  • 基于 MPU6050 传感器
  • 实时显示设备姿态信息
  • 3D 姿态可视化

构建与运行

开发环境

  • IDE: Keil MDK-ARM
  • 目标芯片: STM32F103ZE
  • 编译目标: Target 1

编译步骤

  1. 打开工程文件 Template.uvprojx
  2. 选择目标 Target 1
  3. 执行 Rebuild All
  4. 下载到开发板
  5. 上电后系统自动进入手机桌面界面

配置说明

  • LCD 分辨率: 通过 tftlcd_data.widthtftlcd_data.height 自动检测
  • LCD 驱动: 在 APP/tftlcd/tftlcd.h 中通过宏定义选择(默认 TFTLCD_HX8357DN
  • LCD 方向: 通过 TFTLCD_DIR 宏定义(0=竖屏,1=横屏)

操作说明

手机桌面

  • KEY_UP / 红外上键:向上导航
  • KEY1 / 红外下键:向下导航
  • KEY0 / 红外OK键:确认选择
  • KEY2 / 红外左键:向左导航
  • 红外右键:向右导航

俄罗斯方块游戏

  • 主菜单
    • KEY_UP / 红外上键:上移选项
    • KEY1 / 红外下键:下移选项
    • KEY0 / 红外OK键:确认选择
  • 游戏内
    • KEY2 / 红外左键:方块左移
    • KEY0 / 红外右键:方块右移
    • KEY_UP / 红外上键:方块旋转
    • KEY1 / 红外OK键:暂停/继续
    • 暂停时 KEY2:返回主菜单

红外遥控器按键映射

  • 方向键: 上/下/左/右
  • OK键: 确认/暂停
  • 数字键: 0-9(部分功能可用)
  • 特殊键: * 和 # 键

代码结构

stm32_Tetris/
├── User/                    # 用户代码
│   ├── main.c              # 主程序入口,包含所有应用逻辑和系统框架
│   ├── stm32f10x_conf.h    # STM32 外设配置
│   └── stm32f10x_it.c      # 中断服务程序
├── APP/                     # 应用层驱动
│   ├── tftlcd/             # TFT LCD 驱动
│   ├── key/                # 按键驱动(含红外)
│   ├── esp8266/            # WiFi 模块驱动
│   ├── mpu6050/            # MPU6050 传感器驱动
│   ├── rtc/                # RTC 实时时钟驱动
│   ├── sd_sdio/            # SD 卡 SDIO 驱动
│   ├── flash/              # Flash 存储驱动
│   ├── spi/                # SPI 驱动
│   └── led/                # LED 驱动
├── Public/                  # 公共模块
│   ├── system.c/h          # 系统初始化
│   ├── SysTick.c/h         # 系统节拍
│   └── usart.c/h           # 串口通信
├── Font/                    # 字库模块
│   ├── font_show.c/h       # 字库显示
│   └── font_update.c/h     # 字库更新
├── Picture/                 # 图片处理库
│   ├── piclib.c/h          # 图片库接口
│   ├── bmp.c/h             # BMP 格式支持
│   ├── gif.c/h             # GIF 格式支持
│   └── tjpgd.c/h           # JPG 格式支持
├── Fatfs/                   # FatFS 文件系统
│   ├── src/                # FatFS 源码
│   └── fatfs_app/          # FatFS 应用层
├── Malloc/                  # 内存管理
│   └── malloc.c/h          # 动态内存分配
└── Libraries/               # STM32 标准库
    ├── CMSIS/              # CMSIS 核心文件
    └── STM32F10x_StdPeriph_Driver/  # STM32 标准外设库

关键函数位置

  • 主入口: User/main.c:6132 - main()
  • 手机桌面: User/main.c:305 - Phone_Desktop()
  • 俄罗斯方块菜单: User/main.c:160 - Tetris_Menu()
  • 游戏主循环: User/main.c:4144 - Game_Start()
  • 设置菜单: User/main.c - Settings_Menu()
  • 文件管理器: User/main.c - File_Manager()
  • 相册: User/main.c - Photo_Album()
  • 姿态显示: User/main.c - Attitude_Display()

关键实现

1. 差异更新绘制

  • 位置:User/main.c 游戏绘制相关函数
  • 功能:仅更新变化的区域,避免全屏刷新导致的闪烁
  • 实现:比较当前状态与上一状态,只重绘差异部分

2. 局部刷新分数

  • 位置:User/main.c:361 附近
  • 功能:分数更新时只刷新数字区域,避免覆盖其他内容
  • 实现:使用右对齐绘制,清除区域限制在左栏范围内

3. 随机方块序列

  • 位置:User/main.c:164 附近
  • 功能:使用轻量伪随机数生成器生成方块序列
  • 实现:线性同余生成器(LCG)

4. WiFi 状态缓存

  • 位置:User/main.c:119 - Update_WiFi_Cache()
  • 功能:缓存 WiFi 状态,避免频繁查询 ESP8266
  • 实现:状态变化时更新缓存,界面显示使用缓存值

5. RTC 时间管理

  • 位置:User/main.c:60 - RTC_GetTime_Milliseconds()
  • 功能:从 RTC 获取时间,支持毫秒级精度
  • 实现:RTC 秒级计数 + SysTick 毫秒计数组合

可配置项

游戏参数(俄罗斯方块)

  • 下落速度: Game_Start() 内的 speed_tick(数值越小下落越快,默认 30)
  • 游戏区域: 10×20 网格(可在代码中修改)
  • 方块颜色: piece_colors[] 数组定义 7 种方块颜色

界面参数

  • 左栏宽度: 通过 left_w = sw/3 自动计算(屏幕宽度的 1/3)
  • 状态栏高度: statusbar_h = 30 像素
  • 图标大小: 桌面图标 80×80 像素

系统参数

  • 串口波特率: USART1_Init(115200)
  • 系统时钟: SysTick_Init(72) - 72MHz
  • WiFi 默认状态: wifi_enabled = 0(默认关闭)

常见问题

显示问题

  • 数字越界或不可见: 确保分数使用左栏的右对齐绘制,且清除区域在左栏范围内
  • 闪烁: 已使用最小差异更新与不透明数字绘制;若仍存在,可降低 delay_ms 或为方块添加边框
  • 屏幕分辨率不匹配: 检查 tftlcd_data.widthtftlcd_data.height 是否正确初始化

功能问题

  • WiFi 无法连接: 检查 ESP8266 模块连接和配置,确认 SSID 和密码正确
  • SD 卡无法识别: 检查 SD 卡格式(建议 FAT32),确认 SDIO 接口连接正确
  • 红外遥控无响应: 检查红外接收器连接(PB9),确认中断配置正确

编译问题

  • 找不到头文件: 检查 Keil 工程中的 Include Paths 配置
  • 链接错误: 确认所有必要的库文件已添加到工程中

开发模式

Developer Mode

系统支持开发者模式,可通过设置菜单开启。开发者模式下可以:

  • 控制各模块的调试输出(WiFi、RTC、IR)
  • 查看系统运行状态
  • 调试功能模块

调试输出

  • WiFi 模块: WIFI_PRINTF() 宏控制
  • RTC 模块: RTC_PRINTF() 宏控制
  • IR 模块: IR_PRINTF() 宏控制
  • 通用调试: DEV_PRINTF() 宏控制

版本信息

  • 硬件平台: STM32F103ZE
  • 开发环境: Keil MDK-ARM
  • 标准库版本: STM32F10x_StdPeriph_Driver
  • 文件系统: FatFS R0.14

许可证

本项目为课程设计项目,仅供学习使用。

作者

AidenDJ233


注意: 本项目是一个完整的多功能嵌入式系统,集成了游戏、文件管理、图像处理、网络通信、传感器应用等多个功能模块,代码量较大。建议在修改代码前先理解整体架构,避免影响其他模块的正常工作。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors