Soy un principiante en STM32F4 y estoy aprendiendo a usar el puerto COM virtual ("VCP") USB para transmitir datos desde el microcontrolador a una PC.
El puerto virtual se detecta como "Puerto COM virtual de STMicroelectronics", y uso un software de monitoreo en serie para ver los datos recibidos por la PC.
La PC está recibiendo todos los 0x00 sin importar lo que envíe en mi código.
Llamé a la función VCP_DataTx () para enviar datos.
¿Alguna idea sobre lo que está mal?
p.s. en mi función principal (), solo llamé a USBD_Init () para inicializar el dispositivo USB, ¿es eso suficiente? ¿Me perdí algo que debería estar configurado? Veo a alguien decir USART cuando se habla de VCP, ¿hay alguna relación entre ellos?
Gracias.
Este es mi main.cpp. No hice nada más que inicializar el dispositivo USB y enviar datos.
#include "usbd_cdc_core.h"
#include "usbd_usr.h"
#include "usb_conf.h"
#include "usbd_desc.h"
#include "usbd_cdc_vcp.h"
USB_OTG_CORE_HANDLE USB_OTG_dev;
uint8_t Buf[6] = "A";
int main(void)
{
__IO uint32_t i = 0;
USBD_Init(&USB_OTG_dev,
USB_OTG_FS_CORE_ID,
&USR_desc,
&USBD_CDC_cb,
&USR_cb);
VCP_DataTx(Buf, 6);
/* Main loop */
while (1)
{
VCP_DataTx(Buf, 6);
while (i < 0x77ffff)
{
i++;
}
}
}
Para llamar a VCP_DataTx () en main, eliminé la palabra clave static en usbd_cdc_vcp.h y usbd_cdc.vcp.c
p.p.s. No me di cuenta de que usbd_cdc_vcp.c no está en la biblioteca USB de STM. Viene del ejemplo de VCP en STM32_USB-Host-Device_Lib_V2.1.0, y la función VCP_DataTx () se parece a:
uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len)
{
if (linecoding.datatype == 7)
{
APP_Rx_Buffer[APP_Rx_ptr_in] = USART_ReceiveData(EVAL_COM1) & 0x7F;
}
else if (linecoding.datatype == 8)
{
APP_Rx_Buffer[APP_Rx_ptr_in] = USART_ReceiveData(EVAL_COM1);
}
APP_Rx_ptr_in++;
/* To avoid buffer overflow */
if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
{
APP_Rx_ptr_in = 0;
}
return USBD_OK;
}