USB协议学习笔记 - CDC类虚拟串口Virtual Port Com

本文介绍了如何使用STM32CubeMX在STM32L475平台上快速搭建USB虚拟串口工程,通过KeilMDK5编译并成功枚举虚拟串口。通过串口助手发送数据,STM32端能接收到数据并存储在UserRxBufferFS全局数组中。同时,STM32也能通过CDC_Transmit_FS函数正确发送数据。虽然初步实现了功能,但USB CDC类的详细使用还需深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

  • USB 的功能还是比较的复杂,这里主要了解USB CDC类(Communication Device Class)实现的虚拟串口 【Virtual Port Com】
  • 学习的思路依旧是先用起来,再去针对性的熟悉USB相关的协议
  • USB转串口,是的,本篇就是实现这个功能

平台搭建

  • STM32平台:STM32L475,当然其他的STM32系列拥有USB接口的依旧可以拿来验证
  • 这里使用 STM32CubeMX 快速搭建USB的学习环境
  • 这里主要为:USB Device, 选择USB组件:【Virtual Port Com】
    在这里插入图片描述
  • 这里生成Keil MDK5的功能,不用改代码,就可以编译成功,下载到开发板,发现枚举了一个USB的虚拟串口出来

在这里插入图片描述

在这里插入图片描述

功能验证

  • 既然是串口,我就使用串口助手,打开这个【虚拟串口】,发送数据,没响应,通过看代码,发现,接收串口数据的API为:usbd_cdc_if.c 中的:CDC_Receive_FS
  • 在:CDC_Receive_FS 函数打上【断点】,进入调试模式,看看是否可以接收到 PC端通过串口助手发送的串口数据

在这里插入图片描述

  • 实测发现接收到了全局的数组:UserRxBufferFS 中了,并且,PC端波特率随便设置,发送的数据,都能正确的接收到

验证发送

  • 看代码,STM32端发送串口数据的函数为:CDC_Transmit_FS,这里不需要设置波特率之类的
#include "main.h"
#include "usb_device.h"
#include "usbd_cdc_if.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

#define VCP_BUF_MAX_LEN         128

void vcp_send_test(uint8_t ch)
{
    uint8_t temp_buf[VCP_BUF_MAX_LEN];
    for (uint16_t i = 0; i < VCP_BUF_MAX_LEN; i++)
    {
        temp_buf[i] = 0x41;
    }
    temp_buf[0] = ch;

    CDC_Transmit_FS(temp_buf, sizeof(temp_buf));
}

int main(void)
{
    uint8_t ch = 0x00;
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USB_DEVICE_Init();

    while (1)
    {
        HAL_Delay(5000);
        vcp_send_test(ch);
        ch++;
    }
}

  • 验证发现,STM32 虚拟串口发送出来的数据,是正确的

在这里插入图片描述

小结

  • 初步通过ST官方提供的STM32CubeMX,快速搭建了USB【虚拟串口】工程,但是CDC类的使用细节,还需要进一步了解
  • USB协议比较的庞大,需要不断的学习研究,加上不断的【使用】与【实践】,才能真正的掌握起来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangsz_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值