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

文章目录

  • 一、前言
  • 二、STM32CubeMX生成代码
    • 2.1 选择芯片
    • 2.2 配置相关模式
    • 2.3 设置时钟频率
    • 2.4 生成代码
    • 2.5 编译并下载代码
    • 2.6 结果
    • 2.7 问题
  • 三、回环测试
    • 3.1 打开工程
    • 3.2 添加回环代码
    • 3.3 编译烧录并测试
  • 四、出现问题和解决方法
    • 4.1 烧录总是要自己插拔USB
    • 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(),在里面添加下面的代码:

CDC_Transmit_FS(Buf, *Len);

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

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
去我的主页的资源里面找找

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/342796.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础之数据库操作

一、安装第三方库PyMySQL 1、在PyCharm中通过 【File】-【setting】-【Python Interpreter】搜索 PyMySQL进行安装 2、通过PyCharm中的 Terminal 命令行 输入: pip install PyMySQL 注:通过pip安装,可能会提示需要更新pip,这时可执行&#…

could‘t get post build model module: xx.app.main variant:xxdebbug

当androidStudio进行run应用的时候,报错: couldt get post build model module: xx.app.main variant:xxdebbug后经过排查,方案如下: invalidate caches 清除缓存(全部勾选); 删除 .gradle 目录&#xff…

【JS逆向学习】某壁纸下载(ast混淆)

逆向目标 目标网址:https://bz.zzzmh.cn/index逆向接口一:https://api.zzzmh.cn/bz/v3/getData逆向接口二:https://cdn2.zzzmh.cn/wallpaper/origin/0d7d8d691e644989b72ddda5f695aca2.jpg?response-content-dispositionattachment&aut…

eNSP学习——理解ARP及Proxy ARP

目录 名词解释 实验内容 实验目的 实验步骤 实验拓扑 配置过程 基础配置 配置静态ARP 名词解释 ARP (Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。ARP表项可以分为动态和静态两种类型。   动态ARP是利用ARP广播报文,动态执行并自动进…

RT-DETR 模型改进 | AKConv:具有任意采样形状和任意参数数量的卷积核

基于卷积操作的神经网络在深度学习领域取得了显著的成果,但标准卷积操作存在两个固有缺陷。一方面,卷积操作受限于局部窗口,无法捕捉其他位置的信息,而其采样形状是固定的。另一方面,卷积核的大小固定为kk,呈固定的正方形形状,而参数数量往往随大小呈平方增长。显然,不…

TensorRT英伟达官方示例解析(二)

系列文章目录 TensorRT英伟达官方示例解析(一) TensorRT英伟达官方示例解析(二) 文章目录 系列文章目录前言一、03-BuildEngineByTensorRTAPI1.1 建立 Logger(日志记录器)1.2 Builder 引擎构建器1.3 Netwo…

关于 LLM,你了解多少?

LLM定义 大语言模型(LLM)是一种基于大量文本数据训练的深度学习模型。它的主要功能是生成自然语言文本或理解语言文本的含义。这些模型可以处理多种自然语言任务,如文本分类、问答、对话等,是通向人工智能的一条重要途径。 LLM发…

什么是通配监听端口? 什么是通配监听IP?

什么是通配监听端口? 监听端口: 指的是服务器或服务开启的特定TCP或UDP端口号,等待客户端连接或发送数据。TCP/IP协议下每个端口只能由一个服务独占监听,一个服务或应用会指定监听特定的一个或多个端口来接收客户端的连接请求。 例如 Web…

计算机网络基础概念解释

​ 1. 什么是网络 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完成业务,于是有了网络互连。 网络互连:将多台计算机连接在⼀起,完成数据共享。 数据共享本质是…

JRT集中打印

之前一直在夯实基础,现在是补demo的时段了。了解过检验集中打印的人知道,集中打印的逻辑有多复杂。既要考虑普通检验报告加上换页。又要考虑微生物报告加上换页,既有A5的报告,也有A4的报告,还要考虑A4打印两个组装A5时…

小程序学习-21

目前小程序分包大小有以下限制: 整个小程序所有分包大小不超过 20M单个分包/主包大小不能超过 2M 独立分包:"independent": true

书生·浦语大模型实战营-学习笔记5

LMDeploy 大模型量化部署实践 大模型部署背景 LMDeploy简介 轻量化、推理引擎、服务 核心功能-量化 显存消耗变少了 大语言模型是典型的访存密集型任务,因为它是decoder-by-decoder 先把数据量化为INT4存起来,算的时候会反量化为FP16 AWQ算法&a…

windows资源管理器占用过高CPU的问题

最近,笔者的电脑在进行文件操作时变得异常的卡顿,打开任务管理器发现windows资源管理器占用了50%-80%的CPU。这里指的文件操作包括但不限于解压,复制,粘贴,甚至重命名一个文件夹都会引起50%的CPU占用。起初笔者认为可能…

缓解Spring Core的“Spring4Shell”零日漏洞

一、概述 2022年3月30日,安全社区广泛注意到Spring(一种流行的开源Java框架)爆出的一个漏洞。Akamai自适应安全引擎第一时间检测到基于该漏洞发起的零日攻击,为Akamai客户提供了保护。 该漏洞的披露时间线以及其他通过非正式方式…

docker报错 missing signature key 无法拉去镜像,yum install docker-ce没有可用软件包 解决办法

错误场景描述 今天项目需要用到minio,我打算在虚拟机中使用docker装一个,可是发现当我docker pull minio/minio的时候,报错了missing signature key 这个报错提示的让人很蒙,翻译过来的意思是 “缺少签名密钥” ?&am…

大小鼠行为刺激-ZL-034B大小鼠跳台仪/多通道跳台记录仪

小鼠跳台实验是一种常用的学习记忆实验方法,它基于条件反射原理,通过观察小鼠在电栅和平台之间跳跃的行为,来研究药物对学习和记忆过程的影响。它适用于各种增智健脑、提高记忆、抗衰老药物和保健品筛选、开发研制。它是初筛药物的理想工具&a…

完美调试android-goldfish(linux kernel) aarch64的方法

环境要求 Mac m1Mac m1 中 虚拟机安装aarch64 ubuntu22.02Mac m1安装OrbStack,并在其中安装 ubuntu20.04(x86_64) 构建文件系统 在虚拟机 aarch64 ubuntu22.02中构建 安装必要的库 sudo apt-get install libncurses5-dev build-essenti…

C++ | 六、栈 Stack、队列 Queue

栈的基础知识 栈&#xff08;stack&#xff09;是一种数据结构&#xff0c;在C中属于STL&#xff08;标准库&#xff09;特点&#xff1a;先进后出 栈的使用&#xff1a; 一、引入头文件<stack>二、创建栈变量&#xff08;类似容器、集合的创建方式&#xff09;&#xf…

前端项目对接protobufjs的时候,踩坑总结

Protobuf&#xff08;Protocol Buffers&#xff09;是一种用于序列化结构化数据的语言无关、平台无关、可扩展的机制。在JS/TS项目中&#xff0c;使用WebSocket与Protobuf可以实现高效的通信和数据传输。protobufjs官方仓库:https://github.com/protobufjs/protobuf.js 安装pro…

户用光伏市场前景如何?

户用光伏市场前景广阔&#xff0c;随着人们对环保和能源利用的关注度不断提高&#xff0c;家庭光伏发电系统也越来越受到欢迎。国家对新能源的支持力度不断加大&#xff0c;政策扶持、电价补贴等措施进一步推动了户用光伏的发展。同时&#xff0c;技术的不断创新和产业链的日益…