[应用相关] STM32 USB驱动

[复制链接]
10851|66
 楼主| chenqiang10 发表于 2018-8-30 13:48 | 显示全部楼层
usbh_ioreq (.c, .h): 该文件处理USB事务的生成。
USBH_CtlSendSetup:发起一个设置事务。
USBH_CtlSendData:发起一个控制数据OUT阶段事务。
USBH_CtlReceiveData:发起一个控制数据IN阶段事务。
USBH_CtlReq:用于生成控制传输的高级功能(设置,数据,状态阶段)。
USBH_BulkSendData:发起 一个bulk OUT事务。
USBH_BulkReceiveData:发起一个 bulk IN事务。
USBH_InterruptSendData:发起一个 中断OUT事务。
USBH_InterruptReceiveData:发起一个 中断IN事务。
 楼主| chenqiang10 发表于 2018-8-30 14:04 | 显示全部楼层
usbh_hcs (.c, .h) : 该文件处理主机通道分配和触发进程。
USBH_Open_Channel:打开并配置新的主机通道。
USBH_Modify_Channel:修改现有的主机通道。
USBH_Alloc_Channel:将主机通道分配给设备端点(创建USB)。
USBH_Free_Channel:释放一个主机通道
USBH_DeAllocate_AllChannel:释放所有主机通道(在非初始化阶段使用)
 楼主| chenqiang10 发表于 2018-8-30 14:08 | 显示全部楼层
Class文件夹包含所有与类实现相关的文件,并符合这些类中构建的协议的规范。使用如下结构将类引入到USB驱动
  1. typedef struct _USBH_USR_PROP
  2. {
  3.   void (*Init)(void);       /* HostLibInitialized */
  4.   void (*DeInit)(void);       /* HostLibInitialized */  
  5.   void (*DeviceAttached)(void);           /* DeviceAttached */
  6.   void (*ResetDevice)(void);
  7.   void (*DeviceDisconnected)(void);
  8.   void (*OverCurrentDetected)(void);  
  9.   void (*DeviceSpeedDetected)(uint8_t DeviceSpeed);          /* DeviceSpeed */
  10.   void (*DeviceDescAvailable)(void *);    /* DeviceDescriptor is available */
  11.   void (*DeviceAddressAssigned)(void);  /* Address is assigned to USB Device */
  12.   void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *,
  13.                                      USBH_InterfaceDesc_TypeDef *,
  14.                                      USBH_EpDesc_TypeDef *);
  15.   /* Configuration Descriptor available */
  16.   void (*ManufacturerString)(void *);     /* ManufacturerString*/
  17.   void (*ProductString)(void *);          /* ProductString*/
  18.   void (*SerialNumString)(void *);        /* SerialNubString*/
  19.   void (*EnumerationDone)(void);           /* Enumeration finished */
  20.   USBH_USR_Status (*UserInput)(void);
  21.   int  (*UserApplication) (void);
  22.   void (*DeviceNotSupported)(void); /* Device is not supported*/
  23.   void (*UnrecoveredError)(void);
  24. }
  25. USBH_Usr_cb_TypeDef;


 楼主| chenqiang10 发表于 2018-8-30 14:31 | 显示全部楼层
在USB设备库初始化期间,Core部分通过选择相应的类回调结构来选择USB类。 在usbd_core.h文件中,类结构定义(详细说明见注释)如下:
  1. typedef struct _Device_cb
  2. {
  3.   uint8_t  (*Init)         (void *pdev , uint8_t cfgidx);/* 当设备收到设置的配置请求时调用此回调; 在这个函数中,类接口使用的端点被打开。 */
  4.   uint8_t  (*DeInit)       (void *pdev , uint8_t cfgidx);/* 当收到清除配置请求时调用此回调; 此函数关闭类接口使用的端点。*/
  5. /* Control Endpoints 控制端点使用 以下几个 */
  6.   uint8_t  (*Setup)        (void *pdev , USB_SETUP_REQ  *req);/* 调用此回调来处理特定的类设置请求 */
  7.   uint8_t  (*EP0_TxSent)   (void *pdev );/*发送状态完成时调用此回调。*/
  8.   uint8_t  (*EP0_RxReady)  (void *pdev );/*当接收状态结束时调用此回调。*/
  9.   /* Class Specific Endpoints*/
  10.   uint8_t  (*DataIn)       (void *pdev , uint8_t epnum);/*这个回调被调用来执行相对于非控制端点阶段的数据。*/
  11.   uint8_t  (*DataOut)      (void *pdev , uint8_t epnum);/*调用此回调函数以执行相对于非控制端点的数据输出阶段。*/
  12.   uint8_t  (*SOF)          (void *pdev);/*当收到SOF中断时调用此回调函数; 这个回调函数可以用来同步一些进程和帧开始。*/
  13.   uint8_t  (*IsoINIncomplete)  (void *pdev);/*当最后一个同步IN传输未完成时调用此回调。*/
  14.   uint8_t  (*IsoOUTIncomplete)  (void *pdev);/*当最后一个同步OUT传输未完成时调用此回调。*/

  15.   uint8_t  *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length);/*该回调返回USB配置描述符。*/
  16. #ifdef USB_OTG_HS_CORE
  17.   uint8_t  *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length);/*该回调在高速模式下返回使用的类的其他配置描述符*/
  18. #endif

  19. #ifdef USB_SUPPORT_USER_STRING_DESC
  20.   uint8_t  *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index,  uint16_t *length);/*这个回调函数返回用户定义的字符串描述符。*/
  21. #endif
  22. } USBD_Class_cb_TypeDef;


 楼主| chenqiang10 发表于 2018-8-30 14:32 | 显示全部楼层
该库提供用户回调结构,允许用户添加特殊代码来管理USB事件。 在usbd_core.h文件中,这个用户结构定义(具体介绍见注释)如下:
  1. typedef struct _USBD_USR_PROP
  2. {
  3.   void (*Init)(void);/* 该设备库启动(完成初始化后)时调用该回调。 */
  4.   void (*DeviceReset)(uint8_t speed);/*当设备检测到来自主机的重置事件时,会调用此回调。*/
  5.   void (*DeviceConfigured)(void);/*当设备收到设置的配置请求时,会调用此回调。*/
  6.   void (*DeviceSuspended)(void);/*当设备检测到来自主机的暂停事件时,会调用此回调。*/
  7.   void (*DeviceResumed)(void);/*当设备检测到来自主机的恢复事件时,会调用此回调。*/
  8.   void (*DeviceConnected)(void);/*当设备连接到主机时调用此回调。*/
  9.   void (*DeviceDisconnected)(void);/*当设备与主机断开连接时调用此回调。*/
  10. }
  11. USBD_Usr_cb_TypeDef;


paotangsan 发表于 2018-9-1 15:25 | 显示全部楼层
感谢楼主分享
wakayi 发表于 2018-9-1 15:38 | 显示全部楼层
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部