docs: restructure framework, extract app execution module, group event collection & align GPIOs

This commit is contained in:
2026-07-10 10:47:00 +08:00
parent a04ea5fb51
commit b640fa25ae
24 changed files with 428 additions and 213 deletions

View File

@@ -686,6 +686,10 @@
<div class="module-title">BgApp</div>
<div class="module-tag">后台监测应用</div>
</div>
<div class="module-card apps-node" id="APP" onclick="selectModule('APP')">
<div class="module-title">APP (应用模块)</div>
<div class="module-tag">运行与页面逻辑</div>
</div>
</div>
<!-- 2. 应用管理层 (APP Management) -->
@@ -1012,6 +1016,16 @@ typedef struct {
// 模块细节定义 (数据驱动 - 符合5层架构)
const modulesData = {
APP: {
title: "APP (页面运行与渲染模块)",
pin: "无物理引脚 (处于应用业务层)",
level: "5. 应用业务层 (Applications)",
hwsource: "App 管理器与主循环生命周期注册",
file: "Docs/50_module-breakdown/mod-app.md",
inputs: ["AppManager (生命周期 OnStart/onRun/onClose/onEvent)", "EventDispatcher (路由按键与射频警报事件)"],
outputs: ["LCD (刷写 Truly GRAM 窗口)", "MOTOR/LED (发出状态特定的异步动作指令)"],
desc: "手环的核心页面运行与交互层。ClockApp 在前台绘制大字时钟及右上角电量指示MenuApp 显示单屏菜单项并引导页面跳转PairApp 接收按键输入在 [01]~[99] 范围内微调序号并保存至 Flash 数据库AlarmApp 刷新红粗边框闪烁灯效异步输出防区特定的马达振动SOSApp 周期发射 0x08 求救包并红灯爆闪。"
},
ActiveApp: {
title: "ActiveApp (前台活跃应用)",
pin: "无物理引脚 (处于应用业务层)",
@@ -1304,33 +1318,32 @@ typedef struct {
setTimeout(drawConnections, 200);
});
// ------------------ 引脚配置交互数据 ------------------
// ------------------ 引脚配置交互数据 ------------------
const pinsInfo = {
'1': { mcu: "P1.0 / RXD2", net: "TXD", mode: "推挽输出", hw: "外部调试串口发送端,用来下载及打印架构运行日志。", sw: "通过 UART1 串口发送缓冲寄存器 SBUF 直接写入。" },
'2': { mcu: "P1.1 / TXD2", net: "RXD", mode: "高阻输入", hw: "外部调试串口接收端,支持在测试页面输入控制指令。", sw: "UART1 中断接收,解析对应的指令字并投入状态调度。" },
'4': { mcu: "P1.5 / SCL", net: "+3.3V", mode: "电源逻辑供电", hw: "提供 Truly AMOLED 显示芯片的 3.3V 逻辑正向工作电压。", sw: "N/A" },
'5': { mcu: "P1.6 / SDA", net: "+3.3V", mode: "电源逻辑供电并联线", hw: "Truly 0.95 AMOLED 屏 3.3V 逻辑并联通道。", sw: "N/A" },
'6': { mcu: "P1.7 / RST", net: "TP_RST", mode: "推挽输出", hw: "触摸屏复位控制线,本手环为非触摸,引脚悬空扩展。", sw: "GPIO 设置为高电平输出挂起。" },
'8': { mcu: "UCAP", net: "TP_INT", mode: "输入中断", hw: "触摸板中断唤醒电平,非触摸手环,物理悬空。", sw: "N/A" },
'9': { mcu: "P5.4 / SS", net: "SPI_SDO", mode: "推挽输出", hw: " Truly AMOLED 屏 SPI 主动输出 (MISO) 对应 P5.4 物理控制线。", sw: "SPI 寄存器配置复用输出。" },
'10': { mcu: "Vcc / AVcc", net: "SPI_CS", mode: "推挽输出", hw: " Truly AMOLED 屏 SPI 片选使能线,低电平使能对 RM69310 的写屏操作。", sw: "LCD 读写驱动中,写像素前拉低 CS写完后拉高 CS。" },
'11': { mcu: "VREF+", net: "SPI_CLK", mode: "推挽输出", hw: " Truly AMOLED 屏 SPI 时钟同步脉冲控制引脚 (SCL)。", sw: "SPI 写入数据时由硬件模块自动产生串行移位脉冲。" },
'12': { mcu: "GND / AGND", net: "SPI_SDI", mode: "推挽输出", hw: " Truly AMOLED 屏 SPI 输入引脚 (MOSI/SDA),写入像素二进制色彩数据流。", sw: "SPI 发送数据寄存器 SPDAT 写入字节时产生该路时序。" },
'13': { mcu: "P3.0 / RxD", net: "SPI_DCX", mode: "推挽输出", hw: " Truly AMOLED 屏幕的数据命令指示线。拉高表示当前写入 GRAM 的是 16-bit 像素数据;拉低表示写入的是控制寄存器指令。", sw: "由 `lcd.c` 的 `LCD_WriteData` 和 `LCD_WriteCmd` 进行拉高/低控制。" },
'14': { mcu: "P3.1 / TxD", net: "DIS_RST", mode: "推挽输出", hw: " Truly AMOLED 屏硬件复位引脚。开机或安全唤醒时通过高低电平跳变重置屏幕控制寄存器。", sw: "唤醒序列中先拉低 10ms再拉高 10ms 触发硬件复位配置命令。" },
'19': { mcu: "P3.6 / INT2", net: "KEY_DOWN", mode: "高阻输入 + 使能内部上拉", hw: "侧边 ▼ (下移键),按下触发引脚接地低电平;休眠时支持 P3.6 端口中断直接唤醒 CPU。", sw: "KEY 初始化设置 P3PU=0x40Timer1 中断中以 10ms 周期读取 P3.6 电平值进行滤波。" },
'20': { mcu: "P3.7 / INT3", net: "KEY_CONFIRM", mode: "高阻输入 + 使能内部上拉", hw: "侧边 ■ (确认键),短按确认,长按 3 秒进入主菜单;支持休眠中断唤醒。", sw: "KEY 初始化设置 P3PU=0x80中断中定时扫描累加计数若计数满足 300 判定为 CONFIRM_LONG 并投递事件。" },
'21': { mcu: "P2.0 / A8", net: "KEY_UP", mode: "高阻输入 + 使能内部上拉", hw: "侧边 ▲ (上移键),按下触发引脚低电平;支持休眠时中断唤醒系统。", sw: "KEY 初始化设置 P2PU=0x01通过移位计数器累加消抖。" },
'22': { mcu: "P2.1 / A9", net: "BAT_ADC", mode: "模拟输入", hw: "连接电池分压电路。采集 0~1.3V 电池模拟电压提供给系统电量处理模块。", sw: "开启内置 12位 ADC 并配置通道 9 转换。取多次累加平均值消噪,线性转换为 0%~100%。" },
'23': { mcu: "P2.2 / A10", net: "DET", mode: "高阻输入", hw: "底座 USB 充电插入检测。充电时底座供电输出将其拉为高电平;常态为低电平。", sw: "时钟待机 App (ClockApp) 在 onRun 轮询中读取 P2.2 引脚状态更新充电加号显示。" },
'24': { mcu: "P2.3 / A11", net: "KEY_SOS", mode: "高阻输入 + 使能内部上拉", hw: "物理并联的 SOS1 与 SOS2 报警按键共地。按下任意键直接拉低 P2.3 触发紧急求救。", sw: "KEY 初始化设置 P2PU=0x08Timer1 中断检测 P2.3,低电平消抖完毕立刻推送最高优先级的 KEY_SOS_ACTIVE 事件。" },
'25': { mcu: "P2.4 / MISO_2", net: "MOTOR_PWM", mode: "推挽输出", hw: "连接振动马达驱动 MOS 晶体管控制栅。高电平开启震动;低电平关断马达。", sw: "由 `Motor_Start_Pattern` 发起动作Timer1 定时中断在后台扣减时间并切换 P2.4 电平实现异步非阻塞震动。" },
'27': { mcu: "P2.6 / SCLK_2", net: "LED_RGB", mode: "SPI_MOSI 硬件复用输出", hw: "连接上、下级联的双 WS2812B 灯珠的数据输入脚,传送高频 RGB 色彩流。", sw: "写数据时,临时屏蔽全局中断并将 P2.4 马达脚切换为高阻隔离,通过 SPI 高速推字节时序。" },
'28': { mcu: "P2.7 / SS_2", net: "SHUT", mode: "推挽输出", hw: " AMOLED 升压 PMIC (SGM3833) 芯片的使能使能控制脚。拉高开启屏幕正负电网工作;拉低彻底切断供电消除漏电。", sw: "PM 驱动模块控制。睡眠时执行 `SHUT = 0` 关闭屏幕电源;安全唤醒后执行 `SHUT = 1` 并强延时 50ms。" },
'29': { mcu: "P0.0 / ADC8", net: "RF_RX_DATA", mode: "输入中断 (INT0/INT2)", hw: "LR690L 433MHz 无线接收输出,检测到无线载波时输出脉冲沿,休眠时唤醒单片机。", sw: "休眠前配置为中断源;常态下 RF 解调驱动定时捕捉前导同步头宽度,计算基准时基 T 还原 24位 码。" },
'30': { mcu: "P0.1 / ADC9", net: "RF_TX", mode: "推挽输出", hw: "LR690L 发射偏置使能引脚。拉高后射频前端开启天线能量推送。", sw: "主动发射对码或 SOS 求救码时,由 RF 驱动在底层拉高 P0.1 开启发射。" },
'31': { mcu: "P0.2 / ADC10", net: "RF_RX", mode: "推挽输出", hw: "LR690L 接收使能控制引脚。高电平代表芯片处于监听天线高频信号状态。", sw: "常态待机和等待对码搜索下GPIO 默认拉高 P0.2 以监听外界载波。" },
'32': { mcu: "P0.3 / ADC11", net: "RF_TX_DAT", mode: "推挽输出", hw: "LR690L 无线调制数据输入,在此引脚输出特定的高低电平比值即可将数据射出。", sw: "主动发射时,利用 GPIO 高速反转 P0.3 产生同步前导宽及 EV1527 对应的 1/0 码脉冲。" }
'1': { mcu: "P1.0 / DIS_RST", net: "DIS_RST", mode: "推挽输出", hw: "Truly AMOLED 屏幕复位控制脚 (RESET)。拉低重置屏幕驱动芯片寄存器。", sw: "LCD_Init 模块复位时置低 10ms再置高 10ms 以启动上电序列。" },
'2': { mcu: "P1.1 / SPI_DCX", net: "SPI_DCX", mode: "推挽输出", hw: "Truly AMOLED 屏幕的 SPI 数据/指令选择脚。拉高写数据,拉低写指令。", sw: "写数据时拉高引脚;写配置控制命令时拉低引脚。" },
'3': { mcu: "P1.4 / SPI_SDI", net: "SPI_SDI", mode: "推挽输出", hw: "Truly AMOLED 屏幕的 SPI 串行数据输入端 (MOSI/SDA)。", sw: "向 SPI 发送缓存寄存器 SPDAT 写入 8 位字节自动串行移位输出。" },
'4': { mcu: "P1.5 / SPI_CLK", net: "SPI_CLK", mode: "推挽输出", hw: "Truly AMOLED 屏幕的 SPI 串行同步时钟引脚 (SCL)。", sw: "SPI 通信时由单片机片上外设硬件模块自动产生串行移位脉冲。" },
'5': { mcu: "P1.6 / SPI_CS", net: "SPI_CS", mode: "推挽输出", hw: "Truly AMOLED 屏幕的 SPI 片选输入脚。低电平选中Truly显示芯片操作。", sw: "在对屏幕进行像素或指令读写前置 0读写完毕后置 1 挂起片选线。" },
'6': { mcu: "P1.7 / SPI_SDO", net: "SPI_SDO", mode: "推挽输出", hw: "Truly AMOLED 屏幕的 SPI 串行数据输出端 (MISO) 用于状态读取。", sw: "N/A" },
'10': { mcu: "Vcc / AVcc", net: "+3.3V", mode: "电源逻辑供电", hw: "屏幕与系统 3.3V 逻辑工作正向电压轨道。", sw: "N/A" },
'11': { mcu: "VREF+", net: "+3.3V", mode: "电源并联线", hw: "芯片基准电压与 3.3V 电源物理并联通道。", sw: "N/A" },
'12': { mcu: "GND / AGND", net: "+3.3V", mode: "电源并联线", hw: "电源并联,稳定模拟和数字地电平轨道通道。", sw: "N/A" },
'13': { mcu: "P3.1 / RxD", net: "RXD", mode: "高阻输入", hw: "外部调试串口 1 (UART1) 接收引脚,用于接收控制指令或测试配置包。", sw: "UART1 串口接收中断。当收到指定调试帧时触发对应的状态切换。" },
'14': { mcu: "P3.0 / TxD", net: "TXD", mode: "推挽输出", hw: "外部调试串口 1 (UART1) 发送引脚用于向PC输出系统日志及调试标志。", sw: "通过 UART 串口发送缓存寄存器 SBUF 直接写入以触发物理串行传输。" },
'19': { mcu: "P3.6", net: "RF_TX_DAT", mode: "推挽输出", hw: "LR690L 射频模块数据发射脚,向天线前端输入特定的高低电平比值信号。", sw: "主动发射时,利用 GPIO 高速反转产生符合 EV1527 时域码宽的串行方波。" },
'20': { mcu: "P3.7", net: "RF_RX", mode: "推挽输出", hw: "LR690L 射频芯片接收监听使能控制脚,高电平开始监听无线载波。", sw: "常态待机和搜码模式下 GPIO 默认拉高引脚以保持持续接收侦听状态。" },
'21': { mcu: "P2.0", net: "RF_TX", mode: "推挽输出", hw: "LR690L 射频芯片发射偏置使能引脚,拉高打开射频前端发射天线电磁波。", sw: "当需要主动求救或对码发射时,先拉高此引脚,发射完毕后置 0 关闭天线。" },
'22': { mcu: "P2.1", net: "RF_RX_DATA", mode: "输入中断 (INT2)", hw: "LR690L 433MHz 无线接收输出引脚,在捕获到无线载波变化时输出沿信号。", sw: "休眠前配置该引脚上升/下降沿作为 INT2 中断唤醒源;平时由沿捕捉解码。" },
'23': { mcu: "P2.2", net: "SHUT", mode: "推挽输出", hw: "AMOLED 升压芯片 SGM3833 供电控制脚。拉高开启屏幕电网;拉低关断。", sw: "电源管理模块操作。睡眠时置 0 切断屏幕正负压;唤醒后置 1 并强延时 50ms。" },
'24': { mcu: "P2.3", net: "LED_RGB", mode: "SPI_MOSI 硬件复用输出", hw: "WS2812B 级联双幻彩灯 DIN 控制引脚,输入符合 800kHz 高频的 RGB 码流。", sw: "写彩灯时临时屏蔽中断,将 P2.5 马达隔离引脚,高速送出 24bit 灯效数据。" },
'26': { mcu: "P2.5", net: "MOTOR_PWM", mode: "推挽输出", hw: "连接振动马达驱动 MOS 晶体管控制栅。高电平触发震动;低电平关断马达。", sw: "马达驱动模块负责在 Timer1 后台定时控制 P2.5 输出指定时间的占空波形。" },
'27': { mcu: "P2.6", net: "KEY_SOS", mode: "高阻输入 + 上拉", hw: "物理并联的 SOS1 与 SOS2 报警按键,按下将引脚接地拉低,休眠支持唤醒。", sw: "KEY 初始化使能 P2PU 的 Bit 6 上拉Timer1 读取引脚电平沿推送 SOS 警报。" },
'28': { mcu: "P2.7", net: "DET", mode: "高阻输入", hw: "USB 底座充电插入检测。USB 连接时输入高电平,平时为低电平。", sw: "时钟待机应用在 OnRun 循环中读取引脚电平状态,更新时钟后是否带 '+' 充电符。" },
'29': { mcu: "P0.0 / ADC8", net: "BAT_ADC", mode: "模拟输入", hw: "连接电池采样分压电阻中点。采集 0~1.3V 电压以判定当前电池容量。", sw: "使能内置 12位 ADC 的通道 8 进行模数转换,将结果换算为电池百分比。" },
'30': { mcu: "P0.1", net: "KEY_UP", mode: "高阻输入 + 上拉", hw: "侧边按键 ▲ (上移键)。短按进行参数累加或高亮切换,休眠支持唤醒。", sw: "KEY 初始化使能 P0PU 的 Bit 1 上拉,消抖后向事件队列投递 UP_CLICK 事件。" },
'31': { mcu: "P0.2", net: "KEY_CONFIRM", mode: "高阻输入 + 上拉", hw: "侧边按键 ■ (确认/菜单键)。短按确认,长按 3 秒调出主菜单交互。", sw: "P0PU 使能上拉10ms 定时判定短击 (CONFIRM_CLICK) 与 3秒长按 (CONFIRM_LONG)。" },
'32': { mcu: "P0.3", net: "KEY_DOWN", mode: "高阻输入 + 上拉", hw: "侧边按键 ▼ (下移键)。短按移动高亮,长按 2 秒退出警报,休眠支持唤醒。", sw: "P0PU 使能上拉,判定短击 (DOWN_CLICK) 与 2秒长按 (DOWN_LONG) 并投递。" }
};
function selectPin(pinNum) {