# A104 主机旋钮目标输入候选

2026-10-10。PB2/PC15编码器原始输入采集、正交状态解码及SWD快照已进入STM32G431默认关断目标工程。主机按键A103保持接入，A102同毫秒故障修复保持。没有烧录、通电、原机测量或效果等效验证。

## 连接与行为

随包A32控制板网表明确：ENCODER_A经J4脚3接U1脚18/PB2，R5=10k上拉至CTRL_3V3；ENCODER_B经J4脚4接U1脚4/PC15，R6=10k上拉至CTRL_3V3。本候选只设置两脚输入/无内部上下拉，保留其他GPIO/RCC位。PC15与LSE共用，若LSEON置位则初始化拒绝；运行中失去时钟或输入配置所有权则available清零并停止采集。

AB编码bit1=A、bit0=B。软件正方向定义为00→01→11→10→00，每个有效相邻边沿+1，反向-1。它不是物理顺时针，也不是旋钮每格转速。往返单边抖动净计数抵消；两位同时变化视为异常、计数不变并重新同步。超过2000us服务空窗同样计数不变并重新同步，gap计数增加。计数在int32边界不溢出并置saturated。

AB来自不同端口，不能原子同时读。轮询会漏掉部分跳变，整圈未被采到且回到同一AB时无法检测。2ms空窗阈值是候选质量指标，不证明无漏采，也不能代替后续边沿中断/定时器方案及实物速率验证。原始边沿数不得直接当作detent数或RPM；实际编码器型号、每格边沿数、方向和速度映射未冻结。

## 验证

主机ASan/UBSan测试通过：正反波形各100圈、往返抖动、异常两位跳变、重新同步、>2ms空窗、TIM2微秒回绕、正负饱和及无效输入；另明确演示未采整圈无法检测。寄存器模型通过：启用LSE时GPIO不改动、仅PB2/PC15配置、其他GPIO及RCC位保留、原始AB计数、偶数epoch快照、运行中LSE冲突停止采集。

完整ARM软浮点镜像链接与既有静态检查通过：Flash BIN 19312字节，链接RAM3048字节，尚无栈高水位或真实时序。BIN SHA256：afd9c6e92ba5120a824e1742a954c44f49c51f7b870f921fdd42d6059a7fde42。ELF反汇编确认main→encoder_init、foreground→encoder_poll、poll→de_sample，原按键符号保持。复制解压后独立构建需相同BIN哈希作为交付检查。

## 工程师读取

SWD符号drill_debug_encoder：9个32位字段共36字节，依次epoch、samples、last_us、ab、edge_position（有符号）、invalid_transitions、service_gaps、saturated、available。读取前后epoch须相同且偶数；available=1表示模块仍持有输入配置，不能代表编码器实物已验证。记录边沿计数随旋钮方向/每格的关系，异常和gap需同步保留。主机按键仍读A103的drill_debug_button。

目前按键和旋钮均只记录输入数据，未绑定到电机启动或RPM设定。电机/PWM/充电默认关闭；手柄协议、LCD、电机启动/FOC及实际机械参数尚缺。工程载板可用于台架输入验证，产品缩板、三款工厂DFM及实物效果验收仍未完成。
