STM32 USB 设备的描述信息作用
在使用 STM32 USB 功能时 usbd_desc.c 文件中定义了一段宏,以下解每段宏的用途。
#define USBD_VID 1155
#define USBD_LANGID_STRING 1033
#define USBD_MANUFACTURER_STRING "STMicroelectronics"
#define USBD_PID 22336
#define USBD_PRODUCT_STRING "STM32 Virtual ComPort"
#define USBD_CONFIGURATION_STRING "CDC Config"
#define USBD_INTERFACE_STRING "CDC Interface"
这段代码是一系列宏定义,主要用于定义 USB 设备的描述信息。这些信息在 USB 设备与主机通信时,会被主机读取,从而识别设备的相关属性。下面对每个宏定义进行详细解释:
1. USBD_VID
#define USBD_VID 1155
- 含义:
USBD_VID代表 USB 设备的厂商 ID(Vendor ID)。每个 USB 设备制造商都会从 USB Implementers Forum(USB-IF)处获得一个唯一的厂商 ID。这里1155对应的是意法半导体(STMicroelectronics),表示该 USB 设备是由意法半导体制造的。
2. USBD_LANGID_STRING
#define USBD_LANGID_STRING 1033
- 含义:
USBD_LANGID_STRING定义了设备描述字符串所使用的语言 ID。1033表示英语(美国),意味着该 USB 设备的描述字符串(如制造商名称、产品名称等)使用的是英语(美国)语言。
3. USBD_MANUFACTURER_STRING
#define USBD_MANUFACTURER_STRING "STMicroelectronics"
- 含义:
USBD_MANUFACTURER_STRING定义了设备制造商的名称。这里明确指出该 USB 设备的制造商是意法半导体。当主机查询设备信息时,会显示这个制造商名称。
4. USBD_PID
#define USBD_PID 22336
- 含义:
USBD_PID代表 USB 设备的产品 ID(Product ID)。同一厂商的不同产品会有不同的产品 ID,用于区分不同型号的设备。22336标识了该特定的 USB 产品。
5. USBD_PRODUCT_STRING
#define USBD_PRODUCT_STRING "STM32 Virtual ComPort"
- 含义:
USBD_PRODUCT_STRING定义了设备的产品名称。这里表明该 USB 设备是 “STM32 Virtual ComPort 虚拟串口”,主机在识别设备时会显示这个产品名称,方便用户了解设备的功能。
6. USBD_CONFIGURATION_STRING
#define USBD_CONFIGURATION_STRING "CDC Config"
- 含义:
USBD_CONFIGURATION_STRING定义了设备的配置名称。“CDC Config” 表示该设备采用了通信设备类(CDC,Communication Device Class)的配置,CDC 常用于实现虚拟串口等通信功能。
7. USBD_INTERFACE_STRING
#define USBD_INTERFACE_STRING "CDC Interface"
- 含义:
USBD_INTERFACE_STRING定义了设备接口的名称。“CDC Interface” 表明该设备使用的是 CDC 接口,用于与主机进行通信。
这些宏定义为 USB 设备提供了必要的描述信息,使得主机能够正确识别和使用该 USB 设备。在实际的 USB 设备开发中,这些信息通常会被包含在 USB 设备描述符中,通过 USB 协议传输给主机。
相关文章:
STM32 USB 设备的描述信息作用
在使用 STM32 USB 功能时 usbd_desc.c 文件中定义了一段宏,以下解每段宏的用途。 #define USBD_VID 1155 #define USBD_LANGID_STRING 1033 #define USBD_MANUFACTURER_STRING "STMicroelectronics" #define US…...
Redis字符串常见命令(String)
字符串常见命令(String) Redis 中的字符串类型是一种非常基础且常用的数据类型,它不仅可以存储任何形式的字符串(包括文本数据),还可以对数字字符串进行自增、自减等操作。以下是对 Redis 字符串类型常见命…...
Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)
A. Was there an Array? 翻译: 对于整数数组 ,我们将其相等特征定义为数组 ,其中,如果数组 a 的第 i 个元素等于其两个相邻元素,则 ;如果数组 a 的第 i 个元素不等于其至少一个相邻元素,则 …...
基于知识图谱的问答系统:后端Python+Flask,数据库Neo4j,前端Vue3(提供源码)
基于知识图谱的问答系统:后端PythonFlask,数据库Neo4j,前端Vue3 引言 随着人工智能技术的不断发展,知识图谱作为一种结构化的知识表示方式,逐渐成为问答系统的重要组成部分。本文将介绍如何构建一个基于知识图谱的问答…...
面试知识点2
文章目录 1. Linux 与 DockerLinux 基本指令VMware 安装 CentOSDocker 拉取镜像创建容器、部署 Spring Boot 项目 2. 关系型数据库 MySQL数据库语法多表关联查询数据库索引 3. 事务与死锁事务的隔离级别死锁的原因和避免方法 4. 排序算法与数据结构二分查找快速排序常见数据结构…...
Django项目之订单管理part1
一.前言 我们前面把django的常用知识点给讲完了,现在我们开始项目部分,项目是一个订单管理系统,我们同时也会在项目之中也会讲一些前面没有用到的知识点。 项目大概流程如下: 核心的功能模块: 认证模块,用…...
基于SSM+Vue的智能汽车租赁平台设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
deepseek本地调用
目录 1.介绍 2.开始调用 2.1模型检验 2.2 通过url调用 3.总结 1.介绍 这篇博客用来教你如何从本地调用ollama中deepseek的模型接口,直接和deepseek进行对话。 2.开始调用 2.1模型检验 首先要保证ollama已经安装到本地,并且已经下载了deepseek模型…...
文件同步工具哪家强?FreeFileSync 免费无限制
FreeFileSync 是一款备受推崇的开源文件同步与备份软件,凭借其卓越的功能和简洁直观的界面,赢得了全球用户的青睐。该软件不仅支持跨平台操作,兼容 Windows、macOS 和 Linux 系统,还能帮助用户在不同设备之间无缝同步文件…...
捷米特 JM - RTU - TCP 网关应用 F - net 协议转 Modbus TCP 实现电脑控制流量计
一、项目背景 在某工业生产园区的供水系统中,为了精确监测和控制各个生产环节的用水流量,需要对分布在不同区域的多个流量计进行集中管理。这些流量计原本采用 F - net 协议进行数据传输,但园区的监控系统基于 Modbus TCP 协议进行数据交互&…...
Coze扣子怎么使用更强大doubao1.5模型
最近,豆包刚刚发布了最新的doubao1.5系列模型,并且加量不加价。 在性能极大进步的情况下,价格还与之前一致。真是业界良心了。 在同样的价格下,肯定要使用性能更强大的模型嘛 于是我准备把所有的智能体和工作流切换到doubao1.5…...
layui 远程搜索下拉选择组件(多选)
模板使用(lay-module/searchSelect),依赖于 jquery、layui.dist 中的 dropdown 模块实现(所以data 格式请参照 layui文档) <link rel"stylesheet" href"layui-v2.5.6/dist/css/layui.css" /&g…...
嵌入式学习(18)---Linux文件编程中的进程
一、进程的概念 进程:(用来描述 程序动态执行的过程,方便操作系统管理的) 进行中的程序 程序的一次执行过程 (内存 CPU) 程序的实例 程序 ----加载到内存----> 进程 应用场景: 实现并发 同一时刻 同时发生 并行 …...
一.AI大模型开发-初识机器学习
机器学习基本概念 前言 本文主要介绍了深度学习基础,包括机器学习、深度学习的概念,机器学习的两种典型任务分类任务和回归任务,机器学习中的基础名词解释以及模型训练的基本流程等。 一.认识机器学习 1.人工智能和机器学习 人工智能&am…...
RoCE和 TCP的区别
RoCE(RDMA over Converged Ethernet)和 TCP(Transmission Control Protocol)都是用于数据传输的协议,但它们在多个方面存在显著区别,以下为你详细介绍: 设计目标 RoCE:主要设计目标…...
勒索病毒攻击:如何应对和恢复
近年来,勒索病毒(Ransomware)已经成为全球信息安全领域最具破坏力的威胁之一。无论是个人用户,还是大中型企业,甚至政府机构,勒索病毒的攻击频率和破坏性日益增加。2020年及2021年,勒索病毒攻击不仅数量激增,且其攻击手法、目标和传播方式也变得更加复杂、精密和具有针…...
解决MySQL错误:You can‘t specify target table ‘xxx‘ for update in FROM clause
目录 错误复现场景原因分析解决方案方法1:使用派生表(推荐)方法2:改用JOIN操作方法3:使用临时表 总结 在编写MySQL的UPDATE或DELETE语句时,如果子查询中直接引用了要操作的目标表,可能会遇到一个…...
在Linux上安装和使用Docker
在Linux上安装和使用Docker:一步步指南 Docker是一种流行的容器化平台,它可以帮助开发者轻松构建、部署和运行应用程序。在本文中,我们将介绍如何在Linux系统上安装Docker,并提供一些常用的Docker命令和使用说明。 1. 安装Docke…...
【Git】四、标签管理
文章目录 Ⅰ. 理解标签Ⅱ. 创建标签① 轻量级标签② 含附注类标签 Ⅲ. 操作标签 Ⅰ. 理解标签 标签 tag ,可以简单的理解为是 对某次 commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 com…...
elementui中aria-hidden报错
浏览器检查的原因,不影响功能,但会在控制台报红 解决办法: 在对应元素设置display:none .el-radio__original {display: none !important;}...
mini-job极简分布式延迟任务队列 — 基于 Redis,支持 Cron 周期任务、异步协程和多执行器
mini-job 极简分布式延迟任务队列 — 基于 Redis,支持 Cron 周期任务、异步协程和多执行器。 特性特性说明延迟任务设定延迟秒数,到期自动执行Cron 周期调度支持标准 cron 表达式(分 时 日 月 星期)三种执行器async 协程ÿ…...
【2024性能革命】:Java 25正式启用向量API硬件加速——但92%开发者仍在用纯Java循环(附迁移Checklist速查表)
更多请点击: https://intelliparadigm.com 第一章:Java 25向量API硬件加速的演进本质与时代意义 Java 25 引入的 Vector API(JEP 478)标志着 JVM 从“通用抽象”迈向“软硬协同”的关键转折。它不再仅依赖 JIT 编译器对循环的自动…...
AirPodsDesktop:Windows与Linux平台AirPods体验完整解决方案
AirPodsDesktop:Windows与Linux平台AirPods体验完整解决方案 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop AirPo…...
风控规则变更要停服重启?Python动态AST解析器+YAML策略热加载,实现0.3秒内全量策略生效(含生产环境压测数据)
更多请点击: https://intelliparadigm.com 第一章:Python 电商实时风控决策 在高并发电商场景中,实时风控系统需在毫秒级完成欺诈识别、刷单检测与异常交易拦截。Python 凭借其丰富的生态(如 pandas、scikit-learn、Redis 客户端…...
SCI配图!多元变分模态分解+组合+RUL预测!MVMD-Transformer-GRU锂电池剩余寿命预测(容量特征提取+剩余寿命预测)
SCI配图!多元变分模态分解组合RUL预测!MVMD-Transformer-GRU锂电池剩余寿命预测(容量特征提取剩余寿命预测)研究背景 锂离子电池在储能和电动汽车等领域应用广泛,其容量会随充放电循环逐渐衰减。准确预测电池容量衰退趋…...
sizeof(unique_ptr) 不总是 8——从 default_delete 到 compressed_pair,拆解零开销承诺的三层实现
"unique_ptr 是零开销的,sizeof 等于裸指针。"这句话在网上传了十几年。面试会问,博客会写,同事之间也会这么说。 它对吗?对,但只对了三分之一。 在 64 位系统上跑一段代码: struct FileCloser {void operator()(FILE* f) const {if (f)...
2026 AI应用元年:成败不靠模型,全看落地速度
业内已经形成共识:2026不是大模型升级年,而是AI真正的应用元年。过去几年,行业一直在卷参数、卷跑分、卷多模态噱头。企业买了模型、开了账号、做了演示Demo,但始终停留在聊天、写文案、生成代码片段的表层试用,好看不…...
小林大模型|大模型面试高频知识点合集2
什么是 Agent?与大模型有什么本质不同? 面试时答这道题,一定要点出三件事:一是 Agent 有自主规划能力,给它一个复杂目标它能自己拆解成多步;二是它能行动,通过工具调用跟外部世界真实交互&…...
告别盲调!在STM32上实现FOC控制:从ADC采样中断到SVPWM生成的代码实战与调试心得
STM32实战:FOC控制从ADC采样到SVPWM生成的工程全解析 当电机控制算法从仿真器跳进真实芯片时,理论公式突然变得具体而微妙。我曾用示波器捕捉到这样一个瞬间:在ADC采样触发的瞬间,PWM波形边缘出现了难以解释的毛刺——这提醒我们&…...
【Backend Flow工程实践 12】Collection / Property / Filter:为什么对象查询能力决定 Backend 脚本工程上限?
作者:Darren H. Chen 方向:Backend Flow / 后端实现流程 / EDA 工具工程 / Tcl 脚本工程 demo:LAY-BE-12_collection_property_filter 标签:Backend Flow、EDA、Tcl、Collection、Property、Filter、Design Object Model、后端实现…...
