找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13230|回复: 7
收起左侧

STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换

  [复制链接]
ID:127084 发表于 2016-6-17 18:31 | 显示全部楼层 |阅读模式
0.png

DeviceCDC&HostMSC-------------项目文件
STM32Cube_FW_F4_V1.10.0-------官方cube库(有几处修改)
STM-VCP-DRIVER.zip------------官方虚拟串口驱动


  程序实现了MSC主机和CDC设备的功能。设备处于哪种角色取决于ID线的状态:当ID线接地或插入microA接口时,设备工作于MSC主机模式;当ID线悬空或插入microB接口时,设备工作于CDC设备模式,在上电状态也可以热切换。

  设备工作于MSC主机模式时,会在插入的U盘根目录创建“STM32.TXT”文件,并写入“This is STM32 working with FatFs ”文本。
  设备工作于CDC设备模式时,在PC端会形成一个虚拟串口,PC通过串口发送给设备的数据,设备会回复给PC。


  为了根据ID线自动切换工作模式,需要对cube库修改。

  对cube库的修改项:
---------------------------------------------------------------------------------------
1、USBD_Init-->USBD_LL_Init-->HAL_PCD_Init-->USB_SetCurrentMode
  此处由USB_OTG_DEVICE_MODE修改为USB_OTG_DRD_MODE。

2、USBH_Init-->USBH_LL_Init-->HAL_HCD_Init-->USB_SetCurrentMode
  此处由USB_OTG_HOST_MODE修改为USB_OTG_DRD_MODE。

3、USBH_Init-->USBH_LL_Init-->HAL_HCD_Init-->USB_HostInit
  此处根据cfg.Sof_enable决定是否打开SOF中断,原程序默认打开SOF中断,会每1ms产生SOF中断传递给CLASS,实际上MSC-CLASS没用到这个中断。

4、usbd_cdc_interface.c
  与官方的CDC例子相比,去掉了串口相关的操作以及TIM,改为回环模式,在后台发送数据。

5、stm32f4xx_it.c-->OTG_FS_IRQHandler
  同时加入主机中断和设备中断处理函数,函数第一步会判断模式,所以不会产生冲突。
----------------------------------------------------------------------------------------

  后台中的USB_ModeSwitch函数根据CMOD位判断模式是否改变,以关闭当前模式和初始化另一个模式,是因为当初始化时USB_SetCurrentMode设置为USB_OTG_DRD_MODE,而且不使能HNP功能时,USBx->GINTSTS的CMOD位完全由ID线决定。后台主机的应用和设备的应用也要先判断当前模式是否相符。


  遗留的一个BUG:工作在设备虚拟串口模式时,向PC一次性发的数据包不能是64(最大包长)的整数倍,不然PC认为下位机发送没有完成,不会通知上层。这种情况,下位机可以再发一个零长度的包作为结束。


------------------------------------------------------------------------

  官方CUBE库里面没有USB主机兼USB设备的例子,因项目要求同一个USB口能支持U盘读写和与PC通信,自己就按照官方例子写了个例程。
  程序实现了MSC主机和CDC设备的功能。设备处于哪种角色取决于ID线的状态:当ID线接地或插入microA接口时,设备工作于MSC主机模式;当ID线悬空或插入microB接口时,设备工作于CDC设备模式,在上电状态也可以热切换。

  设备工作于MSC主机模式时,会在插入的U盘根目录创建“STM32.TXT”文件,并写入“This is STM32 working with FatFs ”文本。
  设备工作于CDC设备模式时,在PC端会形成一个虚拟串口,PC通过串口发送给设备的数据,设备会回复给PC。

101730ncro3z35goc3clon.jpg
102007v8k1mwk82yw1gl9h.png

102013m4tyo5wzezz44qwk.png

102029fc6daupu89cgu8dn.jpg


0.png



USBH_D_Demo.zip (3.81 MB, 下载次数: 174)
回复

使用道具 举报

ID:341992 发表于 2018-6-19 13:53 | 显示全部楼层
学习学习,谢谢!
回复

使用道具 举报

ID:402268 发表于 2018-9-25 16:55 | 显示全部楼层
正在找相关的的资料,谢谢 好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:281047 发表于 2018-12-18 22:09 | 显示全部楼层
看楼主的详细说明,我下载来看看学习一下。good!
回复

使用道具 举报

ID:476336 发表于 2019-2-14 00:33 | 显示全部楼层
学些下!
回复

使用道具 举报

ID:788558 发表于 2020-6-24 12:04 | 显示全部楼层
正在搞这方面的东西,谢谢楼主
回复

使用道具 举报

ID:787359 发表于 2020-6-25 10:46 | 显示全部楼层
谢谢大佬
回复

使用道具 举报

ID:633428 发表于 2023-12-8 09:36 | 显示全部楼层
谢谢大佬 正好项目需要
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表