2026-07-28 18:03:20 +08:00
|
|
|
|
# 📋 工单 wo-01: ADC按键检测、PWR_HOLD开关机控制、P1.3电池电量检测与 PCF8563 硬件 RTC 整合
|
|
|
|
|
|
|
|
|
|
|
|
**工单编号**: WO-01
|
|
|
|
|
|
**创建时间**: 2026-07-27
|
|
|
|
|
|
**模块组件**: 按键驱动 (ADC Key) / 电源管理 (Power Control) / 电池检测 (Battery ADC) / 实时时钟 (PCF8563 RTC) / 待机应用 (ClockApp & UI)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📌 一、 需求概述与按阶段分步规划
|
|
|
|
|
|
|
|
|
|
|
|
根据项目开发优先级与依赖关系,按以下四个顺序阶段分步完成:
|
|
|
|
|
|
|
2026-07-30 15:25:44 +08:00
|
|
|
|
### 阶段 1: P0.3 ADC 按键检测c
|
|
|
|
|
|
- **硬件引脚**: `P0.3` 对应 STC32G 硬件 `ADC11` 通道。
|
2026-07-28 18:03:20 +08:00
|
|
|
|
- **电平特征**: 开机常态下 `KEY_DOWN` 节点电压约为 **2.0V**(未按下),按键按下后电压升至约为 **3.7V**。
|
|
|
|
|
|
- **算法与逻辑**:
|
|
|
|
|
|
- 配置 ADC 模块,引入滑动窗口均值/中值滤波消抖。
|
|
|
|
|
|
- 按键判定:未按下区间 (1.5V ~ 2.5V),按下区间 (3.2V ~ 4.2V)。
|
|
|
|
|
|
- 保留并兼容原本 KEY_DOWN 的短按功能(消抖释放后触发 `KEY_EVENT_DOWN_CLICK` 供 UI 菜单与时间编辑下翻数值)。
|
|
|
|
|
|
|
|
|
|
|
|
### 阶段 2: PWR_HOLD 开关机控制与上电自检
|
|
|
|
|
|
- **硬件引脚**: `PWR_HOLD` 控制引脚(默认分配为 `P0.0`)。
|
|
|
|
|
|
- **开关机流程**:
|
|
|
|
|
|
- **开机锁存**: 按下开机键硬件通电后,单片机在入口 `main()` **第一时间拉高 `PWR_HOLD` 引脚**,锁存电源保持供电。
|
|
|
|
|
|
- **长按关机**: 开机状态下长按 KEY_DOWN 按键 1 秒以上,触发关机流程 `KEY_EVENT_POWER_OFF`,拉低 `PWR_HOLD` 切断总电源。
|
|
|
|
|
|
- **上电自检 (Self-Test)**:
|
|
|
|
|
|
- 启动阶段自动执行硬件自检(电源锁存状态、ADC 采样功能、串口通信校验等),并在串口 1 输出完整的格式化自检报告。
|
|
|
|
|
|
|
|
|
|
|
|
### 阶段 3: P1.3 电池电压检测与真实电量显示
|
|
|
|
|
|
- **硬件引脚**: `P1.3` 对应 STC32G 硬件 `ADC11` 通道(电池分压检测脚)。
|
|
|
|
|
|
- **计算与转换**:
|
|
|
|
|
|
- 读取 ADC11 通道计算电池输入电压 $V_{bat}$。
|
|
|
|
|
|
- 将电池电压(锂电池 3.3V ~ 4.2V 范围)线性/分段映射转换为 **0% ~ 100%** 百分比电量。
|
|
|
|
|
|
- **UI 真实电量刷新**:
|
|
|
|
|
|
- 重构 `ui.c` 的 `UI_ShowClockPage` 及待机界面电量渲染代码,替换原写死固定的静态 "85%" 字符。
|
|
|
|
|
|
- 动态显示真实电池百分比(如 "95%")及绘制对应的电量电池柱位图。
|
|
|
|
|
|
|
|
|
|
|
|
### 阶段 4: PCF8563 (D8563) 硬件 RTC 深度整合
|
|
|
|
|
|
- **硬件连接**: PCF8563 RTC 芯片通过 I2C 总线连接至 STC32G (`P3.2` -> SCL, `P3.3` -> SDA)。
|
|
|
|
|
|
- **深度整合**:
|
|
|
|
|
|
- **开机/唤醒即读**: 系统开机或从低功耗休眠唤醒时,自动通过 I2C 读取 PCF8563 芯片的时间,更新系统全局时钟变量。
|
|
|
|
|
|
- **前台编辑直接写入**: 在 `ClockApp` 编辑模式下按确认键保存时,同步将最新时间写入 PCF8563 芯片寄存器中,实现真正的硬件级掉电时间保存。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🛠️ 二、 硬件引脚配置汇总
|
|
|
|
|
|
|
|
|
|
|
|
| 功能名称 | 关联引脚 | 端口模式配置 | 采样/控制参数 |
|
|
|
|
|
|
| :--- | :--- | :--- | :--- |
|
|
|
|
|
|
| **KEY_DOWN** | `P0.3` / ADC3 | 高阻输入 | 常态 **2.0V**;按下 **3.7V**;消抖 50ms |
|
|
|
|
|
|
| **PWR_HOLD** | `P0.0` (可配置) | 推挽输出 | 上电第一时间置 **高电平 (1)**;关机置 **低电平 (0)** |
|
|
|
|
|
|
| **BATT_ADC** | `P1.3` / ADC11 | 高阻输入 | 电池分压输入,计算 3.3V(0%) ~ 4.2V(100%) 电量 |
|
|
|
|
|
|
| **RTC_SCL** | `P3.2` | 准双向 / 模拟 I2C | PCF8563 SCL 时钟线 |
|
|
|
|
|
|
| **RTC_SDA** | `P3.3` | 准双向 / 模拟 I2C | PCF8563 SDA 数据线 |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🧪 三、 分阶段验收标准
|
|
|
|
|
|
|
|
|
|
|
|
1. **阶段 1 验收 (ADC按键)**:
|
|
|
|
|
|
- [ ] 串口实时打印 P0.3 ADC 电压,常态 2.0V 不误触发。
|
|
|
|
|
|
- [ ] 按下 3.7V 稳定识别,短按能够正常执行 UI 菜单下翻和数值减小。
|
|
|
|
|
|
2. **阶段 2 验收 (开关机与自检)**:
|
|
|
|
|
|
- [ ] 长按按键 >1s 开机,系统完成自检后松开按键,`PWR_HOLD` 持续高电平保持供电。
|
|
|
|
|
|
- [ ] 开机状态下长按按键 >1s,触发关机提示后 `PWR_HOLD` 拉低,系统断电。
|
|
|
|
|
|
- [ ] 开机串口打印完整自检日志。
|
|
|
|
|
|
3. **阶段 3 验收 (P1.3电池检测与UI)**:
|
|
|
|
|
|
- [ ] 可通过 P1.3 ADC 测量准确计算实际电池电压。
|
|
|
|
|
|
- [ ] 待机 UI 屏幕上实时绘制正确的百分比 (0%~100%) 与对应电量电池图标。
|
|
|
|
|
|
4. **阶段 4 验收 (PCF8563 RTC)**:
|
|
|
|
|
|
- [ ] 开机从 PCF8563 读取硬件时间。
|
|
|
|
|
|
- [ ] 前台编辑保存后直接同步写入 PCF8563 芯片,掉电重启时间不丢失。
|