1. 从零搭建电容触摸屏转USB HID设备
最近在做一个智能家居控制面板项目,需要把一块5寸电容触摸屏改造成标准的USB HID触摸设备。市面上常见的方案是使用CH554E这类专用芯片,但实际测试发现两个问题:一是芯片缺货严重,二是功能受限没有UART接口。经过对比,最终选择了STM32F070方案,不仅成本更低,还能实现USB HID和串口数据转发双功能。
这个方案的核心思路很简单:通过STM32读取触摸屏的I2C数据,然后转换成标准的USB HID协议。听起来容易,但实际开发中会遇到不少坑。比如我刚开始就遇到触摸坐标漂移的问题,后来发现是Report Descriptor配置不当导致的。下面我就把整个实现过程详细拆解,包括硬件选型、协议分析和代码实现。
2. 硬件准备与方案设计
2.1 硬件选型要点
我选择的STM32F070CBT6主要看中三点:内置USB PHY、48MHz主频和超低价格(某宝单价不到5元)。相比专用转换芯片,STM32的GPIO资源丰富,可以轻松实现I2C和UART并行工作。电容触摸屏用的是GT911,这是目前市面上最常用的触控IC之一,支持多点触控和I2C接口。
硬件连接非常简单:
- 触摸屏的I2C_SCL接PA9
- I2C_SDA接PA10
- INT中断引脚接PA0
- USB D+接PA12
- USB D-接PA11
这里有个小技巧:GT911的I2C地址通常是0x5D或0x14,需要通过RST引脚的上电时序来配置。我在PCB上预留了跳线帽,方便切换两种地址模式。
2.2 USB HID协议分析
USB HID设备的灵魂在于描述符配置。使用USBlyzer抓取原厂触摸屏的报告描述符(Report Descriptor)后,发现它定义了这些关键字段:
- 触点状态(Tip Switch)
- 触点ID(Contact Identifier)
- X/Y坐标(0-2048范围)
- 触点宽度
108




被折叠的 条评论
为什么被折叠?



