usb

usb

利用stm32cube实现USB+FATFS的usbdisk程序--实现Fatfs对U盘文件操作

软件教程╰ˇ野萝莉ˇ╯ 回复了问题 • 87 人关注 • 38 个回复 • 23435 次浏览 • 2019-11-03 17:50 • 来自相关话题

STM32F105做HOST读取U盘多次插拔后会不识别U盘 重新初始化后正常识别的原因

问题困惑窝瓜 回复了问题 • 3 人关注 • 2 个回复 • 512 次浏览 • 2019-10-31 17:01 • 来自相关话题

(直播)利用stm32cubemx实现USBDFU对芯片程序的更新升级(板卡stm32f4discovery)

软件教程超帅的牛 回复了问题 • 50 人关注 • 24 个回复 • 20074 次浏览 • 2019-10-29 21:56 • 来自相关话题

一步步实现stm32cube的usb之CUSTOM_HID当串口使用 (stm32F407discoery板)

软件教程ˇ北岸星空… 回复了问题 • 47 人关注 • 31 个回复 • 11348 次浏览 • 2019-10-21 15:10 • 来自相关话题

学习Hal库的usbdisk记录

新手交流血染风采 回复了问题 • 3 人关注 • 4 个回复 • 3935 次浏览 • 2019-10-09 14:38 • 来自相关话题

使用STM32cubemx5.3生成L151RET6芯片的usb程序电脑不识别

问题困惑龙xing天下 回复了问题 • 2 人关注 • 1 个回复 • 339 次浏览 • 2019-09-03 13:09 • 来自相关话题

你们cubeMX5.3,f1V1.8生成的读U盘程序能用吗,读不出U盘了呢呢

回复

问题困惑hed88 回复了问题 • 1 人关注 • 1 个回复 • 230 次浏览 • 2019-08-02 10:10 • 来自相关话题

STM32cubeMX5.2使用L1 V1.9的库生成的STM32L151RET6USB程序不行

回复

问题困惑zyx119 回复了问题 • 1 人关注 • 1 个回复 • 357 次浏览 • 2019-07-13 15:35 • 来自相关话题

再谈USB CDC 实现USB bulk传输

经验分享温特 回复了问题 • 9 人关注 • 4 个回复 • 1547 次浏览 • 2019-06-28 10:10 • 来自相关话题

记录:利用U盘直接烧录hex文件到flash来更新app程序

软件教程寂静の烛光 回复了问题 • 35 人关注 • 17 个回复 • 9133 次浏览 • 2019-06-21 17:30 • 来自相关话题

Stm32 USB 复合设备 HID+CDC不支持热插拔

回复

问题困惑chen1233 发起了问题 • 1 人关注 • 0 个回复 • 1048 次浏览 • 2018-10-30 17:39 • 来自相关话题

有谁实现过CUBAMX配置USB实现bulk数据通信啊 求教能给个例程吗

回复

问题困惑乌龟也会飞 回复了问题 • 1 人关注 • 1 个回复 • 637 次浏览 • 2018-09-07 15:04 • 来自相关话题

CubeMX配置stm32 F103RCT6实现USB bulk传输

软件教程乌龟也会飞 发表了文章 • 21 个评论 • 5492 次浏览 • 2018-09-07 14:47 • 来自相关话题

友情提示请全屏查看(By荒野大嫖客)ST官方虽然提供很多关于USB固件库集成的(像什么VCP HID等等),但是吧在我们实际的项目开发中VCP(虚拟串口基本不用吧)另外官方提供的驱动程序都是ST厂商标志的,这对于我们来说给客户产品的时候驱动商标是别人公司好像挺不好的,故此鉴于项目的实际开发所需我们一般都是实现一个自定义的USB协议而非什么VCP 大容量的U盘之类的来通信(当然有这个需要的除外).于是就想ST把USB底层的协议都已经搞定了那么修修改改就应该能实现我所需要的了,在这过程中由于对USB协议不必熟悉弄起来不容易,其余的论坛上下载动不动就是要金币或者去买他的开发板才给你源码,或者动不动就是什么VCP来冒充根本就不是我所需要的 本文为cubeMX实现bulk批量传输,实现过程借鉴了网上最小量修改实现HID双向通信http://www.stm32cube.com/article/138 在此致谢Digital_Chip 由于HID的通信速率相对来说不是很高,如果要进行大数据量高速度传输就有可能不太满足条件,故此使用bulk传输是一个不错的选择,好了废话就说这么多了,我把过程发出来一是作为自己弄这个的一个总结将来需要时自己好看一下,二是给其余所需要的人提供点思路,完全免费的啊,不想他们动不动就是你买我开发板我给你源码 (火大)   荒野大嫖客太穷了(呜呜)历时两天才搞定,资质较差如果看官觉得有用给个赞吧一 条件cubeMX4.26.1 MDK5 F1的固件库 芯片stm32F103RCT6(F1系列根据自己的板子来选,我手边没有F4的固定可能有些函数不一样,不过也可以作为一种参考来实现F4)1,开启外部晶振 开启debug功能(我是SWD,如果板载是SWD接口不开启此功能的话第二次下载程序就会下载不进去 需要在复位状态下下载)  开启USB外设 在中间件上选择CDC(虚拟串口,需要用它来改)二:配置系统时钟72MHz(根据自己需要) USB为48MHz(必须)三:更改USB的中间件(可以不更改 自己做实验的话) 如果项目的话更改(比如PID VID更改为自己公司的去掉ST公司的字符串等)我做如下更改1024纪念程序员 鲁班大师(我的最爱,虽然比较坑都一年多了还在钻石 呜呜)四:初始化生成代码五:修改描述符 将usbd_des.c中的USBD_FS_DeviceDesc[USB_LEN_DEV_DESC]数组修改为如下六修改配置描述符 接口描述符等七:将下面的__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] 和__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] 数组中的内容修改成和上面的一样就不贴图了八将USB_CDC_CONFIG_DESC_SIZ   修改为32九:定义两个变量 用于缓存数据 (全局的啊,其他.c文件可以访问的 我放在main.c中定义的 申明在头文件 其余所使用的地方包含该头文件) 并修改USBD_CDC_Init入下第二张图片十 :修改USBD_CDC_DataOut如下十一:在main.c的头文件中加载如下头文件 并修改main.c中的while(1)循环如下实现bulk通信回环好到此所有的bulk更改部分已经完成了,下面是见证奇迹的石头,编译程序下载程序不贴图了(由于我之前就做成功了,PID 和VID就是1024所以下完程序后插上USB就自动加载驱动了为了更好的展示效果我将本次的工程的PID和VID更改为如下,展示目前不能加载驱动)下载程序后重新插上USB在电脑的设备管理器中看到了我们的鲁班大师 智商250标志但是是黄色的因为没有驱动嘛右键属性看PID和VID是我们后设置的 可以使用电脑的计算机程序员模式转换至此USB bulk传输过程设备已经完成了验证,下面为试验可以进行通信我是用的是VISA来做驱动的打开NI_VISA Driver Wizard 进入如下界面选择USB 电机next 选中我们的设备 ranh然后一路狂点next知道finish最后驱动制作完成然后重新打开设备管理器查看我们的设备 驱动加载正常 没有了黄色图标以上为驱动制作加载完成,这只是证明了能够识别了,但是能不能通信呢请看下面 还是VISA 目前制作简单测试啊没有写专门的上位机 打开VISA Interactive ctrol 双击我们的设备双击后进入以下界面 可以看到我们设备的一些信息选择input/output界面在发送兰中写入要发送的数据,随便发目前只做了回环没有定义什么命令之类的发送什么,那么就应该回什么点击write变成如下情况点击Read后变成了如下界面通过以上两张图片对比发现我们实现了回环测试发送什么就接受到什么 以上证明了我们的设计是符合要求的,用于项目的话还需要进行相关的数据进行协议组织,同时增加方式提高传输速度等                                                                    以上整理提供by荒野大嫖客     如果有幸你读到这篇文章给个赞吧 查看全部

友情提示请全屏查看(By荒野大嫖客)

ST官方虽然提供很多关于USB固件库集成的(像什么VCP HID等等),但是吧在我们实际的项目开发中VCP(虚拟串口基本不用吧)另外官方提供的驱动程序都是ST厂商标志的,这对于我们来说给客户产品的时候驱动商标是别人公司好像挺不好的,故此鉴于项目的实际开发所需我们一般都是实现一个自定义的USB协议而非什么VCP 大容量的U盘之类的来通信(当然有这个需要的除外).于是就想ST把USB底层的协议都已经搞定了那么修修改改就应该能实现我所需要的了,在这过程中由于对USB协议不必熟悉弄起来不容易,其余的论坛上下载动不动就是要金币或者去买他的开发板才给你源码,或者动不动就是什么VCP来冒充根本就不是我所需要的 本文为cubeMX实现bulk批量传输,实现过程借鉴了网上最小量修改实现HID双向通信http://www.stm32cube.com/article/138 在此致谢Digital_Chip 

由于HID的通信速率相对来说不是很高,如果要进行大数据量高速度传输就有可能不太满足条件,故此使用bulk传输是一个不错的选择,好了废话就说这么多了,我把过程发出来一是作为自己弄这个的一个总结将来需要时自己好看一下,二是给其余所需要的人提供点思路,完全免费的啊,不想他们动不动就是你买我开发板我给你源码 (火大)   荒野大嫖客太穷了(呜呜)历时两天才搞定,资质较差如果看官觉得有用给个赞吧

一 条件cubeMX4.26.1 MDK5 F1的固件库 芯片stm32F103RCT6(F1系列根据自己的板子来选,我手边没有F4的固定可能有些函数不一样,不过也可以作为一种参考来实现F4)

1,开启外部晶振 开启debug功能(我是SWD,如果板载是SWD接口不开启此功能的话第二次下载程序就会下载不进去 需要在复位状态下下载)  开启USB外设 在中间件上选择CDC(虚拟串口,需要用它来改)

image.png

二:配置系统时钟72MHz(根据自己需要) USB为48MHz(必须)

image.png

三:更改USB的中间件(可以不更改 自己做实验的话) 如果项目的话更改(比如PID VID更改为自己公司的去掉ST公司的字符串等)我做如下更改1024纪念程序员 鲁班大师(我的最爱,虽然比较坑都一年多了还在钻石 呜呜)

image.png

四:初始化生成代码

image.png

五:修改描述符 将usbd_des.c中的USBD_FS_DeviceDesc[USB_LEN_DEV_DESC]数组修改为如下

image.png六修改配置描述符 接口描述符等
image.png

七:将下面的__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] 和__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] 数组中的内容修改成和上面的一样就不贴图了

八将USB_CDC_CONFIG_DESC_SIZ   修改为32

image.png

九:定义两个变量 用于缓存数据 (全局的啊,其他.c文件可以访问的 我放在main.c中定义的 申明在头文件 其余所使用的地方包含该头文件) 并修改USBD_CDC_Init入下第二张图片


image.png

image.png



十 :修改USBD_CDC_DataOut如下

image.png


十一:在main.c的头文件中加载如下头文件 并修改main.c中的while(1)循环如下实现bulk通信回环

image.png

image.png

好到此所有的bulk更改部分已经完成了,下面是见证奇迹的石头,编译程序下载程序不贴图了(由于我之前就做成功了,PID 和VID就是1024所以下完程序后插上USB就自动加载驱动了为了更好的展示效果我将本次的工程的PID和VID更改为如下,展示目前不能加载驱动)

image.png


下载程序后重新插上USB在电脑的设备管理器中看到了我们的鲁班大师 智商250标志但是是黄色的因为没有驱动嘛

image.png

右键属性看PID和VID是我们后设置的 可以使用电脑的计算机程序员模式转换

image.png


至此USB bulk传输过程设备已经完成了验证,下面为试验可以进行通信我是用的是VISA来做驱动的

打开NI_VISA Driver Wizard 

image.png


进入如下界面


image.png


选择USB 电机next 

image.png

选中我们的设备 ranh然后一路狂点next知道finish最后驱动制作完成

然后重新打开设备管理器查看我们的设备 驱动加载正常 没有了黄色图标

image.png

image.png

以上为驱动制作加载完成,这只是证明了能够识别了,但是能不能通信呢请看下面 还是VISA 目前制作简单测试啊没有写专门的上位机 打开VISA Interactive ctrol 双击我们的设备

image.png

双击后进入以下界面 可以看到我们设备的一些信息

image.png

选择input/output界面

image.png

在发送兰中写入要发送的数据,随便发目前只做了回环没有定义什么命令之类的发送什么,那么就应该回什么

点击write变成如下情况

image.png

点击Read后变成了如下界面

image.png

通过以上两张图片对比发现我们实现了回环测试发送什么就接受到什么 以上证明了我们的设计是符合要求的,用于项目的话还需要进行相关的数据进行协议组织,同时增加方式提高传输速度等

                                                                    以上整理提供by荒野大嫖客     如果有幸你读到这篇文章给个赞吧



STM32F103ZET(基于秉火开发板)+Cubemx(F1 V1.60库)+USB 虚拟串口+SD卡、串行Flash模拟U盘

经验分享开始现在-s 发表了文章 • 1 个评论 • 3128 次浏览 • 2017-12-11 13:59 • 来自相关话题

首先说明下开发条件:1、开发板:秉火霸道,STM32F103ZET2、软件:Cubemx V4.23(F1 V1.60库)3、硬件: STM32模拟USB设备:虚拟串口 CDC、HID、MSC问题描述: 官方生成的代码有的人说电脑没有反应,不会出现USB设备!解决办法:1、查看硬件原理图    注意D+要设置为高电平,全速USB,这时候需要PD3引脚为低电平,当然了你也可以在软件里设置DP为上拉,可惜最新的1.6库是无法设置DP引脚的,所以需要我们自己根据自己的硬件原理图查看下,DP引脚是否上拉为3.3V!    也有人说是Vbus引脚的问题,应该在设置里面把Vbus失效不使能,可惜1.6的库没有这个设置,好在我硬件里面已经上拉为5V,将Vbus失效了!    2、USB虚拟串口:主要就是使用CDC_Receive_FS( UserRxBuffer,(uint32_t *)(sizeof(UserRxBuffer)));和    CDC_Transmit_FS((uint8_t*)UserRxBuffer,sizeof(UserRxBuffer));这两个函数,感觉不好用,纯粹属于测试,发送和接收成功,感兴趣可以自己研究!    3、HID测试成功,正常读取 polling_interval=USBD_HID_GetPollingInterval(&hUsbDeviceFS);数值,至于具体怎么使用没有深入研究。    4、SD卡模拟U盘:    主要修改生成的usbd_storage_if.c文件里面STORAGE_Read_FS()和STORAGE_Write_FS()函数,注意blk_addr 不需要乘以512(SD卡一个块为512字节),因为不同版本库之间有的乘以512,有的不乘,但是最新的1.6库是不需要乘以512的,blk_addr 就是起始地址的意思,而blk_len表示是读多少块,而不是读多少字节数,大家一定注意!    HAL_SD_WriteBlocks(&hsd, (uint8_t *)buf, blk_addr , blk_len, 1000)    HAL_SD_ReadBlocks(&hsd,(uint8_t *)buf, blk_addr , blk_len, 1000)    5、SPIFLASH模拟U盘暂时没有成功,可能是自己板子的flash有问题,出现无法格式化的情况,还需要继续研究,也希望已经搞好的朋友分享一下!    6、联系方式:微信Startingray,本人准备将cubemx的小bug解决的过程记录下来,也是给爱好者一点启示,欢迎微信和我沟通,共同进步!个人觉得Cubemx是未来的发展方向,可以使我们避免很多小错误,但是由于现在软件版本之间的兼容性,加上不同版本库之间存在的bug,还是需要我们在使用时时刻保持警惕! 查看全部

首先说明下开发条件:

1、开发板:秉火霸道,STM32F103ZET

2、软件:Cubemx V4.23(F1 V1.60库)

3、硬件: STM32模拟USB设备:虚拟串口 CDC、HID、MSC

问题描述: 官方生成的代码有的人说电脑没有反应,不会出现USB设备!

解决办法:

1、查看硬件原理图

捕获.JPG

    注意D+要设置为高电平,全速USB,这时候需要PD3引脚为低电平,当然了你也可以在软件里设置DP为上拉,可惜最新的1.6库是无法设置DP引脚的,所以需要我们自己根据自己的硬件原理图查看下,DP引脚是否上拉为3.3V!

    也有人说是Vbus引脚的问题,应该在设置里面把Vbus失效不使能,可惜1.6的库没有这个设置,好在我硬件里面已经上拉为5V,将Vbus失效了!


    2、USB虚拟串口:

主要就是使用CDC_Receive_FS( UserRxBuffer,(uint32_t *)(sizeof(UserRxBuffer)));和

   CDC_Transmit_FS((uint8_t*)UserRxBuffer,sizeof(UserRxBuffer));这两个函数,感觉不好用,纯粹属于测试,发送和接收成功,感兴趣可以自己研究!


    3、HID测试成功,正常读取 polling_interval=USBD_HID_GetPollingInterval(&hUsbDeviceFS);数值,至于具体怎么使用没有深入研究。


    4、SD卡模拟U盘:

    主要修改生成的usbd_storage_if.c文件里面STORAGE_Read_FS()和STORAGE_Write_FS()函数,注意blk_addr 不需要乘以512(SD卡一个块为512字节),因为不同版本库之间有的乘以512,有的不乘,但是最新的1.6库是不需要乘以512的,blk_addr 就是起始地址的意思,而blk_len表示是读多少块,而不是读多少字节数,大家一定注意!

    HAL_SD_WriteBlocks(&hsd, (uint8_t *)buf, blk_addr , blk_len, 1000)

    HAL_SD_ReadBlocks(&hsd,(uint8_t *)buf, blk_addr , blk_len, 1000)


    5、SPIFLASH模拟U盘暂时没有成功,可能是自己板子的flash有问题,出现无法格式化的情况,还需要继续研究,也希望已经搞好的朋友分享一下!


    6、联系方式:微信Startingray,本人准备将cubemx的小bug解决的过程记录下来,也是给爱好者一点启示,欢迎微信和我沟通,共同进步!个人觉得Cubemx是未来的发展方向,可以使我们避免很多小错误,但是由于现在软件版本之间的兼容性,加上不同版本库之间存在的bug,还是需要我们在使用时时刻保持警惕!



103cube生成USB读SD卡程序问题

问题困惑偏执丨 回复了问题 • 2 人关注 • 2 个回复 • 1491 次浏览 • 2017-08-11 20:31 • 来自相关话题

条新动态, 点击查看

另外, 这个完整的工程幸好以前都放到百度网盘了, 我刚把它移动到了论坛的专用百度网盘里了, 

现在可以去下载测试了 , 这个工程的名字: Hi... 显示全部 »

另外, 这个完整的工程幸好以前都放到百度网盘了, 我刚把它移动到了论坛的专用百度网盘里了, 

现在可以去下载测试了 , 这个工程的名字: Hid_USB(实现hid当串口使用程序).7z

需要的去 http://pan.baidu.com/s/1gdhcja7 里面找

利用stm32cube实现USB+FATFS的usbdisk程序--实现Fatfs对U盘文件操作

回复

软件教程╰ˇ野萝莉ˇ╯ 回复了问题 • 87 人关注 • 38 个回复 • 23435 次浏览 • 2019-11-03 17:50 • 来自相关话题

STM32F105做HOST读取U盘多次插拔后会不识别U盘 重新初始化后正常识别的原因

回复

问题困惑窝瓜 回复了问题 • 3 人关注 • 2 个回复 • 512 次浏览 • 2019-10-31 17:01 • 来自相关话题

(直播)利用stm32cubemx实现USBDFU对芯片程序的更新升级(板卡stm32f4discovery)

回复

软件教程超帅的牛 回复了问题 • 50 人关注 • 24 个回复 • 20074 次浏览 • 2019-10-29 21:56 • 来自相关话题

一步步实现stm32cube的usb之CUSTOM_HID当串口使用 (stm32F407discoery板)

回复

软件教程ˇ北岸星空… 回复了问题 • 47 人关注 • 31 个回复 • 11348 次浏览 • 2019-10-21 15:10 • 来自相关话题

学习Hal库的usbdisk记录

回复

新手交流血染风采 回复了问题 • 3 人关注 • 4 个回复 • 3935 次浏览 • 2019-10-09 14:38 • 来自相关话题

使用STM32cubemx5.3生成L151RET6芯片的usb程序电脑不识别

回复

问题困惑龙xing天下 回复了问题 • 2 人关注 • 1 个回复 • 339 次浏览 • 2019-09-03 13:09 • 来自相关话题

你们cubeMX5.3,f1V1.8生成的读U盘程序能用吗,读不出U盘了呢呢

回复

问题困惑hed88 回复了问题 • 1 人关注 • 1 个回复 • 230 次浏览 • 2019-08-02 10:10 • 来自相关话题

STM32cubeMX5.2使用L1 V1.9的库生成的STM32L151RET6USB程序不行

回复

问题困惑zyx119 回复了问题 • 1 人关注 • 1 个回复 • 357 次浏览 • 2019-07-13 15:35 • 来自相关话题

再谈USB CDC 实现USB bulk传输

回复

经验分享温特 回复了问题 • 9 人关注 • 4 个回复 • 1547 次浏览 • 2019-06-28 10:10 • 来自相关话题

记录:利用U盘直接烧录hex文件到flash来更新app程序

回复

软件教程寂静の烛光 回复了问题 • 35 人关注 • 17 个回复 • 9133 次浏览 • 2019-06-21 17:30 • 来自相关话题

Stm32 USB 复合设备 HID+CDC不支持热插拔

回复

问题困惑chen1233 发起了问题 • 1 人关注 • 0 个回复 • 1048 次浏览 • 2018-10-30 17:39 • 来自相关话题

有谁实现过CUBAMX配置USB实现bulk数据通信啊 求教能给个例程吗

回复

问题困惑乌龟也会飞 回复了问题 • 1 人关注 • 1 个回复 • 637 次浏览 • 2018-09-07 15:04 • 来自相关话题

103cube生成USB读SD卡程序问题

回复

问题困惑偏执丨 回复了问题 • 2 人关注 • 2 个回复 • 1491 次浏览 • 2017-08-11 20:31 • 来自相关话题

stm32cube实现USB+SD卡+FATFS问题

回复

问题困惑bme_bright 发起了问题 • 2 人关注 • 0 个回复 • 2486 次浏览 • 2016-09-29 21:30 • 来自相关话题

(转)关于usb端点方面的理解,endpoint

回复

新手交流admin 发起了问题 • 3 人关注 • 0 个回复 • 2224 次浏览 • 2016-08-08 16:24 • 来自相关话题

CubeMX配置stm32 F103RCT6实现USB bulk传输

软件教程乌龟也会飞 发表了文章 • 21 个评论 • 5492 次浏览 • 2018-09-07 14:47 • 来自相关话题

友情提示请全屏查看(By荒野大嫖客)ST官方虽然提供很多关于USB固件库集成的(像什么VCP HID等等),但是吧在我们实际的项目开发中VCP(虚拟串口基本不用吧)另外官方提供的驱动程序都是ST厂商标志的,这对于我们来说给客户产品的时候驱动商标是别人公司好像挺不好的,故此鉴于项目的实际开发所需我们一般都是实现一个自定义的USB协议而非什么VCP 大容量的U盘之类的来通信(当然有这个需要的除外).于是就想ST把USB底层的协议都已经搞定了那么修修改改就应该能实现我所需要的了,在这过程中由于对USB协议不必熟悉弄起来不容易,其余的论坛上下载动不动就是要金币或者去买他的开发板才给你源码,或者动不动就是什么VCP来冒充根本就不是我所需要的 本文为cubeMX实现bulk批量传输,实现过程借鉴了网上最小量修改实现HID双向通信http://www.stm32cube.com/article/138 在此致谢Digital_Chip 由于HID的通信速率相对来说不是很高,如果要进行大数据量高速度传输就有可能不太满足条件,故此使用bulk传输是一个不错的选择,好了废话就说这么多了,我把过程发出来一是作为自己弄这个的一个总结将来需要时自己好看一下,二是给其余所需要的人提供点思路,完全免费的啊,不想他们动不动就是你买我开发板我给你源码 (火大)   荒野大嫖客太穷了(呜呜)历时两天才搞定,资质较差如果看官觉得有用给个赞吧一 条件cubeMX4.26.1 MDK5 F1的固件库 芯片stm32F103RCT6(F1系列根据自己的板子来选,我手边没有F4的固定可能有些函数不一样,不过也可以作为一种参考来实现F4)1,开启外部晶振 开启debug功能(我是SWD,如果板载是SWD接口不开启此功能的话第二次下载程序就会下载不进去 需要在复位状态下下载)  开启USB外设 在中间件上选择CDC(虚拟串口,需要用它来改)二:配置系统时钟72MHz(根据自己需要) USB为48MHz(必须)三:更改USB的中间件(可以不更改 自己做实验的话) 如果项目的话更改(比如PID VID更改为自己公司的去掉ST公司的字符串等)我做如下更改1024纪念程序员 鲁班大师(我的最爱,虽然比较坑都一年多了还在钻石 呜呜)四:初始化生成代码五:修改描述符 将usbd_des.c中的USBD_FS_DeviceDesc[USB_LEN_DEV_DESC]数组修改为如下六修改配置描述符 接口描述符等七:将下面的__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] 和__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] 数组中的内容修改成和上面的一样就不贴图了八将USB_CDC_CONFIG_DESC_SIZ   修改为32九:定义两个变量 用于缓存数据 (全局的啊,其他.c文件可以访问的 我放在main.c中定义的 申明在头文件 其余所使用的地方包含该头文件) 并修改USBD_CDC_Init入下第二张图片十 :修改USBD_CDC_DataOut如下十一:在main.c的头文件中加载如下头文件 并修改main.c中的while(1)循环如下实现bulk通信回环好到此所有的bulk更改部分已经完成了,下面是见证奇迹的石头,编译程序下载程序不贴图了(由于我之前就做成功了,PID 和VID就是1024所以下完程序后插上USB就自动加载驱动了为了更好的展示效果我将本次的工程的PID和VID更改为如下,展示目前不能加载驱动)下载程序后重新插上USB在电脑的设备管理器中看到了我们的鲁班大师 智商250标志但是是黄色的因为没有驱动嘛右键属性看PID和VID是我们后设置的 可以使用电脑的计算机程序员模式转换至此USB bulk传输过程设备已经完成了验证,下面为试验可以进行通信我是用的是VISA来做驱动的打开NI_VISA Driver Wizard 进入如下界面选择USB 电机next 选中我们的设备 ranh然后一路狂点next知道finish最后驱动制作完成然后重新打开设备管理器查看我们的设备 驱动加载正常 没有了黄色图标以上为驱动制作加载完成,这只是证明了能够识别了,但是能不能通信呢请看下面 还是VISA 目前制作简单测试啊没有写专门的上位机 打开VISA Interactive ctrol 双击我们的设备双击后进入以下界面 可以看到我们设备的一些信息选择input/output界面在发送兰中写入要发送的数据,随便发目前只做了回环没有定义什么命令之类的发送什么,那么就应该回什么点击write变成如下情况点击Read后变成了如下界面通过以上两张图片对比发现我们实现了回环测试发送什么就接受到什么 以上证明了我们的设计是符合要求的,用于项目的话还需要进行相关的数据进行协议组织,同时增加方式提高传输速度等                                                                    以上整理提供by荒野大嫖客     如果有幸你读到这篇文章给个赞吧 查看全部

友情提示请全屏查看(By荒野大嫖客)

ST官方虽然提供很多关于USB固件库集成的(像什么VCP HID等等),但是吧在我们实际的项目开发中VCP(虚拟串口基本不用吧)另外官方提供的驱动程序都是ST厂商标志的,这对于我们来说给客户产品的时候驱动商标是别人公司好像挺不好的,故此鉴于项目的实际开发所需我们一般都是实现一个自定义的USB协议而非什么VCP 大容量的U盘之类的来通信(当然有这个需要的除外).于是就想ST把USB底层的协议都已经搞定了那么修修改改就应该能实现我所需要的了,在这过程中由于对USB协议不必熟悉弄起来不容易,其余的论坛上下载动不动就是要金币或者去买他的开发板才给你源码,或者动不动就是什么VCP来冒充根本就不是我所需要的 本文为cubeMX实现bulk批量传输,实现过程借鉴了网上最小量修改实现HID双向通信http://www.stm32cube.com/article/138 在此致谢Digital_Chip 

由于HID的通信速率相对来说不是很高,如果要进行大数据量高速度传输就有可能不太满足条件,故此使用bulk传输是一个不错的选择,好了废话就说这么多了,我把过程发出来一是作为自己弄这个的一个总结将来需要时自己好看一下,二是给其余所需要的人提供点思路,完全免费的啊,不想他们动不动就是你买我开发板我给你源码 (火大)   荒野大嫖客太穷了(呜呜)历时两天才搞定,资质较差如果看官觉得有用给个赞吧

一 条件cubeMX4.26.1 MDK5 F1的固件库 芯片stm32F103RCT6(F1系列根据自己的板子来选,我手边没有F4的固定可能有些函数不一样,不过也可以作为一种参考来实现F4)

1,开启外部晶振 开启debug功能(我是SWD,如果板载是SWD接口不开启此功能的话第二次下载程序就会下载不进去 需要在复位状态下下载)  开启USB外设 在中间件上选择CDC(虚拟串口,需要用它来改)

image.png

二:配置系统时钟72MHz(根据自己需要) USB为48MHz(必须)

image.png

三:更改USB的中间件(可以不更改 自己做实验的话) 如果项目的话更改(比如PID VID更改为自己公司的去掉ST公司的字符串等)我做如下更改1024纪念程序员 鲁班大师(我的最爱,虽然比较坑都一年多了还在钻石 呜呜)

image.png

四:初始化生成代码

image.png

五:修改描述符 将usbd_des.c中的USBD_FS_DeviceDesc[USB_LEN_DEV_DESC]数组修改为如下

image.png六修改配置描述符 接口描述符等
image.png

七:将下面的__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] 和__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] 数组中的内容修改成和上面的一样就不贴图了

八将USB_CDC_CONFIG_DESC_SIZ   修改为32

image.png

九:定义两个变量 用于缓存数据 (全局的啊,其他.c文件可以访问的 我放在main.c中定义的 申明在头文件 其余所使用的地方包含该头文件) 并修改USBD_CDC_Init入下第二张图片


image.png

image.png



十 :修改USBD_CDC_DataOut如下

image.png


十一:在main.c的头文件中加载如下头文件 并修改main.c中的while(1)循环如下实现bulk通信回环

image.png

image.png

好到此所有的bulk更改部分已经完成了,下面是见证奇迹的石头,编译程序下载程序不贴图了(由于我之前就做成功了,PID 和VID就是1024所以下完程序后插上USB就自动加载驱动了为了更好的展示效果我将本次的工程的PID和VID更改为如下,展示目前不能加载驱动)

image.png


下载程序后重新插上USB在电脑的设备管理器中看到了我们的鲁班大师 智商250标志但是是黄色的因为没有驱动嘛

image.png

右键属性看PID和VID是我们后设置的 可以使用电脑的计算机程序员模式转换

image.png


至此USB bulk传输过程设备已经完成了验证,下面为试验可以进行通信我是用的是VISA来做驱动的

打开NI_VISA Driver Wizard 

image.png


进入如下界面


image.png


选择USB 电机next 

image.png

选中我们的设备 ranh然后一路狂点next知道finish最后驱动制作完成

然后重新打开设备管理器查看我们的设备 驱动加载正常 没有了黄色图标

image.png

image.png

以上为驱动制作加载完成,这只是证明了能够识别了,但是能不能通信呢请看下面 还是VISA 目前制作简单测试啊没有写专门的上位机 打开VISA Interactive ctrol 双击我们的设备

image.png

双击后进入以下界面 可以看到我们设备的一些信息

image.png

选择input/output界面

image.png

在发送兰中写入要发送的数据,随便发目前只做了回环没有定义什么命令之类的发送什么,那么就应该回什么

点击write变成如下情况

image.png

点击Read后变成了如下界面

image.png

通过以上两张图片对比发现我们实现了回环测试发送什么就接受到什么 以上证明了我们的设计是符合要求的,用于项目的话还需要进行相关的数据进行协议组织,同时增加方式提高传输速度等

                                                                    以上整理提供by荒野大嫖客     如果有幸你读到这篇文章给个赞吧



STM32F103ZET(基于秉火开发板)+Cubemx(F1 V1.60库)+USB 虚拟串口+SD卡、串行Flash模拟U盘

经验分享开始现在-s 发表了文章 • 1 个评论 • 3128 次浏览 • 2017-12-11 13:59 • 来自相关话题

首先说明下开发条件:1、开发板:秉火霸道,STM32F103ZET2、软件:Cubemx V4.23(F1 V1.60库)3、硬件: STM32模拟USB设备:虚拟串口 CDC、HID、MSC问题描述: 官方生成的代码有的人说电脑没有反应,不会出现USB设备!解决办法:1、查看硬件原理图    注意D+要设置为高电平,全速USB,这时候需要PD3引脚为低电平,当然了你也可以在软件里设置DP为上拉,可惜最新的1.6库是无法设置DP引脚的,所以需要我们自己根据自己的硬件原理图查看下,DP引脚是否上拉为3.3V!    也有人说是Vbus引脚的问题,应该在设置里面把Vbus失效不使能,可惜1.6的库没有这个设置,好在我硬件里面已经上拉为5V,将Vbus失效了!    2、USB虚拟串口:主要就是使用CDC_Receive_FS( UserRxBuffer,(uint32_t *)(sizeof(UserRxBuffer)));和    CDC_Transmit_FS((uint8_t*)UserRxBuffer,sizeof(UserRxBuffer));这两个函数,感觉不好用,纯粹属于测试,发送和接收成功,感兴趣可以自己研究!    3、HID测试成功,正常读取 polling_interval=USBD_HID_GetPollingInterval(&hUsbDeviceFS);数值,至于具体怎么使用没有深入研究。    4、SD卡模拟U盘:    主要修改生成的usbd_storage_if.c文件里面STORAGE_Read_FS()和STORAGE_Write_FS()函数,注意blk_addr 不需要乘以512(SD卡一个块为512字节),因为不同版本库之间有的乘以512,有的不乘,但是最新的1.6库是不需要乘以512的,blk_addr 就是起始地址的意思,而blk_len表示是读多少块,而不是读多少字节数,大家一定注意!    HAL_SD_WriteBlocks(&hsd, (uint8_t *)buf, blk_addr , blk_len, 1000)    HAL_SD_ReadBlocks(&hsd,(uint8_t *)buf, blk_addr , blk_len, 1000)    5、SPIFLASH模拟U盘暂时没有成功,可能是自己板子的flash有问题,出现无法格式化的情况,还需要继续研究,也希望已经搞好的朋友分享一下!    6、联系方式:微信Startingray,本人准备将cubemx的小bug解决的过程记录下来,也是给爱好者一点启示,欢迎微信和我沟通,共同进步!个人觉得Cubemx是未来的发展方向,可以使我们避免很多小错误,但是由于现在软件版本之间的兼容性,加上不同版本库之间存在的bug,还是需要我们在使用时时刻保持警惕! 查看全部

首先说明下开发条件:

1、开发板:秉火霸道,STM32F103ZET

2、软件:Cubemx V4.23(F1 V1.60库)

3、硬件: STM32模拟USB设备:虚拟串口 CDC、HID、MSC

问题描述: 官方生成的代码有的人说电脑没有反应,不会出现USB设备!

解决办法:

1、查看硬件原理图

捕获.JPG

    注意D+要设置为高电平,全速USB,这时候需要PD3引脚为低电平,当然了你也可以在软件里设置DP为上拉,可惜最新的1.6库是无法设置DP引脚的,所以需要我们自己根据自己的硬件原理图查看下,DP引脚是否上拉为3.3V!

    也有人说是Vbus引脚的问题,应该在设置里面把Vbus失效不使能,可惜1.6的库没有这个设置,好在我硬件里面已经上拉为5V,将Vbus失效了!


    2、USB虚拟串口:

主要就是使用CDC_Receive_FS( UserRxBuffer,(uint32_t *)(sizeof(UserRxBuffer)));和

   CDC_Transmit_FS((uint8_t*)UserRxBuffer,sizeof(UserRxBuffer));这两个函数,感觉不好用,纯粹属于测试,发送和接收成功,感兴趣可以自己研究!


    3、HID测试成功,正常读取 polling_interval=USBD_HID_GetPollingInterval(&hUsbDeviceFS);数值,至于具体怎么使用没有深入研究。


    4、SD卡模拟U盘:

    主要修改生成的usbd_storage_if.c文件里面STORAGE_Read_FS()和STORAGE_Write_FS()函数,注意blk_addr 不需要乘以512(SD卡一个块为512字节),因为不同版本库之间有的乘以512,有的不乘,但是最新的1.6库是不需要乘以512的,blk_addr 就是起始地址的意思,而blk_len表示是读多少块,而不是读多少字节数,大家一定注意!

    HAL_SD_WriteBlocks(&hsd, (uint8_t *)buf, blk_addr , blk_len, 1000)

    HAL_SD_ReadBlocks(&hsd,(uint8_t *)buf, blk_addr , blk_len, 1000)


    5、SPIFLASH模拟U盘暂时没有成功,可能是自己板子的flash有问题,出现无法格式化的情况,还需要继续研究,也希望已经搞好的朋友分享一下!


    6、联系方式:微信Startingray,本人准备将cubemx的小bug解决的过程记录下来,也是给爱好者一点启示,欢迎微信和我沟通,共同进步!个人觉得Cubemx是未来的发展方向,可以使我们避免很多小错误,但是由于现在软件版本之间的兼容性,加上不同版本库之间存在的bug,还是需要我们在使用时时刻保持警惕!



发现疑似bug:STM32cube生成usb代码,不做任何修改,接电脑显示无法识别的设备,原因是vbus sencing为enable

经验分享gt 发表了文章 • 3 个评论 • 2695 次浏览 • 2016-10-29 12:29 • 来自相关话题

cube版本:4.16.0    2016.10.27刚全部更新pack芯片:stm32f407vet6,为最小系统开发板STM32cube,usb中间件生成usb代码(全程默认配置,过程网上很多),代码不做任何添加和修改,直接接电脑显示无法识别的设备。原因是vbus sencing为enable,这是默认配置。如果手动改成disable,生成代码,不做修改,直接连电脑,则立即完美识别。已经测试hid、mass storage、cdc都是如此实际上配置时没有激活vbus。这个引脚(PA9)在开发板上是借uart1的,实际电路上是悬空的,并没有外界拉高或拉低,而且,goio也没有配置它 查看全部

cube版本:4.16.0    2016.10.27刚全部更新pack

芯片:stm32f407vet6,为最小系统开发板


STM32cube,usb中间件生成usb代码(全程默认配置,过程网上很多),代码不做任何添加和修改,直接接电脑显示无法识别的设备。

原因是vbus sencing为enable,这是默认配置。

如果手动改成disable,生成代码,不做修改,直接连电脑,则立即完美识别。已经测试hid、mass storage、cdc都是如此

实际上配置时没有激活vbus。这个引脚(PA9)在开发板上是借uart1的,实际电路上是悬空的,并没有外界拉高或拉低,而且,goio也没有配置它

5.png

(转)来自歪果仁的基于stm32f070F6PX利用cubemx实现USB转RS485实现原理图/程序/PCB

其他分享admin 发表了文章 • 0 个评论 • 2504 次浏览 • 2016-06-12 23:08 • 来自相关话题

Testing of sensors with RS485 using PC without proper interface is not possible. Since RS232 interfaces are very rare, the interface should be hooked to USB. The interface between USB and RS485 can be soldered with one of the many FTDI interfaces with added RS485 driver, or bought as assembled module. There is always the third option. I made it from scratch.

I took smallest STM32F0 with USB and UART interface. The best thing with UART in the STM32F0 is that signal for driver enable is provided within hardware. The complete pinout of the microcontroller is:










The hardware part is easy. The complete PCB is one-sided. I kept it as minimalistic as possible. There are three active components: voltage regulator, microcontroller and RS485 transceiver. The complete schematic:




The PCB is single sided:




The project, generated from the MX cube is almost all we need. There are few things to add:

retransmit bytes received from USB to UART
forward bytes received via UART to USB
add serial line coding interpretation and reflect it in the hardware UART
 
The code for sending bytes from UART to USB is within main endless loop:
if (HAL_UART_Receive_IT(&huart2, &aRxBuffer, 1) == HAL_OK)
CDC_Transmit_FS(&aRxBuffer,1)Code to send data from USB to UART is within CDC_Receive_FS() function:
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(hUsbDevice_0, &Buf[0]);
USBD_CDC_ReceivePacket(hUsbDevice_0);
HAL_UART_Transmit(&huart2, Buf, *Len, 100);
return (USBD_OK);
/* USER CODE END 6 */
}And finally, the code to set the UART line parameters are within USB CDC_Control_FS() function:
/*******************************************************************************/
/* Line Coding Structure */
/*-----------------------------------------------------------------------------*/
/* Offset | Field | Size | Value | Description */
/* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
/* 4 | bCharFormat | 1 | Number | Stop bits */
/* 0 - 1 Stop bit */
/* 1 - 1.5 Stop bits */
/* 2 - 2 Stop bits */
/* 5 | bParityType | 1 | Number | Parity */
/* 0 - None */
/* 1 - Odd */
/* 2 - Even */
/* 3 - Mark */
/* 4 - Space */
/* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
/*******************************************************************************/
case CDC_SET_LINE_CODING:
linecoding.bitrate = (uint32_t)(pbuf[0] | (pbuf[1] << 8) | (pbuf[2] << 16) | (pbuf[3] << 24));
linecoding.format = pbuf[4];
linecoding.paritytype = pbuf[5];
linecoding.datatype = pbuf[6];
huart2.Init.BaudRate = linecoding.bitrate;
switch (linecoding.format)
{
case 0 : huart2.Init.StopBits = UART_STOPBITS_1; break;
case 1 : huart2.Init.StopBits = UART_STOPBITS_1_5; break;
case 2 : huart2.Init.StopBits = UART_STOPBITS_2; break;
}
switch (linecoding.paritytype)
{
case 0 : huart2.Init.Parity = UART_PARITY_NONE; break;
case 1 : huart2.Init.Parity = UART_PARITY_ODD; break;
case 2 : huart2.Init.Parity = UART_PARITY_EVEN; break;
}
//UART_WORDLENGTH_7B
switch (linecoding.datatype)
{
case 7 : huart2.Init.WordLength = UART_WORDLENGTH_7B; break;
case 8 : huart2.Init.WordLength = UART_WORDLENGTH_8B; break;
}
HAL_RS485Ex_Init(&huart2, UART_DE_POLARITY_HIGH, 0, 0);

break;The complete project is hosted on GitHub>>> https://github.com/s54mtb/USB2RS485

The driver for the USB/CDC device class can be downloaded from: http://www.st.com/content/st_c ... .html  or local copy: VCP_V1.4.0_Setup

I will use this small module for testing sensors, which I have under development for my vineyard weather station: humidity, air pressure, temperature, wind, illumination, soil parameters, etc…
 
>>本文转自:http://e.pavlin.si/2016/05/29/usb-to-rs485/
相关程序在本站网盘里找到名字:usb_to_RS485.zip 查看全部
Testing of sensors with RS485 using PC without proper interface is not possible. Since RS232 interfaces are very rare, the interface should be hooked to USB. The interface between USB and RS485 can be soldered with one of the many FTDI interfaces with added RS485 driver, or bought as assembled module. There is always the third option. I made it from scratch.

I took smallest STM32F0 with USB and UART interface. The best thing with UART in the STM32F0 is that signal for driver enable is provided within hardware. The complete pinout of the microcontroller is:

pinout-1.jpg


QQ图片20160612230412.png

The hardware part is easy. The complete PCB is one-sided. I kept it as minimalistic as possible. There are three active components: voltage regulator, microcontroller and RS485 transceiver. The complete schematic:
sch-1.jpg

The PCB is single sided:
QQ图片20160612230354.png

The project, generated from the MX cube is almost all we need. There are few things to add:

retransmit bytes received from USB to UART
forward bytes received via UART to USB
add serial line coding interpretation and reflect it in the hardware UART
 
The code for sending bytes from UART to USB is within main endless loop:
if (HAL_UART_Receive_IT(&huart2, &aRxBuffer, 1) == HAL_OK) 
CDC_Transmit_FS(&aRxBuffer,1)
Code to send data from USB to UART is within CDC_Receive_FS() function:
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(hUsbDevice_0, &Buf[0]);
USBD_CDC_ReceivePacket(hUsbDevice_0);
HAL_UART_Transmit(&huart2, Buf, *Len, 100);
return (USBD_OK);
/* USER CODE END 6 */
}
And finally, the code to set the UART line parameters are within USB CDC_Control_FS() function:
 /*******************************************************************************/
/* Line Coding Structure */
/*-----------------------------------------------------------------------------*/
/* Offset | Field | Size | Value | Description */
/* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
/* 4 | bCharFormat | 1 | Number | Stop bits */
/* 0 - 1 Stop bit */
/* 1 - 1.5 Stop bits */
/* 2 - 2 Stop bits */
/* 5 | bParityType | 1 | Number | Parity */
/* 0 - None */
/* 1 - Odd */
/* 2 - Even */
/* 3 - Mark */
/* 4 - Space */
/* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
/*******************************************************************************/
case CDC_SET_LINE_CODING:
linecoding.bitrate = (uint32_t)(pbuf[0] | (pbuf[1] << 8) | (pbuf[2] << 16) | (pbuf[3] << 24));
linecoding.format = pbuf[4];
linecoding.paritytype = pbuf[5];
linecoding.datatype = pbuf[6];
huart2.Init.BaudRate = linecoding.bitrate;
switch (linecoding.format)
{
case 0 : huart2.Init.StopBits = UART_STOPBITS_1; break;
case 1 : huart2.Init.StopBits = UART_STOPBITS_1_5; break;
case 2 : huart2.Init.StopBits = UART_STOPBITS_2; break;
}
switch (linecoding.paritytype)
{
case 0 : huart2.Init.Parity = UART_PARITY_NONE; break;
case 1 : huart2.Init.Parity = UART_PARITY_ODD; break;
case 2 : huart2.Init.Parity = UART_PARITY_EVEN; break;
}
//UART_WORDLENGTH_7B
switch (linecoding.datatype)
{
case 7 : huart2.Init.WordLength = UART_WORDLENGTH_7B; break;
case 8 : huart2.Init.WordLength = UART_WORDLENGTH_8B; break;
}
HAL_RS485Ex_Init(&huart2, UART_DE_POLARITY_HIGH, 0, 0);

break;
The complete project is hosted on GitHub>>> https://github.com/s54mtb/USB2RS485

The driver for the USB/CDC device class can be downloaded from: http://www.st.com/content/st_c ... .html  or local copy: VCP_V1.4.0_Setup

I will use this small module for testing sensors, which I have under development for my vineyard weather station: humidity, air pressure, temperature, wind, illumination, soil parameters, etc…
 
>>本文转自:http://e.pavlin.si/2016/05/29/usb-to-rs485/
相关程序在本站网盘里找到名字:usb_to_RS485.zip

(转)STM32F407discovery板实现USB主机(U盘)和USB设备(虚拟串口CDC/VCP)双角色自动切换

其他分享admin 发表了文章 • 2 个评论 • 7973 次浏览 • 2016-01-25 14:33 • 来自相关话题

官方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。

























程序下载:http://pan.baidu.com/s/1gdhcja7
网盘中名称:STM32F407discovery板实现USB主机(U盘)和USB设备(虚拟串口CDC)双角色自动切换.zip
 
本文转自:http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604951&extra=page%3D&page=1
感谢与非网会员:zhenzhen 分享代码!
 
  查看全部
官方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


102035hwm7o3f1kmkwokw7.png

程序下载:http://pan.baidu.com/s/1gdhcja7
网盘中名称:STM32F407discovery板实现USB主机(U盘)和USB设备(虚拟串口CDC)双角色自动切换.zip
 
本文转自:http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604951&extra=page%3D&page=1
感谢与非网会员:zhenzhen 分享代码!