设备device_deviceinfohw旧版本

设备device_deviceinfohw旧版本USB STM32-FS-USB-Device驱动代码简述(二)目录链接快速定位前沿1 STM32-FS-USB驱动程序下载2 STM32-USB-FS设备固件库2.1 USB应用程序层次结构2.2 USB-FS

USB — STM32-FS-USB-Device驱动代码简述(二)   目录   链接快速定位   前沿   1 STM32-FS-USB驱动程序下载   2 STM32-USB-FS设备固件库   2.1 USB应用程序层次结构   2.2 USB-FS_Device peripheral interface   2.3 USB-FS-Device_Driver medium layer   2.3 Application interface   3 代码讲解   3.1 初始化代码讲解   3.2 描述符讲解   3.3 中断处理函数   3.3.1 复位函数   3.3.2 正确传输完成函数   3.3.2.1 枚举过程正确传输完成函数   3.3.2.2 非端点0正确传输完成函数   链接快速定位   USB — 初识USB协议(一)   STM32F10x, STM32L1xx and STM32F3xx USB full speed device library (UM0424)   STM32 USB-FS-Device development kit   前沿   本小节主要讲述STM32F103USB设备模式下的标准库驱动程序结构,代码比较复杂,需要读者对USB协议有一个全面的了解,这里只讲述一下比较浅显的东西。   更多资料请参考:STM32 USB-FS-Device development kit   
设备device_deviceinfohw旧版本   1 STM32-FS-USB驱动程序下载   每个芯片厂商都会提供一套属于自己的外设驱动及应用程序,这也是我们所说的生态的一部分,可以在官网下载。我们这里主要讲解STM32F103的USB驱动,所以我们需要去ST的官网下载我们需要的驱动程序,STM32F10x, STM32L1xx and STM32F3xx USB full speed device library (UM0424)。   
设备device_deviceinfohw旧版本   2 STM32-USB-FS设备固件库   2.1 USB应用程序层次结构   下图显示了典型USB的不同组件之间的交互应用程序和USB FS设备库。   
设备device_deviceinfohw旧版本   从上图可知,USB设备固件库被分为两层: STM32_USB-FS_Device_Driver:该层管理与USB-FS_ Device外围设备和USB标准协议的直接通信。STM32_USBFS_ Device_Driver符合USB 2.0规范,与标准STM32标准外设库分离。Application Interface layer:该层为用户提供了库核心和最终应用程序之间的完整接口。   下图显示了USB FS设备库的程序包组织以及所有演示和子文件夹。   
设备device_deviceinfohw旧版本   2.2 USB-FS_Device peripheral interface   USB全速设备外设接口层主要由以下部分组成: 硬件抽象层正确传输中断服务例程数据传输管理   
设备device_deviceinfohw旧版本   2.3 USB-FS-Device_Driver medium layer   USB全速设备驱动中间层主要由以下部分组成: USB设备全局变量初始化USB协议管理简化了对端点的读写访问功能(USB-FS_Device外围设备的抽象层)库中使用的USB定义和类型根据使用的评估板定义硬件   
设备device_deviceinfohw旧版本   2.3 Application interface   应用接口主要由以下部分组成: USB全速设备配置文件USB设备描述符USB设备应用程序特定属性不带控制端点的正确传输中断例程USB设备中断处理函数USB设备电源和连接管理函数   
设备device_deviceinfohw旧版本   3 代码讲解   代码讲解主要涉及以下几个方面: 初始化描述符中断处理函数 复位函数正确传输完成函数   这里以“VirtualComport_Loopback”工程为例进行讲解。   3.1 初始化代码讲解   GPIO初始化   GPIO初始化程序主要是初始化通信所使用的DM和DP引脚以及USB全速设备的DP上拉引脚。   USB时钟配置   USB时钟配置主要是配置USB的PHY时钟,运行在48MHz的时钟下(系统时钟72M),并使能USB时钟。   
设备device_deviceinfohw旧版本 USB中断初始化   USB中断初始化,主要是使能USB的中断,并且使能中断屏蔽位。   经过上面的配置,当USB设备端接入主机的时候,设备端的中断处理函数就能响应相应的中断请求,开始建立通信。   3.2 描述符讲解   描述符放在“usb_desc.c”和“usb_desc.h”文件中,更多细节参见USB — 初识USB协议(一)。 设备描述符   包含了设备的基本信息,比如USB版本号,端点0的传输大小,VID,PID,设备的类型等。   配置描述符   配置描述符数组包含了配置描述符、接口描述符、功能描述符,端点描述符等,具体的描述符含义根据每种USB的CLASS不同而含义有所不同,后期小节会陆续讲解。   其它描述符   其它描述符包括语言描述符,PID描述符、VID描述符,报告描述符等,这些描述符根据不同的厂商,不同的产品以及不同的USB应用而有所不通,我们会在后续的类容对这些描述符做一个简单的讲解。   3.3 中断处理函数   USB驱动最关键的部分在于中断处理函数部分,协议的大部分实现都是在中断中实现的,我们这里简单的讲解一下。首先进入USB中断处理函数,进入到USB_Istr()函数中去。   可以看到USB_Istr()函数实现了USB的中断的所有功能,我们这里只针对几个比较重要的函数进行讲解: 复位函数正确传输完成函数   3.3.1 复位函数   复位是在USB识别到设备的时候,主机主动发出的特定序列,当USB设备收到这个特定序列的时候,就会产生中断相应,并进入中断中去处理相应的函数,这里的复位中断处理函数主要是配置端点的属性及端点的大小。   注意一下宏定义“BTABLE_ADDRESS”的对应的USB中断缓存区地址的偏移,也就是512Byte的RAM空间,宏“ENDP0_RXADDR”等是定义端点的发送和接收地址存放在RAM空间的具体位置,以“BTABLE_ADDRESS”为偏移。   3.3.2 正确传输完成函数   正确传输完成函数分为枚举过程(端点0)的正确传输完成函数和非端点0的正确传输完成函数。   3.3.2.1 枚举过程正确传输完成函数   枚举过程的正确传输完成函数主要是接收SETUP指令请求,并相应的告知USB主机设备的描述符信息。   以下代码是处理USB主机的数据,把USB主机的SETUP请求数据存在pInformation结构体中,并在后续的函数进行指令的解析,并通过相对应的SETUP请求发送相对应的数据。   3.3.2.2 非端点0正确传输完成函数   非控制端点0正确传输完成函数根据不同的USB应用存在不同的差距,但是主体框架已经完成,只需要用户在特定的框架中填写特定的程序即可。   比如当前程序只用到端点1的TX和端点3的RX,就只需要在端点1的TX和端点3的RX中编写相应的应用程序,其它端点不必理会。   到这里,本章就基本上讲完了,主要还是从应用的角度去简单的讲解了一下代码,如果读者需要更深入的了解代码的结构,还是需要大家仔细去学习USB的驱动源码的。   接下来讲解STM32 USB的虚拟串口环回功能实现,敬请期待。。。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/61834.html

(0)
上一篇 2024年 8月 28日
下一篇 2024年 8月 28日

相关推荐

关注微信