WINUSB STM32移植参考

本文探讨了WINUSB与HID的区别,指出HID采用中断传输速度受限,而WINUSB通过批量传输能提高数据吞吐量。在STM32上实现WINUSB需要添加特定的描述符,如OS字符串描述符、OS特征描述符包和设备接口GUID属性描述符。作者分享了参考示例并分析了程序修改,但未实际验证。
摘要由CSDN通过智能技术生成

1为什么用WINUSB

据说WINUSB是免驱的,那HID也是免驱的,用HID不是一样吗?

不一样! HID采用中断传输,传输速度上不去,如果是使用的是USB2.0 FULL speed,那速度更低,可能很多场合都满足不了了。但是WINUSB就不一样了,winusb可以采用批量传输,数据吞吐量大大提高。(HID理论速度:1000*19*64Byte/s,  1ms传输1次, 1次传输19个DAT事务, 1个DAT事务最大64B,好像也不慢了)

2 WINUSB对下位机的要求

我参考了2个例子,一个老外的一个国内的。都 是在stm32上实现WINUSB功能,我大概看了下程序,并认真分析了,这2个例子都是从STM32  CDC例子修改来的, 最主要的就是增加了下面3个描述符,

OS 字符串描述符   设置扩展兼容 ID OS 特征描述符包   注册设备接口 GUID property描述符

uint8_t *USBD_WinUSBOSStrDescriptor(uint16_t *length);
uint8_t *USBD_WinUSBOSFeatureDescriptor(uint16_t *length);
uint8_t *USBD_WinUSBOSPropertyDescriptor(uint16_t *length);

同时修改了很多描述符,以适应WINUSB,

(以上只是从理论分析,并没有在板子上实现!)

(后记:上面3个新加的描述符,第1个StrDescriptor是字符串描述符,其它2个都是标准请求设备中的描述符,因此加的位置也不一样,第1个直接加在设备类中, 后2个理论上是应该加在usb core层中,但是为了兼容性考虑,加在usb_conf配置层中也是合适的,这也是canable中的做法。20220708)

参考WINUSB使用(附STM32Demo) - osc_tjdfnjyo的个人空间 - OSCHINA - 中文开源技术交流社区

https://github.com/MichaelTien8901/STM32WINUSB

WinUSB - 微软为所有 USB 设备提供的常规驱动程序_老瓦的笔记本-CSDN博客_winusb驱动

MDK WINUSB

MDK中也有一个WINUSB的例子,在这个目录下,我打开看了下,是在RTE下运行的,还要运行RTX,大部分程序看不到源码。这个之前没搞过,不熟悉,估计弄起来比较麻烦,就不研究了,

\Middleware\USB\Device\WinUSB_Echo

### 回答1: STM32是一款由意法半导体公司推出的ARM Cortex-M系列微控制器。WinUSB则是一种基于USB的设备驱动程序。 在STM32上实现WinUSB代码的关键步骤如下: 1. 首先,需要使用合适的集成开发环境(IDE)如Keil MDK或IAR Embedded Workbench来编写和编译STM32的固件代码。 2. 接下来,需要添加USB库文件,如STM32Cube库或VCP库,以支持USB功能。这些库提供了用于处理USB通信的各种函数和例程。 3. 使用USB库函数初始化STM32的USB硬件和参数。这通常包括创建设备描述符、配置描述符、端点描述符等,并设置相应的USB中断。 4. 编写WinUSB驱动程序的代码,在STM32中处理来自主机的各种USB命令和数据。这可能涉及到USB传输层的事件处理、端点缓冲区的读写等。 5. 根据需要,在STM32的固件代码中添加应用程序逻辑,以处理USB设备与主机之间的数据交换。例如,可以处理从主机发送的命令并采取相应的操作,或者向主机发送数据等。 6. 在编译和调试完代码后,通过将固件代码烧录到STM32芯片的闪存中来部署WinUSB代码。 总结来说,实现STM32WinUSB代码需要使用合适的IDE和USB库,并在固件代码中处理USB通信和数据交换。 ### 回答2: STM32是一种广泛使用的32位微控制器,其中的WINUSB代码是指使用WINUSB驱动程序来在STM32上实现USB功能的代码。 WINUSB是一种通用的USB驱动程序,可以在Windows操作系统上直接使用,它具有较高的兼容性和易用性。在STM32上使用WINUSB驱动程序,可以方便地与PC进行USB通信,实现数据传输和控制。 要使用WINUSB驱动程序来实现USB功能,首先需要在STM32上配置相应的硬件和软件。硬件上需要连接USB接口和外部晶振等部件,软件上需要使用STM32的开发环境来编写代码。 在编写WINUSB代码时,首先需要包含相应的头文件,并初始化USB接口。然后,需要设置WINUSB驱动程序的描述符和功能,例如设备描述符、配置描述符和端点描述符等。这些描述符包含了关于设备和接口的信息,包括供应商ID、产品ID、传输速率等。 接下来,需要实现WINUSB代码的主要功能,包括数据传输和控制命令。通过WINUSB驱动程序提供的API函数,可以实现从PC接收数据和向PC发送数据,同时也可以实现控制命令的发送和接收。可以根据具体需求来设计和实现数据传输和控制逻辑。 最后,需要在主函数中初始化USB和WINUSB,并进入一个循环来处理USB事件和数据。可以使用中断或轮询等方式来处理USB事件和数据,根据具体需求来选择合适的方式。 总之,STM32上的WINUSB代码主要用于实现与PC的USB通信功能,通过使用WINUSB驱动程序,可以方便地在STM32上实现数据传输和控制。编写WINUSB代码需要了解USB协议和WINUSB驱动程序的使用方法,同时也需要熟悉STM32的开发环境和相关硬件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值