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