找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13177|回复: 7
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主


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。













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



cube库目前好像真没有复合设备的例程。不过非CUBE库文件有。
stm32_f105-07_f2_f4_usb-host-device_lib.zip (3.73 MB, 下载次数: 93)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:341992 发表于 2018-6-19 13:53 | 只看该作者
学习学习,谢谢!
回复

使用道具 举报

板凳
ID:402268 发表于 2018-9-25 16:55 | 只看该作者
正在找相关的的资料,谢谢 好资料,51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:281047 发表于 2018-12-18 22:09 | 只看该作者
看楼主的详细说明,我下载来看看学习一下。good!
回复

使用道具 举报

5#
ID:476336 发表于 2019-2-14 00:33 | 只看该作者
学些下!
回复

使用道具 举报

6#
ID:788558 发表于 2020-6-24 12:04 | 只看该作者
正在搞这方面的东西,谢谢楼主
回复

使用道具 举报

7#
ID:787359 发表于 2020-6-25 10:46 | 只看该作者
谢谢大佬
回复

使用道具 举报

8#
ID:633428 发表于 2023-12-8 09:36 | 只看该作者
谢谢大佬 正好项目需要
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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