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,一经查实,立即删除!

相关文章

GEE代码实例教程详解:植被状况指数(VCI)与干旱监测

简介 在本篇博客中,我们将使用Google Earth Engine (GEE) 进行植被状况指数(Vegetation Condition Index, VCI)的计算和干旱监测。通过MODIS NDVI数据,我们可以评估2001年至2024年间的植被状况和干旱等级。 背景知识 MODIS NDV…

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

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

第4章 Vite模块化与插件系统(二)

4.3 常用插件介绍 4.3.1 官方插件 vitejs/plugin-vue 用于支持 Vue.js 开发: npm install vitejs/plugin-vue --save-devimport vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue()] })vitejs/plugin-react 用于支持 React 开发&#xf…

JavaDS —— 顺序表ArrayList

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

关于Mars3d的入门

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

基于openStreetMap的路径规划ROS功能包

文章目录 概要OSM是什么主要特点主要组成部分使用场景如何获取OSM常规参数配置笛卡尔坐标系原点经纬度设置编译和运行如何规划演示效果概要 由于https://github.com/MichalDobis/osm_planner存在一些使用问题,不是那么方便,我对其进行了一些修改,便于进行起点到终点进行路径…

数据如何查询

分组查询 分组查询(Group By)是在关系型数据库中用来对数据进行分组并对每个组应用聚合函数的一种操作。这种查询通常结合聚合函数(如 COUNT、SUM、AVG、MAX、MIN 等)使用,用于在查询结果中生成汇总信息 特点(聚合)&am…

从零开始做题: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…

python的线程池和进程池

Python 3.2 就已经引入了 concurrent.futures 模块,提供了线程池(ThreadPoolExecutor)和进程池(ProcessPoolExecutor),用于简化并发编程的管理和调度。 ThreadPoolExecutor 在ThreadPoolExecutor 是 conc…

简易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…

Python 全栈体系【三阶】(二)

第一章 Django 五、模板 1. 概述 Django中的模板是指可以动态生成任何基于文本格式文件的技术(如HTML、CSS等)。 Django中内置了自己的模板系统,称为DTL(Django Template Language), Django模板语言。 2. 配置 settings.py中关于模板的…