【STM32】STM32F4中USB的CDC虚拟串口(VCP)使用方法

文章目录

  • 一、前言
  • 二、STM32CubeMX生成代码
    • [2.1 选择芯片](#2.1 选择芯片)
    • [2.2 配置相关模式](#2.2 配置相关模式)
    • [2.3 设置时钟频率](#2.3 设置时钟频率)
    • [2.4 生成代码](#2.4 生成代码)
    • [2.5 编译并下载代码](#2.5 编译并下载代码)
    • [2.6 结果](#2.6 结果)
    • [2.7 问题](#2.7 问题)
  • 三、回环测试
    • [3.1 打开工程](#3.1 打开工程)
    • [3.2 添加回环代码](#3.2 添加回环代码)
    • [3.3 编译烧录并测试](#3.3 编译烧录并测试)
  • 四、出现问题和解决方法
    • [4.1 烧录总是要自己插拔USB](#4.1 烧录总是要自己插拔USB)
    • [4.2 自己生成的工程没有测试成功](#4.2 自己生成的工程没有测试成功)

一、前言

最近在学习STM32的USB功能,主要是想要使用虚拟串口(VCP)功能,来解决串口传输速率较低的问题,达到于上位机高效通信的目的。

使用芯片:STM32F407ZGT6

使用函数:HAL库

使用工具:STM32CubeMX + Keil uVision5

串口工具:VOFA

二、STM32CubeMX生成代码

2.1 选择芯片


2.2 配置相关模式

主要配置内容:

  • 调试模式为Serial;
  • 使用外部时钟
  • 设置为USB为从设备
  • 配置为CDC模式的VCP



2.3 设置时钟频率

有两个需要注意点:
1. 左边的这个数值是你自己板子上的外部晶振的频率,具体是多少看你的板子或者去问商家。
2. 最终的频率要设置为48MHz。


然后要注意软件在自动选择晶振频率的时候有没有设置为外部晶振,如下图的提示。里面具体一些倍率选择要自己调一调,反正最后是48MHz就可以了。

2.4 生成代码

自己给工程命名然后选择打开的编译器


2.5 编译并下载代码

编译一下工程,然后下载到板子上面去。

2.6 结果

在弹出的弹窗看到下面的提示或者在设备管理器中查看到下面的设备就说明成功了

2.7 问题

烧录之后弹窗说识别不了USB设备 或者在设备管理器没看到多出来的串口

解决方法:

  1. 重新插拔USB设备
  2. 检查晶振(外部晶振、主晶振、和USB晶振,具体看2.3的提示)是否正确
  3. 可能USB的引脚没有上拉电阻(猜想,具体不清楚)

三、回环测试

如果没有上面的问题,那恭喜你,可以继续往下测试VCP功能了。

3.1 打开工程

3.2 添加回环代码

"usbd_cdc_if.h"中找到函数CDC_Receive_FS(),在里面添加下面的代码:

c 复制代码
CDC_Transmit_FS(Buf, *Len);

最终整个函数的代码如下:

c 复制代码
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
	CDC_Transmit_FS(Buf, *Len);
  return (USBD_OK);
  /* USER CODE END 6 */
}

3.3 编译烧录并测试

打开串口工具,然后选择你的串口号,发送任意字符,就可以看到回传了你发送的字符。

四、出现问题和解决方法

4.1 烧录总是要自己插拔USB

【STM32】USB程序烧录需要重新上电 & 软件复位方法

4.2 自己生成的工程没有测试成功

使用我的工程,自己对比一下看看
STM32F407 USB的 CDC 虚拟串口(VCP)程序

https://download.csdn.net/download/weixin_52296952/88775046

去我的主页的资源里面找找

相关推荐
iCxhust1 小时前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
某林2125 小时前
ROS2 机器人底盘调试避坑指南:从 `/odom` 丢失到彻底跑通的硬核排障实录
stm32·机器人·人机交互
芯岭技术郦5 小时前
集成 2.4G 射频收发器、MCU 及丰富外设的XL2417D透传模组
单片机·嵌入式硬件
进击的小头5 小时前
第7篇:MOS 管最全入门:原理、关键参数、选型、驱动与典型应用
经验分享·科技·嵌入式硬件·学习
zlinear数据采集卡6 小时前
定时器电路深度解析:从经典555到STM32定时器,从ZLinear采集卡的工程化设计实战
stm32·单片机·嵌入式硬件·fpga开发·自动化
y.Ghost6 小时前
FreeRTOS-基础知识
嵌入式硬件
m0_377108146 小时前
stm32-USART
stm32·单片机·嵌入式硬件
szxinmai主板定制专家7 小时前
基于 ARM+FPGA精密多轴实时运动控制卡设计方案,适用于半导体设备等高精度领域(一)
arm开发·人工智能·嵌入式硬件·fpga开发·架构·语音识别
不做无法实现的梦~9 小时前
常见工程分析软件
stm32·嵌入式硬件·算法
国产电子元器件10 小时前
电流检测信号漂移问题分析
单片机·嵌入式硬件