Utilice el software STM32CubeMX para generar USB_DEVICE_Virtual Port Com (puerto serie virtual)

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.
inserte la descripción de la imagen aquí
(3) Configure USB_DEVICE y seleccione Clase de dispositivo de comunicación (Com de puerto virtual) para el elemento Clase para FS IP.
inserte la descripción de la imagen aquí

(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 */
}

inserte la descripción de la imagen aquí
(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);

inserte la descripción de la imagen aquí
(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.

Supongo que te gusta

Origin blog.csdn.net/qizhi321123/article/details/127277800
Recomendado
Clasificación