利用STM32CubeMX软件生成USB_DEVICE_Virtual Port Com(虚拟串口)

本文介绍如何在STM32F429NIH6上配置USB OTG FS实现虚拟串口(CDC)功能。主要步骤包括使用STM32CubeMX创建工程、配置USB_OTG_FS、设置USB_DEVICE为VirtualPortCom、修改CDC_Receive_FS函数以实现数据回传及添加USB打印功能。

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

一、测试平台:
MCU:STM32F429NIH6
工具:STM32CubeMX软件
编译软件:MDK

二、配置步骤
(1).打开STM32CubeMX软件,创建新的工程文件,先生成一个的串口的收发例程,需要实现将串口收到的数据发送的出来,生成串口的例程这里不再详细介绍。
(2).配置USB_OTG_FS,由于电路板上USB管脚连接的是PA11和PA12,所以这里配置USB_OTG_FS,Mode项配置Device Only,同时开启中断。
在这里插入图片描述
(3).配置USB_DEVICE,Class For FS IP项选择 Communication Device Class(Virtual Port Com)。
在这里插入图片描述

(4).usbd_cdc_if.c 文件中改写CDC_Receive_FS函数,作用是将收到的数据回传回去测试虚拟串口收发功能。

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
	unsigned short dwCnt=0;
	
	for(dwCnt=0;dwCnt<*Len;dwCnt++)
	{
		UsbTxdData[dwCnt]=Buf[dwCnt];
	}
	CDC_Transmit_FS(UsbTxdData,*Len);
	
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  return (USBD_OK);
  /* USER CODE END 6 */
}

在这里插入图片描述
(5).添加USB 打印函数,usbd_cdc_if.c 开头引用头文件“#include 《stdarg.h》”(改为单扩折号),末尾增加以下函数,即可实现虚拟串口打印功能。

void usb_printf(const char *format, ...)
{
    va_list args;
    uint32_t length;
 
    va_start(args, format);
    length = vsnprintf((char *)UserTxBufferFS, APP_TX_DATA_SIZE, (char *)format, args);
    va_end(args);
    CDC_Transmit_FS(UserTxBufferFS, length);
}

usb_printf("Test int: i = %d\r\n", dwData);
usb_printf("Test float: i = %f", 1.234);

在这里插入图片描述
(6).USB驱动文件说明
usb_device.c 里面仅包含一个 USB 设备函数初始化函数 MX_USB_DEVICE_Init(),在程序开始时调用。
usbd_cdc_if.c 为 USB 的 CDC 类应用层文件,里面包含虚拟串口的接收,发送和控制等函数。
usb_desc.c 包含 USB 的描述符,以及 USB 枚举处理等函数。
usb_conf.com 为 USB 管脚配置文件,包含引 USB 引脚初始化以及参数设置,中断回调函数等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值