STM32 USB学习整理2

STM32 USB学习整理2

usbd_usr.c

个人觉得这个文件里没有什么值得研究的东西!
只有那个中断服务函数有点价值,高速的时候应该有一个void OTG_HS_IRQHandler(void) ;
整个文件基本围绕 USR_cb 展开。

#include "usbd_usr.h"
#include "usb_dcd_int.h"
#include <stdio.h> 
#include "usart.h" 
#include "usbd_cdc_vcp.h" 
//表示USB连接状态
//0,没有连接;
//1,已经连接;
vu8 bDeviceState=0;		//默认没有连接  

extern USB_OTG_CORE_HANDLE  USB_OTG_dev;

//USB OTG 中断服务函数
//处理所有USB中断
void OTG_FS_IRQHandler(void)  //全速中断服务
{
  	USBD_OTG_ISR_Handler(&USB_OTG_dev);//中断处理函数,处理一切中断
}  
//指向DEVICE_PROP结构体
//USB Device 用户回调函数. 
USBD_Usr_cb_TypeDef USR_cb =
{
  USBD_USR_Init,
  USBD_USR_DeviceReset,
  USBD_USR_DeviceConfigured,
  USBD_USR_DeviceSuspended,
  USBD_USR_DeviceResumed,
  USBD_USR_DeviceConnected,
  USBD_USR_DeviceDisconnected,    
};
//USB Device 用户自定义初始化函数
void USBD_USR_Init(void)
{
	printf("USBD_USR_Init\r\n");
} 
//USB Device 复位
//speed:USB速度,0,高速;1,全速;其他,错误.
void USBD_USR_DeviceReset (uint8_t speed)
{
	switch (speed)
	{
		case USB_OTG_SPEED_HIGH:
			printf("USB Device Library v1.1.0  [HS]\r\n");
			break; 
		case USB_OTG_SPEED_FULL: 
			printf("USB Device Library v1.1.0  [FS]\r\n");
			break;
		default:
			printf("USB Device Library v1.1.0  [??]\r\n"); 
			break;
	}
}
//USB Device 配置成功
void USBD_USR_DeviceConfigured (void)
{
    bDeviceState=1;
	printf("MSC Interface started.\r\n"); 
} 
//USB Device挂起
void USBD_USR_DeviceSuspended(void)
{
    bDeviceState=0;
	printf("Device In suspend mode.\r\n");
} 
//USB Device恢复
void USBD_USR_DeviceResumed(void)
{ 
	printf("Device Resumed\r\n");
}
//USB Device连接成功
void USBD_USR_DeviceConnected (void)
{
	bDeviceState=1;
	printf("USB Device Connected.\r\n");
}
//USB Device未连接
void USBD_USR_DeviceDisconnected (void)
{
	bDeviceState=0;
	printf("USB Device Disconnected.\r\n");
} 

usbd_desc.c

此文件主要提供USB字符串描述符,是对其他描述符的文字说明,且字符串描述符使用UNICODE编码,字符串描述符支持多国语言,当请求字符串描述符时需要使用16进制的 LANGID 来指定所期望的语言,以下程序中加入了一些自己理解的注释

#define USBD_VID     /*供应商ID*/                   0x0483  /*STMicroelectronics*/
#define USBD_PID     /*产品识别码*/                  0x5740

#define USBD_LANGID_STRING              0x409			/*语言 英语*/
#define USBD_MANUFACTURER_STRING        "STMicroelectronics"	/*意法半导体*/

#define USBD_PRODUCT_HS_STRING          "ALIENTEK STM32F4/F7 Virtual COM"	/*阿波罗F4虚拟串口*/
#define USBD_PRODUCT_FS_STRING          "ALIENTEK STM32F4/F7 Virtual COM"

#define USBD_CONFIGURATION_HS_STRING    "VCP Config"/*虚拟串口配置*/
#define USBD_CONFIGURATION_FS_STRING    "VCP Config"

#define USBD_INTERFACE_HS_STRING        "VCP Interface"/*虚拟串口接口*/
#define USBD_INTERFACE_FS_STRING        "VCP Interface"

这个文件基本上也是围绕着 USR_desc 展开的:

#define USB_DEVICE_DESCRIPTOR_TYPE              0x01/*设备类*/
#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02/*配置类*/
#define USB_STRING_DESCRIPTOR_TYPE              0x03/*字符串类*/
#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04/*接口类*/
#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05/*端点类*/
#define USB_SIZ_DEVICE_DESC                     18  /*   */
#define USB_SIZ_STRING_LANGID                   4   /*字符串语言*/

USBD_DEVICE USR_desc =
{
  USBD_USR_DeviceDescriptor,/*设备描述*/
  USBD_USR_LangIDStrDescriptor, /*指定语言   语言标识*/
  USBD_USR_ManufacturerStrDescriptor,/*制造商*/
  USBD_USR_ProductStrDescriptor,/*产品*/
  USBD_USR_SerialStrDescriptor,/*序列号*/
  USBD_USR_ConfigStrDescriptor,/*配置*/
  USBD_USR_InterfaceStrDescriptor,/*接口*/
};

#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
    #pragma data_alignment=4   
  #endif
#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
/* USB Standard Device Descriptor  USB标准设备描述符  18 个字节*/
__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
{
  0x12,                       /*bLength  长度18 */
  USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType  设备类*/
  0x00,                       /*bcdUSB */
  0x02,
  0x00,                       /*bDeviceClass*/
  0x00,                       /*bDeviceSubClass*/
  0x00,                       /*bDeviceProtocol*/
  USB_OTG_MAX_EP0_SIZE,       /*bMaxPacketSize   EP0的最大包长*/
  LOBYTE(USBD_VID),           /*idVendor   VID低八位*/
  HIBYTE(USBD_VID),           /*idVendor   VID高八位*/
  LOBYTE(USBD_PID),           /*idVendor   PID低八位*/
  HIBYTE(USBD_PID),           /*idVendor   PID高八位*/
  0x00,                       /*bcdDevice rel. 2.00*/
  0x02,
  USBD_IDX_MFC_STR,           /*Index of manufacturer  string  厂商描述*/
  USBD_IDX_PRODUCT_STR,       /*Index of product string  产品描述字符串*/
  USBD_IDX_SERIAL_STR,        /*Index of serial number string  序列索引*/
  USBD_CFG_MAX_NUM            /*bNumConfigurations  当前速度下支持多少种配置(不就1种吗?还整这么神秘) */
} ; /* USB_DeviceDescriptor */

对这部分不是很感兴趣,就这样吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值