1. Plataforma de prueba:
MCU: STM32F429NIH6
Herramienta: Software STM32CubeMX
Software de compilación: MDK
2. Pasos de configuración
(1). Abra el software STM32CubeMX, cree un nuevo archivo de proyecto y cree una rutina de envío y recepción de puerto serie. Es necesario enviar los datos recibidos por el puerto serie. La rutina para generar el puerto serie no se introducirá en detalle aquí.
(2). Configure USB_OTG_FS. Dado que los pines USB en la placa de circuito están conectados a PA11 y PA12, configure USB_OTG_FS aquí, configure Device Only en el elemento Mode y habilite las interrupciones al mismo tiempo.
(3) Configure USB_DEVICE y seleccione Clase de dispositivo de comunicación (Com de puerto virtual) para el elemento Clase para FS IP.
(4) Vuelva a escribir la función CDC_Receive_FS en el archivo .usbd_cdc_if.c, la función es devolver los datos recibidos para probar la función del transceptor del puerto serie virtual.
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). Agregue la función de impresión USB. El comienzo de usbd_cdc_if.c se refiere al archivo de encabezado "#include" stdarg.h "" (cambiado a guión de expansión único), y la siguiente función se agrega al final para realizar el función de impresión de puerto serie virtual.
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). La descripción del archivo del controlador USB
usb_device.c contiene solo una función de inicialización de la función del dispositivo USB MX_USB_DEVICE_Init(), que se llama al comienzo del programa.
usbd_cdc_if.c es el archivo de capa de aplicación de clase CDC de USB, que contiene las funciones de recepción, envío y control del puerto serie virtual.
usb_desc.c contiene descriptores USB y funciones como el procesamiento de enumeración USB.
usb_conf.com es un archivo de configuración de pin USB, que incluye la inicialización del pin USB y la configuración de parámetros, funciones de devolución de llamada de interrupción, etc.