当前位置: 首页 > 后端技术 > Python

STM32USB高速USB口支持4G联网

时间:2023-03-26 02:02:00 Python

本文由RT-Thread论坛用户@fhqmcu原创发布:https://club.rt-thread.org/ask/article/8fc0968257c2ca01.html1.前言关于目前有STM32F4USB驱动(FULLSPEED),但是存在很多问题,比如NAK问题,导致读写U盘出错。USB底层驱动中进行OUT传输时必须加1ms的延时。等等更多问题。本文高速USB驱动参考网友@sakumisu的文章:基于CherryUSB调试dwc2usb主机笔记,感谢其对USB的研究和调试。2、STM32高速USB调试STM32高速USB可以使用内部DMA传输USB数据包,这样会大大提高USB通信的速度,可以解决在使用FULLSPEED过程中遇到的各种问题,所以需要时间修改STM32F的USB驱动,将USBRNDIS设备驱动改为高速USB接口,代码修改如下:2.1.使用高速USB接口代替USBIO管脚,大家熟知的PA10、PA11只能用于全速USB。改用高速USB后,需要用到PB14、PB15管脚本。程序初始化如下。在调试程序的时候,总觉得这个地方很简单,不能出错。结果修改了USB驱动部分后,怎么调试都进不了USB中断。最后查看USB高速管脚配置为GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS结果修改这部分代码时没有查看手册。根据GPIO_AF10_OTG_FS的宏定义,发现有GPIO_AF10_OTG_HS的定义,于是直接改了。小河沟里好像总是翻船,总觉得这个地方简单,不会出错。结果遇到了两次IO配置的问题。上次是调试SPI2驱动,修改IO,看说明书,看说明书。2.2USB驱动的修改USB驱动的修改主要是修改操作系统设备驱动接口的drv_usbh.c文件。在这个文件中,使用全速USB和高速USB的USB驱动都被初始化,通过宏定义DRV_USBH_USE_HS进行切换。这个宏定义可以在rtconfig.h中添加,如果定义了这个宏,则表示使用高速USB,如果不定义,则使用全速USB。代码很多,请参考博客后面的git仓库链接。STM32F低级USB驱动的改进,兼容原有的全速USB功能。具体改进点如下:1、使用高速USB时,需要开启DMA设置。2、使用高速USB时,需要关闭NAK中断。如果你不关闭NAK中断,程序就会转入你疑惑的人生。3、驱动程序使用高速USB接口,实际工作在全速模式。4、使用时注意硬件管脚的变化,可以直接用跳线将USB口接到PB14和PB15上。3、代码仓库上高速USB驱动的优化已经上传到git仓库。见版本标签V1.2STM32USBHOST驱动4G网卡https://github.com/longtengmc...4.性能提升采用FTP下载文件写入FLASH的测试方式,下载一个310Kbyte的文件,使用全速USB时下载时间为10秒,或使用高速USB时约7秒。最关键的是解决USB全速驱动设备时返回NAK的各种问题。