历史上的今天
今天是:2025年01月07日(星期二)
2019年01月07日 | STM32F103C8T6的USB HID复合设备的实现要点
2019-01-07 来源:eefocus
1,可从官网下载STM32_USB-FS-Device_Lib_V4.0,里面有Custom_HID例子参考。
可从Custom_HID修改得到。时刻记住“自己是STM32F10X_MD系列”以及“自己不是官方demo板”即可将无用的代码去掉,譬如去掉ADC等等相关代码。
2,需要SystemInit();配置为72MHz,否则无法工作,USB是工作在12MHz。
3,如果D+直接上拉到3.3V,把demo usb_pwr.c的PowerOn和PowerOff函数改为空函数。否则PC无法识别,单步调试发现不知跳哪去了。假设不注释,亦可把usb_desc.c的设备描述符bcdUSB域改为0x0110,即USB1.1也是可行的。
4,主要修改usb_conf.h,usb_desc.c以及usb_prop.c,主要是配置描述符增加键鼠的HID描述符和端点描述符,当然对应的报告描述符也需要修改与增加。
usb_prop.c主要在CustomHID_Reset回调添加新增端点的初始化,以及CustomHID_Data_Setup中对不同index(对应复合设备里的不同接口)进行不同的描述符获取(HID描述符获取函数、报告描述符获取函数等)回调函数的注册。
总体上比较容易移植!
重点是:理解复合设备是“一个设备描述符中包含一个配置描述符,而这个配置描述符又包含N个接口描述符(譬如,键鼠为2个),最后,每个接口描述符又包含N个端点描述符(键鼠为2个,一个IN端口,另外一个OUT端口,类型是中断传输方式)”。当然如果是hid设备还会有HID描述符。
顺序是:设备描述符->“配置描述符1->接口描述符1_1->[HID描述符1_1]->端点描述符组1_1->接口描述符1_2->[HID描述符1_2]->端点描述符组1_2....->配置描述符2->接口描述符2_1...."
难点是:理解报告描述符,可参看www.usb.org相关的hid class文档。
需要掌握的技巧是:从已有(现成)的复合设备(譬如键鼠)中使用USBlyzer工具摘取它的报告描述符,填到自己的描述符中,可实现很多,诸如写字板,thouchpad(使用绝对坐标),鼠标(相对坐标)等设备,十分强大的技巧!!!!!
史海拾趣
|
我按照图1的电路接法,然后根据DS18B20的数据手册时序图编写代码,但总是85℃。。。请遇到过这种情况的电子爱好者指导一下: /***********ds18b20子程序*************************/ /******************************ds1820程序****************** ...… 查看全部问答> |
|
板子(数字)上电始会有一个大的过冲,大概有0.60A(12V上电,通过电源芯片转为3.3V输出供电),而且持续几秒,才会降到0.09A。 板上差不多只有一些SRAM,SDRAM,68013还是RS232电平转换芯片,电源块测过没问题,但是一旦连上后端电路,再上电就会 ...… 查看全部问答> |
|
一般来说,下面几类人,容易被HR快速拒绝。 开口言钱者不要 报酬不是不可以问,但得讲究时机和氛围。如果刚一交谈,就开门见山、直奔主题地问起薪酬待遇,会让企业感到很不舒服。 纠缠不休者不要。 招聘都遵循一定的流程,说几时给消息就几时给 ...… 查看全部问答> |
|
刚开接触wince 6.0 驱动开发。有些基础问题没有搞清楚,往高手指点,请详细些。 1. sources文件中都会有一个动态库的入口,这个动态库的入口(DLLMain)是什么的?指的是驱动加载时的入口吗?我看了一个简单的按键驱动,在dllmain处只是简单的初始 ...… 查看全部问答> |
|
定制的win ce 5.0 COM1不能输出调试信息,请问这是怎么回事。 我也使用RETAILMSG函数在驱动中添加调试信息,但同样没有调试信息输出。 我修改过WINCE500\\PLATFORM\\smdk2440\\KERNEL\\HAL目录下的debug.c文件中的“NODEBUG”我也修改为0了。 #define   ...… 查看全部问答> |
|
过年了,为庆祝在eeworld上的总技术分突破3000分,特散300分,先200分,往后加100分 过年了,为庆祝在eeworld上的总技术分突破3000分,特散300分,先200分,往后加100分… 查看全部问答> |
|
最easy的一个问题,VxWorks下怎么控制评估板上的LED ? VxWorks + ARM7 4510 的评估板, 在ADS下裸机编程调试通过了的一个LED闪灯程序。 把它加入到一个在VxWorks下已经可以运行的程序里面去后。(当然相应的头文件都加上了的) 编译下载,不能闪灯 ...… 查看全部问答> |
|
我装了wince4.2 再装了EVC4.0 后来装了STANDARD_SDK.msi 写了个简单的hello程序 想调用SIP 头文件包含了#include \"sipapi.h\" 工程里添加了连接coredll.lib,调用SipShowIM(SIPF_ON); 怎么就是编译不过去 提示如下 Mystest.obj : error LNK2019: ...… 查看全部问答> |




