# A103 主机按键进入实际目标工程

2026-10-10。本轮推进从独立模块到 STM32G431 目标镜像：PA11 主机按键真实GPIO读入、候选消抖、单/双/三击解码与RAM事件快照均已进入main/foreground调用路径。还未执行实体按键测试。保留默认电机、PWM、充电关断；这不是可运行整机镜像。

## 修改与证据

控制板A32网表：USER_BUTTON连接U1脚33/PA11、J4脚5、R7脚1；R7=10k、另一端CTRL_3V3。按键候选按低电平有效处理；实际外接按键闭合到GND仍需接线确认。仅设置PA11为输入、关闭内部上下拉，其他GPIO模式保持。PB2/PC15编码器和PB10/PB11手柄接口本轮没有接入，不能把接口预留当作原手柄协议已匹配。

按键消抖20ms、连击450ms为工程候选。启动时已按住不会生成释放命令；服务空窗超过20ms取消待处理手势并重新等待稳定释放。使用TIM2微秒增量累加毫秒，避免直接now_us/1000在TIM2回绕时破坏计时。无效连击拒绝，命令只发布RAM，不调用电机启动。

目标整合发现原按键dc_poll与现有配置模块dc_poll重名，链接器明确报错；本轮在目标按键模块统一改名为dclick_*后完整链接通过。A102同毫秒故障顺序修复已复制入本目标工程的speed_supervisor.c，但dui_tick操作适配器尚未成为实际运行路径。

主机测试覆盖抖动、1/2/3/4/5击、微秒回绕、开机按住、服务空窗取消及重新接收；寄存器模型测试覆盖只改PA11、低有效释放事件、偶数epoch快照和配置失去所有权停止采集。ASan/UBSan通过。实际ELF反汇编确认main→drill_button_init、foreground→drill_button_poll、poll→db_sample、sample→dclick_poll调用。

完整ARM软浮点镜像构建及既有静态检查通过：Flash二进制18788字节，链接RAM2992字节（含保留区，不是栈高水位实测）。BIN SHA256：6014c179283219b976bcf49f79d3fd9eaec1f330131678cf3ab5b3ac74c4e99e。对象检查或静态调用链不证明板上执行时间、按键电气波形或原机手感。

## 工程师读取方式

SWD读取drill_debug_button，7个uint32字段共28字节：epoch、samples、events、last_command、last_us、pressed、available。取两次epoch一致且偶数的快照；available=1才表示输入配置受本模块管理。last_command是最近一次记录，不是待执行命令；必须结合events增量读，禁止把它接成持续使能。命令枚举0无、1启停请求、2换向请求、3模式请求、4无效连击。没有真实SWD读取记录。

可以在经装配/电源/DFM检查的样板上测试实际按键输入，并同步A83既有ADC/驱动诊断；本轮没有刷写、通电或下单。由于未确定实际电机参数/启动过程、手柄协议和旋钮/LCD，本镜像保留关断，不能执行三款等效性验收。整机缩板及成本闭环仍待继续。
