当前位置: 首页 > news >正文

实用指南:STM32H743-ARM例程25-USB_VCP

目录

  • 实验平台
  • USB虚拟串口简介
  • USB CDC协议简介
  • 实验程序
  • 实验现象

实验平台

硬件:银杏科技GT7000双核心开发板-ARM-STM32H743XIH6,银杏科技iToolXE仿真器
软件:最新版本STM32CubeH7固件库,STM32CubeMX v6.10.0,开发板环境MDK v5.35,串口工具UartAssit

USB虚拟串口简介

  USB虚拟串口,简称VCP,是VirtualCOMPort的简写,它是利用USB的CDC类来实现的一种通信接口。
  USB虚拟串口属于USB通信设备类。在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口。在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线。另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由系统的串口采集,在芯片内完成USB包的封装,通过USB总线上传至主机,再由相应的串口应用程序进行处理。对用户来说,看到的是基于串口的数据采集和传输,而实际上实现的是基于USB协议包的数据传输。
  我们可以利用STM32自带的USB功能,来实现一个USB虚拟串口,从而通过USB,实现电脑与STM32的数据互传。上位机无需编写专门的USB程序,只需要一个串口调试助手即可调试,非常实用。
  本实验利用STM32自带的USB功能,连接电脑USB,虚拟出一个USB串口,实现电脑和开发板的数据通信。

USB CDC协议简介

  在前面章节STM32H743-ARM例程22-USB_CDC我们详细介绍过CDC通信协议,有兴趣的读者可以阅读前面章节
  本小节我们来介绍下实验流程
  主要修改usbd_cdc_if.c和main.c,会使用这四个函数,就可以用单片机与PC进行USB基本通信:
(1) CDC_Control_FS()
  来自主机请求的回调函数;CDC控制命令处理,列举了主机有可能向设备发送的一些命令。没有具体的处理过程,需要用户自己编写。其中包括串口参数的设置,要做串口转USB通信的话需要修改这里。只是为了用USB与PC通信则不用管这里。每个命令具体的意思需要查询CDC类手册。
(2) CDC_Receive_FS()
  接收数据回调函数;Buf为接收缓存。这个缓存实际上就是CDC_Init_FS()中设置的UserRxBufferFS[]数组。这个全局数组的定义在usbd_cdc_if.c文件中。Len为接收到数据的长度。这个变量不是全局的,需要用户声明变量把这个传出去。
(3) CDC_Transmit_FS()
  用来发送数据。
(4)CDC_TransmitCplt_FS()
  回调函数。

实验程序

1. 主函数

int main(void)
{
MPU_Config();
SystemClock_Config();
MX_GPIO_Init();
MX_USB_DEVICE_Init();
while (1)
{
len=sprintf(USB_TxBuf,"Hello! I am GT7000!\r\n");
CDC_Transmit_HS((uint8_t*)USB_TxBuf,len); //用来发送数据
HAL_Delay(1000);
}
}

2. CDC_Control_FS()函数

static int8_t CDC_TransmitCplt_HS(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
{
uint8_t result = USBD_OK;
UNUSED(Buf);
UNUSED(Len);
UNUSED(epnum);
return result;
}

3. USB_printf函数,方便直接输出字符串

#include <stdarg.h>void usb_printf(const char *format, ...){va_list args;uint32_t length;va_start(args, format);length = vsnprintf((char *)UserTxBufferHS, APP_TX_DATA_SIZE, (char *)format, args);va_end(args);CDC_Transmit_HS(UserTxBufferHS, length);}

实验现象

在这里插入图片描述

http://www.jsqmd.com/news/330823/

相关文章:

  • P10806 [CEOI 2024] 洒水器
  • 提示工程架构师手记:设计多轮对话AI提示系统时的上下文衔接技巧
  • Tableau实战:5个大数据分析案例带你快速上手
  • System Operations Management 2
  • 开题报告 宠物医院网站的设计与实现
  • 数据分析不用 “死磕” 软件!虎贲等考 AI:让数据从 “沉睡” 到 “说话” 仅需 30 分钟
  • 开题报告 公共交通管理系统的设计与实现
  • 盲测 4 款问卷工具!虎贲等考 AI 颠覆认知:学术问卷从 “无效数据” 到 “审稿人认可” 仅需 1 步
  • DeepSeek 辅助科研项目申报:可行性报告与经费预算框架的智能化撰写指南
  • 开题报告 公交公司车辆管理系统
  • 开题报告 基于微信小程序的二手书交易平台的设计与实现
  • 查重报告优化:DeepSeek修改论文重复率并保持逻辑连贯
  • 开题报告 酒店管理系统设计与开发
  • 【实测】C盘清理软件,C盘清理神器,一键干净安全C盘垃圾清理,告别C盘变红卡顿!
  • 科研绘图告别 “无效内卷”!虎贲等考 AI:让数据可视化成为论文 “加分王牌”
  • 课程论文还在 “凑字赶 due”?虎贲等考 AI 让 3 天搞定 80+,告别低效内耗
  • Spring Boot :使用 Spring Cache 注解方式集成 Redis
  • 深入解析 π₀ 与 π₀.5:Physical Intelligence 的机器人基础模型演进
  • 【开题答辩全过程】以 基于协同过滤推荐算法的小说漫画网站设计与实现为例,包含答辩的问题和答案
  • PowerShell 实现类似 Bash 的补全行为
  • 寒假8
  • 天翼云电脑重装系统
  • 基于深度学习的跌倒检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • Godot Vertex
  • 【Termux】Ollama安装deepseek-r1:1.5b模型
  • 投稿核心期刊不再 “陪跑”!虎贲等考 AI:让期刊论文从 “初稿到录用” 高效通关
  • 基于微信小程序的美食点餐平台设计与实现
  • 学术 PPT 制作效率战!虎贲等考 AIPPT:10 分钟碾压 3 天手动排版
  • MySQL函数详解:日期、字符串、数学及其他常用函数
  • 电脑下载速度很慢是什么原因?有哪些方法可以提高电脑的下载速度?