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

一、测试平台:
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 引脚初始化以及参数设置,中断回调函数等

猜你喜欢

转载自blog.csdn.net/qizhi321123/article/details/127277800