最近因为工作需要使用到了STM32F407VET6的USB_OTG_FS作为虚拟串口。
之前用STM32 CubeMX生成过STM32F103C8T6的虚拟串口代码,感觉用起来很方便,于是这次的F407也用MX生产工程,奈何竟然遇到诸多难题,整整困扰了两天。
先说一下我的流程。

MX生成F407 USB虚拟串口工程操作流程

1,选择芯片

先是利用条件筛选选择自己的芯片,如下图:

2,配置管脚

配置RCC输入脚,SYS调试口以及USB_OTG_FS,USB_OTG_FS–>Device Only–>Comunication Device Class,个人喜欢使用FreeRTOS。配置如下图:

3,配置时钟

用的8M外部晶振,如下图即可:

4,外设配置

目前好像没什么要改,如下图:

5,创建工程

选择用Keil或IAR,这里用Keil v5,然后工程就完成了,如下图:


如果是F103,到这里就可以开始直接写代码了,但这次的F407问题是连绵不断的出现。
1,自己打样的板子,USB直接无反应。
2,解决问题1后,USB显示未知设备。
3,解决问题2后,出现了串口设备带串口号,但有个黄色感叹号并且无法使用。


问题一:插入USB无反应

原理图是用AD画的,当时不确定这个USB接口是作Master还是Slaver,就预留了两个上拉电阻,但PCB上未做标记,结果焊板子的时候搞忘了全部焊上了,然后就。。。

拆掉R23电阻,OK,电脑有反应了。

问题二:被识别为Unknown Device

工程创建成功后未做任何修改,先编译,然后直接download,插上USB

Unkown Device?不应该出来一个STM带头的玩意?
多方查阅资料后发现,STM32F407的VBUS检测功能默认竟然是开启?
关于VBUS的连接,手册是这么写的:


The VBUS pin can be freed by disabling the VBUS sensing option.
This is done by setting the NOVBUSSENS bit in the OTG_FS_GCCFG register.
In this case the VBUS is considered internally to be always at VBUS valid level ( 5V).


也就是说,如果不用的话要把这玩意禁用掉。。。于是乎,重新到MX的外设配置出查看一下:

果然如此,二话不说就disable,然后重新生成了一下代码,终于不是Unknown Device 了。。。

问题三:带黄色感叹号的COM口

满怀信心地编译,download,插上USB,结果是这幅德行:

COM口是出来了,然而并不能用。通过查阅各种资料,终于找到了原因,在某一篇帖子有人遇到了相同的问题帖子地址,是STM32CubeMX分配的堆空间太小:

把0x200改成0x600(不是一般都是堆空间大于栈空间吗),重新生成工程,编译,download,插上USB:

Fantastic!黄色感叹号终于消失了(忽略那个COM7,那是驱动出了点小问题)。在加入若干代码后编译:

/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{/* init code for USB_DEVICE */MX_USB_DEVICE_Init();/* USER CODE BEGIN 5 *//* Infinite loop */for(;;){CDC_Transmit_FS((uint8_t *)"无Fuck说!\n",sizeof("无Fuck说!\n"));osDelay(500);}/* USER CODE END 5 */
}


终于能正常使用了,这个USB虚拟串口能告一段落了。

STM32F407使用USB作虚拟串口出现黄感叹号相关推荐

  1. USB VCP虚拟串口通讯详细配置步骤(STM32H732)

    USB VCP虚拟串口通讯详细配置步骤(STM32H732) 一.软件版本 二.CodeMX配置 1.使能外部高速时钟. 2.开启USB外设,选择USB Device功能,速度为默认全速USB设备12 ...

  2. STM32CubeIDE使用全速USB的虚拟串口进行环路测试

    目录 一.简介 1.1.开发环境 1.2.实现功能 二.STM32CubeIDE配置 2.1.打开全速USB 2.2.调用USB库 三.程序解析 3.1.修改usbd_cdc_if.c 3.2.函数C ...

  3. USB转虚拟串口驱动

    WinCE系统 USB Serial实现:http://blog.csdn.net/nanjianhui/archive/2009/12/11/4986390.aspx WinCE虚拟串口驱动:htt ...

  4. STM32 USB使用记录:使用CDC类虚拟串口(VCP)进行通讯

    文章目录 目的 基础说明 使用STM32CubeIDE配置生成代码 用户代码分析 回环测试 串口参数设置 USB HS使用与演示 通讯速率测试 测试代码 USB FS测试 USB HS测试 影响速度的 ...

  5. linux系统串口透传,基于CC2540的USB虚拟串口透传方案

    1.USB虚拟串口代替物理串口的可行性 首先,越来越多带USB接口的器件涌现出来,如带USB接口的单片机,或独立的USB接口器件,而且这些器件的成本已经很接近于使用RS232电平转换芯片所带来的成本. ...

  6. STM32CUBEMX F103 HAL库开发之 USB虚拟串口

    今天心血来潮想写点东西 做比赛这么久了,应该写点东西,一是为了给自己学的知识一个总结,二是可以锻炼自己的写作能力与表达能力,帮助他人避免自己走过的坑 stm32 USB VPC虚拟串口简介 很多stm ...

  7. STM32 USB虚拟串口收发任意长度字节例程

    STM32 USB虚拟串口收发任意长度字节例程 创建STM32 CubeMX工程 代码修改 收发任意长度测试 创建STM32 CubeMX工程 基于STM32 CubeMX进行开发,使用USB的高速模 ...

  8. STM32F407 CUBEMX RT-Thread USB虚拟串口(VCP)

    STM32F407 CUBEMX RT-Thread USB虚拟串口(VCP) 记录一下STM32平台下使用RT-Thread使用VCP 首先确定HAL_Drivers下是否有RT-Thread提供的 ...

  9. STM32 USB虚拟串口原理(上)

    USB虚拟串口是使用USB的CDC(CDC为communication device class(virtual port com))类实现的一种通讯接口.使用STM32自带的USB slave功能可 ...

最新文章

  1. java 传入参数_java参数怎么传递参数
  2. 计算机学具制作,一种具有防护功能的计算机编程学具的制作方法
  3. 项目经理怎么在两周内熟悉一个项目的业务?
  4. POJ - 1062 昂贵的聘礼
  5. c语言开发 .c .h,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件
  6. c语言实验交换字母,新C语言实验学生版
  7. 为什么用Java——一个来自Python阵营的程序员告诉你
  8. 风变Python3---if条件相关的学习
  9. java高级工程师个人简历模板
  10. LPC1788 NVIC 的设置
  11. 2022哈工程计算机考研经验贴
  12. 优秀的程序员都热爱写作
  13. CentOS 7 配置Ruby语言开发环境
  14. 支付宝小程序登录 -tp
  15. 大数据hadoop分布式系统
  16. 基于Python实现的简易微信系统
  17. Anaconda安装Karas
  18. 用C语言实现杨辉三角
  19. matplotlib可视化之饼图plt.pie()与plt.legend()中bbox_to_anchor参数的理解
  20. 实现海康监控视频播放(录像回放)(抓拍,录像等功能)

热门文章

  1. java jackson包_jackson.jar
  2. dvcs-ripper安装教程
  3. 简单制作一个网页需要注意的
  4. 语音识别(一):介绍和简单实现
  5. unity3d实现LOL中的相机控制功能
  6. 腾讯云网站备案-网站访问类问题汇总及解答
  7. JAVA操作pdf——创建表格
  8. 《汇编语言》王爽(第四版) 第十二章 实验12
  9. GPS的NMEA数据解析
  10. 转:写一个块设备驱动