STM32CubeMX实现USB虚拟串口环回测试功能

STM32CubeMX实现USB虚拟串口环回测试功能


  • 📍参考ST官方给出的参考案例:https://www.stmcu.com.cn/Designresource/detail/LAT/711466
  • 🎈同功能配置可以参考《STM32 USB使用记录:使用CDC类虚拟串口(VCP)进行通讯
  • 👉🏻对于Windows10系统是免驱的,电脑低于此操作系统的需要安装驱动:https://www.st.com/en/development-tools/stsw-stm32102.html

✨都是进行虚拟串口回环路功能测试,配置的相关代码有所差异。具体没有在严苛环境下对数据传输准确性测试。功能配置代码都是在usbd_cdc_if.c文件中进行配置。

📑配置补充说明

  • ⚡根据官方参考的配置参考需要注意,在配置void Main_loop(void)函数中,USB接收封包函数形参,改为&hUsbDeviceFS
    在这里插入图片描述

在这里插入图片描述

void Main_loop(void)
{
    uint32_t buffsize;

    if(UserTxBufPtrOut != UserTxBufPtrIn)
    {
        if(UserTxBufPtrOut > UserTxBufPtrIn) /* Rollback */
        {
            buffsize = UserTxBufPtrIn;
        }
        else
        {
            buffsize = UserTxBufPtrIn - UserTxBufPtrOut;
        }

        CDC_Transmit_FS((uint8_t*)(UserTxBufferFS + UserTxBufPtrOut), buffsize);
        UserTxBufPtrOut += buffsize;
        USBD_CDC_ReceivePacket(&hUsbDeviceFS);
    }
}

⛳需要将该函数名添加到对应的(#include "usbd_cdc_if.h")头文件中:

在这里插入图片描述

🔖需要将#include "usbd_cdc_if.h添加都main.c中。其他的内容按照官方文档说明进行配置即可。

  • 🌿时钟配置,需要注意时钟源以及外部晶振配置:(STM32CubeMX在配置RCC时,选择HSE时钟后,默认的钟频率不一定和自己所使用的开发板上的晶振频率一致,这里一定要仔细检查时钟树的HSE具体时钟频率)(个人使用STM32F401RC进行配置时,时钟树HSE这里默认配置的是25MHz,而实际开发板所使用的是8MHz,一开始没注意看,导致程序烧录后,无法识别到虚拟串口,后来导致排查问题找了好久才发现是时钟树这里,系统自动指定的HSE晶振频率不对)
    在这里插入图片描述

🔨烧录测试

  • 🌿烧录后,重新复位单片机,可以识别到虚拟串口。
    在这里插入图片描述

📐经测试,PA12接不接一个1.5K的上拉电阻都可以发现虚拟USB设备。

在这里插入图片描述

  • 🔧串口回环路测试:
    在这里插入图片描述

🛠利用CDC_Transmit_FS()函数创建一个类似printf输出函数

  • ✨在使用虚拟串口的情况下,为了方便调试输出,创建一个类似printf输出函数。
#include "stdio.h"
#include <stdarg.h>
#include "usbd_cdc_if.h"
void usb_printf(const char *fmt, ...) {
    char buf[256];//自定义缓冲区大小
    va_list args;
    va_start(args, fmt);
    vsnprintf(buf, sizeof(buf), fmt, args);
    va_end(args);
    CDC_Transmit_FS((uint8_t *)buf, strlen(buf));
}
  • 👉需要注意的是,由于USB虚拟串口的传输速率较慢,发送大量数据时可能会导致阻塞。因此,在实际使用中应该尽量避免一次性发送过多的数据,可以将数据分成多个小块进行发送。

📚测试工程

链接:https://pan.baidu.com/s/1xN-vDPpIHYFvaXbgljuaWA 
提取码:z33y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值