(2)STM32 USB设备开发-USB虚拟串口
例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com
本篇为USB虚拟串口教程,没有知识,全是实操,按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的,如果代码中出现一些外设的配置,可以参考野火F103MINI开发板原理图对照。
设置外部晶振,必须要使用外部晶振,因为USB控制器需要48M的系统时钟,内部晶振无法倍频出48M。
配置外部时钟

配置调试口和系统基准源

开启USB设备

中间件中设备USB设备类型

我使用了freertos v2

配置外部系统时钟

配置独立C和H文件

USB相关的代码都在这个文件夹中

最常处理的只有下面四个函数:
CDC_Control_FS() 来自主机请求的回调函数
CDC_Receive_FS() 接收数据回调函数;
CDC_Transmit_FS() 用来发送数据;
CDC_TransmitCplt_FS() 发送完成回调函数;
实现回环测试很简单,之需要在usbd_cdc_if.c文件中添加下面一句话

编译后下载程序,会在设备中看到如下

可以使用串口助手进行回环测试,因为是虚拟串口,所以在这里波特率可以随意设置

上面中在 CDC_Receive_FS 中添加了一行 CDC_Transmit_FS(Buf, *Len); 代码,可以看到演示中实现了回环效果,上位机不管发送什么数据下位机都会原样返回。并且可以发现不管上位机软件中波特率设置为多少都可以正常通讯,因为使用USB虚拟串口的时候真正数据传输用的是USB,串口本身参数这些已经无所谓了。
上面方式演示中其实存在一个问题,演示中并未体现出来,如果你尝试在上位机一次向下发送超过64个字节数据,那么你收到的返回数据可能就只有64个字节。USB数据的收发都是以一个一个包的形式进行的,包的大小一方面和USB协议有关,另一方面和程序有关。在上面工程的 usbd_cdc.h 文件中可以找到相关定义:

USB的 IN / OUT 都是从HOST而言说的,对于Device而言IN指的是发送,OUT指的是接收。 默认定义下USB_FS收发每一个包的大小均为64字节。 前面提到的大于64字节出现的问题中,第一次进入 CDC_Receive_FS 将接收到64个字节数据,这时候调用了 CDC_Transmit_FS 回发数据;接着重启接收将立马接到第二个包数据,然后第二次调用 CDC_Transmit_FS ,这个时候前一次的发送还未处理完成,此次调用将失败。
针对这个问题在使用的时候要合理设计数据收发逻辑。对于接收而言可以设计特殊字符用于标示一帧数据结束,或是设计超时时间来判断一帧数据结束。对于发送而言通常不会有太大问题,一次性发送大量数据也行,在全部发送完成后会触发发送完成回调函数CDC_TransmitCplt_FS;
设置串口参数
使用USB虚拟串口的时候真正数据传输用的是USB,串口本身参数这些已经无所谓了。不过有一种情况会需要这些串口参数,比如单片机一方面与上位机通过USB虚拟串口方式进行通讯,另一方面通过物理串口和其它模块进行通讯,单片机只做数据转发工作。这个时候单片机物理串口的参数就必须要能与其它模块匹配,这个参数如果要通过上位机来设置的话就需要对 CDC_Control_FS() 中的 CDC_SET_LINE_CODING 节点进行处理了:

进入这个函数后会通过pbuf这个变量按照上面注释获得PC端配置串口的信息。
下面我们举例一个自己打印的消息例子,方便后期理解


我还做了一个阻塞测试,我在点灯的地方主动发送了一个数据,

我发现即使不连接USB,程序也没有被阻塞,与这个对比的是STC8系列的单片机的虚拟串口,STC8系列单片机会阻塞程序,而STM32并不会,这很好。
相关文章:
(2)STM32 USB设备开发-USB虚拟串口
例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程,没有知识,全是实操,按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的,如果代码中出现一些外设的…...
他把智能科技引入现代农业领域
江苏田倍丰农业科技有限公司(以下简称“田倍丰”)是一家专注于粮油种植的农业科技公司,为拥有300亩以上田地的大户提供全面的解决方案。田倍丰通过与当地政府合作,将土地承包给大户,并提供农资和技术,实现利…...
ingress-nginx代理tcp使其能外部访问mysql
一、helm部署mysql主从复制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解压后编辑values.yaml文件,修改如下(storageclass已设置默认类) 117 ## param architecture MySQL archit…...
麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 之前咱们学习了LNMP架构,但是PHP对于技术来说确实是老掉牙了,PHP的市场占有量越来越少了,我认识一个10年的PHP开发工程师,十年工资从15k到今天的6k&am…...
亚博microros小车-原生ubuntu支持系列:4-手部检测
一 准备工作 在学习手部检测之前,有2个准备工作。 1 确保小车的摄像头能显示画面 参见:亚博microros小车-原生ubuntu支持系列:2-摄像头控制-CSDN博客 启动图传代理: docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm …...
关于回调函数(callback)
简介 在C中,回调函数是一种常见的编程技术,它允许你将一个函数作为参数传递给另一个函数,并在适当的时候调用它。回调函数通常用于事件处理、异步编程和模块化设计中。 1、函数指针:在C中,回调函数通常是通过函数指针…...
Linux Bash 中使用重定向运算符的 5 种方法
注:机翻,未校。 Five ways to use redirect operators in Bash Posted: January 22, 2021 | by Damon Garn Redirect operators are a basic but essential part of working at the Bash command line. See how to safely redirect input and output t…...
硬件作品3----STM32F103RCT6最小系统板MCU配置
参考文章:对stm32F103RCT6原理图解析(详细)-CSDN博客 本想绘制稍微复杂一些的电路,但是出现很多问题,因此先绘制一块最小系统板进行原理、绘制方法的验证。 设计难度:★ 适合人群:初学者 一、…...
人脸识别打卡系统--基于QT(附源码)
逃离舒适区 项目源代码放在我的仓库中,有需要自取 项目地址 https://gitcode.com/hujiahangdewa/Face_recognition.git 文章目录 一、项目结构分析二、服务器的搭建三、客户端的搭建四、人脸识别库的申请五、基于人脸识别库的识别判断六、QT人脸识别----调用百度ai…...
【深度学习入门】深度学习知识点总结
一、卷积 (1)什么是卷积 定义:特征图的局部与卷积核做内积的操作。 作用:① 广泛应用于图像处理领域。卷积操作可以提取图片中的特征,低层的卷积层提取局部特征,如:边缘、线条、角。 ② 高层…...
通过视觉语言模型蒸馏进行 3D 形状零件分割
大家读完觉得有帮助记得关注和点赞!!!对应英文要求比较高,特此说明! Abstract This paper proposes a cross-modal distillation framework, PartDistill, which transfers 2D knowledge from vision-language models …...
机器学习10-解读CNN代码Pytorch版
机器学习10-解读CNN代码Pytorch版 我个人是Java程序员,关于Python代码的使用过程中的相关代码事项,在此进行记录 文章目录 机器学习10-解读CNN代码Pytorch版1-核心逻辑脉络2-参考网址3-解读CNN代码Pytorch版本1-MNIST数据集读取2-CNN网络的定义1-无注释版…...
微服务学习-Gateway 统一微服务入口
1. 微服务为什么需要 API 网关? 1.1. 在微服务架构中,通常一个系统会被拆分为多个微服务,面对多个微服务客户端应该如何去调用呢? 如果根据每个微服务的地址发起调用,存在如下问题: 客户端多次请求不同的…...
2025寒假备战蓝桥杯02---朴素二分查找升级版本的学习+分别求解左右端点
文章目录 1.朴素二分查找的升级版2.查找左端点3.查找右端点4.代码的编写 1.朴素二分查找的升级版 和之前介绍的这个二分查找相比,我觉得这个区别就是我们的这个二分查找需要找到的是一个区间,而不是这个区间里面的某一个元素的位置; 2.查找…...
PHP语言的软件工程
PHP语言的软件工程 引言 软件工程是计算机科学中的一个重要分支,它涉及软件的规划、开发、测试和维护。在现代开发中,PHP作为一种流行的服务器端脚本语言,广泛应用于网页开发和各种企业应用中。本文将深入探讨PHP语言在软件工程中的应用&am…...
linux-FTP服务配置与应用
也许你对FTP不陌生,但是你是否了解FTP到底是个什么玩意? FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为 “文传协议” 用于Internet上的控制文件的双向传输。同时,它也是一个应用程序…...
靠右行驶数学建模分析(2014MCM美赛A题)
笔记 题目 要求分析: 比较规则的性能,分为light和heavy两种情况,性能指的是 a.流量与安全 b. 速度限制等分析左侧驾驶分析智能系统 论文 参考论文 两类规则分析 靠右行驶(第一条)2. 无限制(去掉了第一条…...
(1)STM32 USB设备开发-基础知识
开篇感谢: 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …...
Spring中如何动态的创建、监听MQ以及创建Exchange
文章目录 前言动态创建和管理Exchange、Queue动态消费Queue结论 前言 前面我们学习 RabbitMQ 的时候,都是在编译的时候就确定了Exchange、Queue,也就是说我们需要在程序启动之前就创建好需要的Exchange和Queue,但是实际使用的时候࿰…...
中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p39061 在全球算力因数字化技术发展而竞争加剧,我国积极推进算力发展并将综合算力作为数字经济核心驱动力的背景下,该报告对我国综合算力进行研究。 中国算力大会发布的《中国综合算力指数(2024年…...
企业级RESTful API设计终极指南:10个进阶技巧助力构建高性能接口
企业级RESTful API设计终极指南:10个进阶技巧助力构建高性能接口 【免费下载链接】restful-api-design-references RESTful API 设计参考文献列表,可帮助你更加彻底的了解REST风格的接口设计。 项目地址: https://gitcode.com/gh_mirrors/re/restful-a…...
告别复杂配置!Qwen3-ASR-0.6B一键部署教程,Gradio界面超简单
告别复杂配置!Qwen3-ASR-0.6B一键部署教程,Gradio界面超简单 1. 快速了解Qwen3-ASR-0.6B Qwen3-ASR-0.6B是一款强大的语音识别模型,支持52种语言和方言的识别能力。相比传统语音识别系统需要复杂的配置和调优,这个模型提供了开箱…...
Wan2.2-I2V-A14B惊艳效果:动态镜头推移、自然光影变化、流畅运镜展示
Wan2.2-I2V-A14B惊艳效果:动态镜头推移、自然光影变化、流畅运镜展示 1. 专业级视频生成能力 Wan2.2-I2V-A14B模型带来了令人惊叹的视频生成效果,能够将简单的文字描述转化为专业水准的动态视频。这个模型特别擅长处理复杂的镜头运动和光影变化&#x…...
OpenClaw资源监控技巧:Qwen2.5-VL-7B任务执行时的系统负载观察
OpenClaw资源监控技巧:Qwen2.5-VL-7B任务执行时的系统负载观察 1. 为什么需要监控OpenClaw的资源使用? 上周我在本地部署了Qwen2.5-VL-7B模型,准备用OpenClaw实现一个自动化图文处理工作流。刚开始运行时一切顺利,但连续执行几个…...
STM32启动模式详解与实战指南
1. STM32启动过程概述作为一名嵌入式开发工程师,理解STM32的启动过程是基本功。很多初学者在使用STM32时,往往只关注main函数中的代码,却忽略了芯片上电后到执行main函数之前发生了什么。实际上,从按下复位键到程序开始运行&#…...
YOLOv5推理时图片尺寸为啥变了?详解detect.py中letterbox函数的padding策略
YOLOv5推理时图像尺寸变化的底层机制解析:从letterbox函数到工程实践 当你第一次将19201080的高清视频帧送入YOLOv5模型时,控制台输出的640384尺寸可能让你眉头一皱——按照常规的宽高比缩放,640360才是预期结果。这个看似微小的差异背后&…...
OpenClaw调试技巧:千问3.5-9B接口调用问题排查
OpenClaw调试技巧:千问3.5-9B接口调用问题排查 1. 为什么需要关注接口调用问题 上周我在本地部署OpenClaw对接千问3.5-9B模型时,遇到了一个诡异的问题:明明配置文件正确,模型服务也正常运行,但OpenClaw就是无法完成对…...
避坑指南:CentOS7升级内核开启BBR加速最常见的5个错误及解决方法
CentOS7内核升级与BBR加速避坑实战手册 每次在CentOS 7服务器上折腾内核升级和BBR加速时,总会遇到各种"惊喜"。记得第一次操作时,我盯着黑屏的服务器足足半小时,心跳快得像是刚跑完马拉松。本文将分享那些只有踩过坑才知道的实战经…...
XBee API模式通信原理与嵌入式集成实战
1. XBee 库技术解析:面向嵌入式系统的 API 模式通信框架XBee 是 Digi International 推出的一系列低功耗、高可靠性的无线射频模块,广泛应用于工业物联网、远程传感器网络、智能农业及楼宇自动化等场景。其核心优势在于支持多种协议栈(Zigbee…...
HJ165 小红的优惠券
题目题解(36)讨论(31)排行 入门 通过率:49.28% 时间限制:1秒 空间限制:256M 知识点贪心 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 小红的购物车…...
