打印
[N32G43x]

G435 USB 复合虚拟串口和HID

[复制链接]
864|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 liao_122 于 2023-8-10 09:49 编辑

#申请原创# 国民技术例程有单独的HID和单独的虚拟串口例程,但没合并的
现在准备在虚拟串口例程的基础上增加HID

1.添加端点
虚拟串口用了3个端点,HID使用一个端点 ,所以增加一个端点4,在usb_conf.h 中添加端点4及对应的地址, USB地址使用区间加在一起不可超过512字节即0x200
2.修改EP_NUM  = 最后一端点数+1


3.在 usb_endp.c 中加入HID使用到的端点处理函数,加入后要注释掉 usb_conf.h
中的同样的名字的 callback,以便中断执行时可以执行到需要的功能。


4.修改描述符
由于有两个接口需加入IAD
何为IAD:
接口关联描述符 (Interface Association Descriptor)(IAD),简称IAD,用于描述与同一功能相关联的两个或多个接口。具体IAD介绍自行百度

修改Virtual_Com_Port_DeviceDescriptor[] ,使用IAD,
设备描述符字段  必需的值
bDeviceClass:0xEF
bDeviceSubClass:0x02
bDeviceProtocol:0x01


将 端点数量  bNumInterfaces: 改为3  (共3个接口 CDC 2个 HID一个*)
将第一个IAD加在虚拟串口接口描述符前,

将第二个IAD加在末尾,从HID接口描述符开始 复制到第二个IAD后面,同时将端点修改为端点4,
将HID接口描述符的接口索引 bInterfaceNumber 改为0x02, 从0开始算,HID在02                  

由于描述符增加HID的多一下,根据增加字节,将VIRTUAL_COM_PORT_SIZ_CONFIG_DESC 值改为115



将HID报告描述符全部复制过来,CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC]  到usb_desc.c


修改Virtual_Com_Port_Reset() 函数并入CustomHID_Reset()部分端口4的设置

修改Virtual_Com_Port_Data_Setup()函数 并入对应CustomHID_Data_Setup()部分

修改Virtual_Com_Port_NoData_Setup()函数并入CustomHID_NoData_Setup部分

将CustomHID_SetReport_Feature() ,CustomHID_GetReportDescriptor(),CustomHID_GetHIDDescriptor(),CustomHID_SetProtocol(),CustomHID_GetProtocolValue() 拷入到usb_prop.c文件
这几个就不放图了

在usb_prop.c 开始部分拷入CustomHID_Report_Descriptor 和CustomHID_Hid_Descriptor 定义
修改HID描述符定位,将CustomHID_ConfigDescriptor 替换为Virtual_Com_Port_ConfigDescriptor,

在usb.desc.h 中拷入缺失宏定义,和声明,CUSTOMHID_OFF_HID_DESC 改为0x38 (描述符改了,偏移变化了)


修改hw_config.c 拷入Cfg_KeyIO()函数

修改main函数调用Cfg_KeyIO();加入修改HID键值的发送,将端口改为EP4_IN,(由PC7改为了PA4发送)

其他一些缺失声明和变量定义自行拷到对应地方,

至此,合并完成,下载,串口收发数据,发键值,如图



附件为源码

Nationstech.N32G43x_Library.1.2.0 HID cdc复合.zip

1.45 MB

源码

使用特权

评论回复
沙发
yszong| | 2023-8-15 21:18 | 只看该作者
中断执行时可以执行到需要的功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

2

粉丝