CH32F103 USBD模拟鼠标
本例程在CH32F103 EVT例程中的USB模拟CH372例程的基础上进行修改,所用USB库和STM32基本差不多。修改时,重点是修改usbconfig文件夹下面的代码,usbcore文件夹下的代码一般不用修改。
USB库各文件介绍:
USB_CORE文件夹文件介绍(底层结构):
usb_core.c 文件:该文件为USB2.0协议的核心处理文件
usb_init.c 文件:该文件仅包含一个函数:USB控制器的初始化函数—USB_Init函数,通过调用其他文件的函数实现的
usb_int.c 文件:该文件包含两个函数:CTR_LP和CTR_HP,CTR_LP负责低优先级端点正确传输中断的处理;CTR_HP负责USB高优先级端点正确传输中断的处理
usb_mem.c文件:该文件包含两个函数,用于对发送、接收缓存区的操作(处理PMA数据),PMA全称为Packet memory area,是MCU内部用于USB/CAN的专用数据缓冲区。该文件包含两个函数: PMAToUserBufferCopy和 UserToPMABufferCopy,分别用于将端点接收到的数据和数据长度复制给应用程序 和 端点接收的数据复制到用户缓冲区
usb_regs.c文件:该文件主要负责USB控制寄存器的底层操作,里面包含各种USB寄存器的底层操作函数
usb_sil.c 文件:该文件主要对usb_mem.c文件的接口进一步封装,为USB端点提供简化的读写访问函数
以上文件除特殊情况,一般不用做修改,直接调用内部函数即可。
USB_CONFIG文件夹文件介绍(上层结构):
hw_config.c文件:该文件主要用于硬件设备配置等。比如初始化 USB 时钟、 USB 中断、低功耗模式处理等
usb_desc.c 文件:该文件主要用于USB设备相关描述符的定义,比如设备描述符、配置描述符、报表描述符等等,不同设备定义描述符不同。关于这部分可参考《圈圈教你玩USB》
usb_endp.c 文件:该文件包含端点IN/OUT的回调函数。用于非控制传输,处理正确传输中断回调函数
usb_istr.c 文件:该文件用于处理USB中断函数
usb_prop.c 文件:该文件主要进行上层协议处理,不同类型的设备(大容量存储、鼠标),数据协议不同。该文件用于处理所有USB设备的相关事件,包括初始化、复位等操作。USB的建立阶段、数据阶段以 及状态阶段的处理都是在该文件,包括USB标准请求的函数也在该文件
usb_pwr.c 文件:该文件主要用于USB控制器的电源管理
通常我们在移植修改时,主要就是对该文件夹下文件进行修改。
以CH32F103模拟鼠标(HID设备)为例,在原工程(模拟CH372)基础上主要修改如下:
源文件修改:
1、hw_config.c文件
该文件在本次例程中不做修改;
2、usb_desc.c文件
该文件主要修改设备描述符、配置描述符(配置描述符中注意增加HID描述符),同时需要注意添加HID设备报表描述符,具体修改见附件例程。
3、usb_endp.c文件
该文件中主要添加端点发送数据函数,此处为USBD_SendMouse函数,如下图。同时需要注释掉端点2的两个回调函数。此外,鼠标数据发送采用端点2,注意USBD_SendMouse函数中使用端点2。
4、usb_istr.c文件
该文件在本次例程中不做修改;
5、usb_prop.c文件
该文件增加注册报告描述符函数、注册HID描述符函数。完善USBD_Data_Setup函数,所有在数据阶段的特殊类(报表,HID)请求都USBD_Data_Setup函数中处理,该函数会响应去检查所有的特殊类请求,同时根据请求填充ENDPOINT_INFO结构信息。当请求有效,该函数返回USB_SUCCESS,否则返回USB_UNSUPPORT。完善USBD_NoData_Setup函数,在建立过程中,会有很多特殊类请求的无数据阶段,所有的没有数据阶段的特殊请求都在该函数中处理 ,该函数会响应去检查所有特殊类请求,并且执行请求。此外,因为GET_CONFIGURATION和GET_INTERFACE两个请求跟个别的类联系密切,所以他们会在这两个函数中检查和处理。增加获取报告描述符函数、获取HID描述符函数、设置接口协议请求函数、协议获取函数。
该文件相对修改较多,可直接对照流程修改。关于该文件具体介绍,可见该链接:
http://news.eeworld.com.cn/mcu/article_2016122032525.html
6、usb_pwr.c文件
该文件在本次例程中不做修改;
头文件修改:
1、hw_config.h文件
该文件主要增加发送函数定义,如下图:
2、usb_conf.h文件
该文件主要修改如下图:
3、usb_desc.h文件
该文件主要增加宏定义,如下图
4、usb_prop.h文件
该文件主要增加结构体和函数定义,如下图:
main文件修改
以上就是整个工程文件在原工程基础上的修改内容,未介绍文件不做修改。