stm32 USB CDC类虚拟串口初体验

1. 目标

本文介绍CubeMX生成 USB CDC类虚拟串口工程的操作步骤。

2. 配置流程

  • 时钟配置

    • usb外设需要48M时钟输入
    • stm32405使用外部时钟源HSE,否则配不出来48M时钟
    • stm32h750内部有一个48M时钟
    • stm32f405时钟配置
      在这里插入图片描述
    • stm32h750时钟配置
      在这里插入图片描述
  • Connectivity ->USB_OTG_FS 和 Connectivity ->USB_OTG_FS 配置

    • stm32 usb内置了一个全速PHY,如果要使用内置PHY则选中 Connectivity ->USB_OTG_FS
    • stm32 usb同时引出一个ULPI接口,可以外接高速PHY,如果要使用外部高速PHY则选中 Connectivity ->USB_OTG_HS
    • PC机作为主机 选择 Device_Only
    • USB_OTG_FS 和 USB_OTG_HS 可以同时配置
      在这里插入图片描述
      在这里插入图片描述
  • Middleware and Software Packs ->USB_DEVICE配置

    • 如图,选择cdc设备
      在这里插入图片描述
  • 配置结束,生成工程。

3. 测试

  • 将代码下载进板子,插入电脑,即可看见枚举出两个com口
    在这里插入图片描述
  • 用户接口说明
    usbd_cdc_if.h 和 usbd_cdc_if.c 提供用户接口
函数说明
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)全速设备,向主机发送内容,通过批量IN端点发送
uint8_t CDC_Transmit_HS(uint8_t* Buf, uint16_t Len)高速设备,向主机发送内容,通过批量IN端点发送
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)全速设备,接收到主机发送的内容时会调用这个函数,通过批量OUT端点发接收
static int8_t CDC_Receive_HS(uint8_t* Buf, uint32_t *Len)高速设备,接收到主机发送的内容时会调用这个函数,通过批量OUT端点发接收
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)全速设备,CDC类请求处理函数,控制传输,例如:可以设置或读取线路编码,包括波特率、停止位、校验位和数据位
static int8_t CDC_Control_HS(uint8_t cmd, uint8_t* pbuf, uint16_t length)高速设备,CDC类请求处理函数,控制传输,例如:可以设置或读取线路编码,包括波特率、停止位、校验位和数据位
  • 回环测试
    在接收函数CDC_Receive_FS中将接收到的数据通过CDC_Transmit_FS发送,代码如下:
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{/* USER CODE BEGIN 6 */CDC_Transmit_FS(Buf, *Len);USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);USBD_CDC_ReceivePacket(&hUsbDeviceFS);return (USBD_OK);/* USER CODE END 6 */
}

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初阶:从C过渡到C++的入门基础

✨✨所属专栏:C✨✨ ✨✨作者主页:嶔某✨✨ C发展历史 C的起源可以追溯到1979年,当时BjarneStroustrup(本贾尼斯特劳斯特卢普,这个翻译的名字不同的地⽅可能有差异)在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复…

JavaDS —— 顺序表ArrayList

顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。在物理和逻辑上都是连续的。 模拟实现 下面是我们要自己模拟实现的方法: 首先我们要创建一个顺序表,顺序表…

关于Mars3d的入门

关于Mars3d的入门 一. 创建地球,加载瓦片图层二 矢量图层2.1 常用矢量图层2.1.1 GraphicLayer2.1.2 GeoJsonLayer 2.2 矢量图层的点击事件 三 矢量数据四 事件机制 一. 创建地球,加载瓦片图层 // 1. 创建地球let map new mars3d.Map("mars3dContai…

从零开始做题:My_lllp

题目 给出一张png图片 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/题目/zulu/My_lllp] └─$ python2 lsb.py extract my_lllp.png out.txt my_lllp [] Image size: 1080x1079 pixels. [] Written extracted data to out.txt. ┌──(holyeyes㉿kali2023)-[~/Misc/题目/zul…

简易Qt串口助手

界面显示如下 关于串口类 初始化 设置串口号 设置波特率 打开串口 发送按钮功能实现 接收数据显示在控件中 关闭串口

使用 MFA 保护对企业应用程序的访问

多因素身份验证(MFA)是在授予用户访问特定资源的权限之前,使用多重身份验证来验证用户身份的过程,仅使用单一因素(传统上是用户名和密码)来保护资源,使它们容易受到破坏,添加其他身份…

springboot非物质文化遗产管理系统-计算机毕业设计源码16087

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

前端开发过程中经常遇到的问题以及对应解决方法 (持续更新)

我的朋友已经工作了 3 年,他过去一直担任前端工程师。 不幸的是,他被老板批评了,因为他在工作中犯了一个错误,这是一个非常简单但容易忽视的问题,我想也是很多朋友容易忽视的一个问题。 今天我把它分享出来&#xff…

Linux三剑客(grep、awk和sed)操作及与管道结合使用

1. 总览 grep、sed和awk被称为Linux三剑客,是因为它们在文本处理和数据操作方面极其强大且常用。 Linux三剑客在文件处理中的作用: grep(数据查找定位):文本搜索工具,在文件中搜索符合正则表达式的文本内容…

Redis原理-数据结构

Redis原理篇 1、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解? Attention机制是一种在处理时序相关问题的时候常用的技术,主要用于处理序列数据。 核心思想是在处理序列数据时,网络应该更关注输入中的重要部分,而忽略不重要的部分&…

BJT的结构(晶体管电压/电流+β+晶体管特性曲线/截止与饱和+直流负载线(Q点))+单片机数码管基础

2024-7-8,星期一,20:23,天气:晴,心情:晴。今天没有什么特殊的事情发生,周末休息了两天,周一回来继续学习啦,加油加油!!! 今日完成模电…

视频号矩阵管理系统:短视频内容营销的智能助手

随着短视频行业的蓬勃发展,视频号矩阵管理系统应运而生,为内容创作者和品牌提供了一站式的短视频管理和营销解决方案。本文将深入探讨视频号矩阵管理系统的核心功能,以及它如何助力用户在短视频营销领域取得成功。 视频号矩阵管理系统概述 …

在PyTorch中使用TensorBoard

文章目录 在PyTorch中使用TensorBoard1.安装2.TensorBoard使用2.1创建SummaryWriter实例2.2利用add_scalar()记录metrics2.3关闭Writer2.4启动TensorBoard 3.本地连接服务器使用TensorBoard3.1方法一:使用SSH命令进行本地端口转发3.2方法二:启动TensorBo…

如何将资源前端通过 Docker 部署到远程服务器

作为一个程序员,在开发过程中,经常会遇到项目部署的问题,在现在本就不稳定的大环境下,前端开发也需要掌握部署技能,来提高自己的生存力,今天就详细说一下如何把一个前端资源放到远程服务器上面通过docker部…

【Python】不小心卸载pip后(手动安装pip的两种方式)

文章目录 方法一:使用get-pip.py脚本方法二:使用easy_install注意事项 不小心卸载pip后:手动安装pip的两种方式 在使用Python进行开发时,pip作为Python的包管理工具,是我们安装和管理Python库的重要工具。然而&#x…

产品经理技能揭秘:如何巧妙启发需求,引领市场新潮流

文章目录 引言一、需求启发的定义二、需求启发的艺术三、需求启发的重要性四、需求启发的流程五、需求启发的问题与挑战内部自身的问题与挑战:挑战一:知识的诅咒挑战二:做与定义的不同挑战三:沟通障碍挑战四:需求变更频…

solidity:构造函数和修饰器、事件

构造函数​ 构造函数(constructor)是一种特殊的函数,每个合约可以定义一个,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始化合约的owner地址: address owner; // 定义owner变…

电脑找回彻底删除文件?四个实测效果的方法【一键找回】

电脑数据删除了还能恢复吗?可以的,只要我们及时撤销上一步删除操作,还是有几率找回彻底删除文件。 当我们的电脑文件被彻底删除后,尽管恢复的成功率可能受到多种因素的影响,但仍有几种方法可以尝试找回这些文件。本文整…

使用 docker buildx 构建跨平台镜像

buildx是Docker官方提供的一个构建工具,它可以帮助用户快速、高效地构建Docker镜像,并支持多种平台的构建。使用buildx,用户可以在单个命令中构建多种架构的镜像,例如x86和arm架构,而无需手工操作多个构建命令。此外bu…