|
华大F460之USB HID custom通信调试记录
之前搞过STM32的USB HID custom通信,华大F460是支持USB的,加上有例程,以为很快就可以搞定;但是想不到期间遇到了不少麻烦,这些记录说一说。
首先工程使用之前跑通的进行删减,调试能够正常跑了之后,按照例程加入HID custom内容,编译通过后烧录到板子,电脑一点反应都没有,打开设备管理器,插拔USB,一点变化都没有。这时是焊了2块板子的,换了板子后一样没有任何反应。首先还是怀疑硬件有问题,是不是IO没有接对DM,DP有没有接反。对比了后没看出哪里问题,期间问了2个群友,没有用过华大F460,给不了什么建议,网上搜了华大的USB问题,有一个网友贴子反馈了华大F460 HID custom例程下载后没有任何反应,直接下载例一样没有反应。和华大技术反馈后,没有怎么回复,后面给了一个F460带AMetal的例程,这例程真是一个大杂锅,看的头痛,不了了之。
第二天,网上各种搜索一遍,还是无果。还是仔细看了前面网友的贴子回复,说是VBUS脚需要接出来,DP脚要上拉。一看原理图VBUS脚接了一个BEEP,再吐嘈板子那么多空脚,一个调试串口都不接出来一个。
首先VBUS断开BEEP,VBUS连接3.3V,没有反应;接5V,还是没有反应;DP脚接上拉3.3V,插电脑终于有反应了,虽然是识别不到驱动,至少有反应了,手册也找到了说明。
但是电脑始终识别不到驱动,unknown device,和STM32的详细对比,一直找不到问题。
第三天,一次想想下载例程试试,居然成功了。各种对比工程,没有发现问题,打印发现死在HardFault_Handler。再次对比工程,只有优化等级不同了,我原来使用2级优化,例程使用0级优化。修改0级优化后,居然好了,也能识别正常了。但是收发数据还是不正常,之前就发现报告描述和之前的不一样,修改过后通迅正常了。贴一下。
- #define CUSTOM_HID_REPORT_DESC_SIZE 52
- __USB_ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc[CUSTOM_HID_REPORT_DESC_SIZE] __USB_ALIGN_END =
- {
- /* USER CODE BEGIN 0 */
- 0x06,0xA0,0xFF,//用法页(FFA0h, vendor defined)
- 0x09, 0x01,//用法(vendor defined)
- 0xA1, 0x01,//集合(Application)
- 0x09, 0x02 ,//用法(vendor defined)
- 0xA1, 0x00,//集合(Physical)
- 0x06,0xA1,0xFF,//用法页(vendor defined)
- //输入报告
- 0x09, 0x03 ,//用法(vendor defined)
- 0x09, 0x04,//用法(vendor defined)
- 0x15, 0x80,//逻辑最小值(0x80 or -128)
- 0x25, 0x7F,//逻辑最大值(0x7F or 127)
- 0x35, 0x00,//物理最小值(0)
- 0x45, 0xFF,//物理最大值(255)
- 0x75, 0x08,//报告长度Report size (8位)
- 0x95, 0x40,//报告数值(64 fields)
- 0x81, 0x02,//输入(data, variable, absolute)
- //输出报告
- 0x09, 0x05,//用法(vendor defined)
- 0x09, 0x06,//用法(vendor defined)
- 0x15, 0x80,//逻辑最小值(0x80 or -128)
- 0x25, 0x7F,//逻辑最大值(0x7F or 127)
- 0x35, 0x00,//物理最小值(0)
- 0x45, 0xFF,//物理最大值(255)
- 0x75, 0x08,//报告长度(8位)
- 0x95, 0x40,//报告数值(64 fields)
- 0x91, 0x02,//输出(data, variable, absolute)
- 0xC0,//集合结束(Physical)
- /* USER CODE END 0 */
- 0xC0 /* END_COLLECTION */
- }
复制代码
特此做一个记录分享。
|
|