logo资料库

基于STM32F105 实现USB.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
基于 STM32F105 实现 USB-BULK 传输 由于项目需要,需要 USB 来传输,之前试的 HID 模式是已经调通,HID 基于 中断传输,一毫秒侦测一次,每次的传输量为 64 字节,一般传输量小的可以采 用这种模式,实时性也高,并且开发上位机也方便,不用自己再搞驱动什么的, 但是满足不了我的需求,后面查资料开始采用 bulk 模式 1. 基于 CUBEMX 配置 USB 工程 1.1:时钟 我的芯片采用外部 8M 的晶振,超频到 72M,配置 USB 时钟 48M 1.2:USB 配置 USB 的模式选择 device 模式,作为从机。
然后选择 Middleware-USB_DEVICE,选择模式为 CDC。 USB2.0 标准下定义了很多子类,有音频类,CDC 类,HID,打印,大容量存储类, HUB,智能卡等等,USB CDC 类的通信部分主要包含三部分:枚举过程、虚拟操 作和数据通信。CDC 具体研究的话,可以查看 USB 官网资料,以及 ST 关于 CDC 的介绍
PID 和 VID 是 USB 设备的唯一识别码,默认的 CUBEMX 生成的,插入电脑会显 示 ST Virtual Port,ST 官网对应的也有相关的驱动。用户可以根据自己选择定 义 PID 和 VID,以及修改描述符,驱动的话自己开发。 然后生成工程代码。 2. 工程代码修改 2.1:usbd_desc.c 设备描述符的修改 配置如下
2.2:usbd_cdc.c 修改配置信息 USB 的配置信息有很多包括配置描述符 接口描述符、端点描述符等等,但属 于其配置信息, 其位于 usbd_cdc.c 文件中,对应有三处  USBD_CDC_CfgHSDesc[USB_CDC_CONFIG_DESC_SIZ]  USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ]  USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] 配置信息采用数组来存储。HS 代表的是 high speed 高速 USB 的配置信息, FS 代表 full speed 信息,然后还有 other speed,我目前采用的是 F105 的芯片, 支持 full speed 而不支持 high speed。
如果怕出什么问题,可以将三个配置信息默认配置一样。 USB_CDC_CONFIG_DESC_SIZ 长度为 32 #define USB_CDC_CONFIG_DESC_SIZ 32U 2.3:usbd_cdc.c USB 初始化以及发送和接收 2.3.1 USB 初始换函数  CDC_IN_EP 对应的发送数据的端点 0x81U /* EP1 for data IN */  CDC_OUT_EP 对应接收数据的端点 0x01U /* EP1 for data OUT */  CDC_CMD_EP 对应的 CDC 命令端点 0x82U /* EP2 for CDC commands */枚举工程中会用到
2.3.2 USB 发送函数 2.3.4 USB 接收函数 接收数据的话会在中断函数里面调用。 网上看到好多使用双缓冲用来接收的用来提高速度。 定义两个数组用来接收 uint8_t USBD_RXBuffer1[CDC_DATA_FS_MAX_PACKET_SIZE]; uint8_t USBD_RXBuffer2[CDC_DATA_FS_MAX_PACKET_SIZE]; uint8_t BufFlag = 0x01; //用于判断两个缓冲区是否有数据
具体速度有没有提高,没怎么试过 2.4:MAIN 函数 Main 函数主要实现的就是,接收 PC 端发送的数据,然后同样的数据在发 送的 PC 端。
分享到:
收藏