Estoy trabajando con el STM32F407VET6 . Y estoy tratando de establecer una comunicación entre mi PC y el Micro Controller a través de una muestra que transmite lo que recibe a través de USB. He creado un ejemplo de dispositivo USB a través de la versión STM32CubeMX 4.16.0 y FW_F4 1.13.0 .
Mi problema es muy fantástico y no sé cómo buscarlo en Google. Estoy usando;
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
y
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
funciones.
Estoy escuchando las salidas de /dev/ttyACM0
a través de CuteCom.
Además, enviando comandos a través de él. Si pongo alguna cadena en el búfer, no se envía sin ruido. Pero envía estos caracteres correctamente (!):
DEC OCT HEX BINARY CHARACTER DESCRIPTION
-------------------------------------------------------
63 077 3F 00111111 ? Question Mark
71 107 47 01000111 G Uppercase G
75 113 4B 01001011 K Uppercase K
83 123 53 01010011 S Uppercase S
99 143 63 01100011 c Lowercase c
111 157 6F 01101111 o Lowercase o
119 167 77 01110111 w Lowercase w
También leo estos caracteres en el búfer si la cadena que envié a través de CuteCom termina con uno de ellos. Si solo escucho el puerto, no envío nada, la primera cadena está cambiando y cambia al carácter de tilde ( ~
) después de varias transmisiones. Aquí, estoy iniciando la aplicación, esperando y enviando la cadena en orden de: "w"
, "c"
, "asdfw"
, "a"
, "b"
, "c"
, "G"
:
USB_Tx_buf: STRING_OF_TRANSMIT_BUFFER
USB_Rx_buf: STRING_OF_RECEIVE_BUFFER
-----------------------------------
USB_Tx_buf: E�L
USB_Rx_buf: 1�k
-----------------------------------
USB_Tx_buf: 0@�
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf: A��
USB_Rx_buf: TA@
-----------------------------------
USB_Tx_buf: Ag
USB_Rx_buf: E�L
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf: A��
-----------------------------------
USB_Tx_buf: E�L
USB_Rx_buf: 1�k
-----------------------------------
USB_Tx_buf: 0@�
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf:
�z
USB_Rx_buf:
�z
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: ~
-----------------------------------
USB_Tx_buf: ~
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: w
-----------------------------------
USB_Tx_buf: w
USB_Rx_buf: a�Wc~���CEIVE_BUFFER
-----------------------------------
USB_Tx_buf: a�Wc~���CEIVE_BUFFER
USB_Rx_buf: a�Wc~���CEIVE_BUFFER
-----------------------------------
USB_Tx_buf: a�Wc~���CEIVE_BUFFER
USB_Rx_buf: a�Wc~���CEIVE_BUFFER
-----------------------------------
USB_Tx_buf: b�Vc~���CEIVE_BUFFER
USB_Rx_buf: b�Vc~���CEIVE_BUFFER
-----------------------------------
USB_Tx_buf: b�Vc~���CEIVE_BUFFER
USB_Rx_buf: b�Vc~���CEIVE_BUFFER
-----------------------------------
USB_Tx_buf: b�Vc~���CEIVE_BUFFER
USB_Rx_buf: b�Vc~���CEIVE_BUFFER
-----------------------------------
USB_Tx_buf: b�Vc~���CEIVE_BUFFER
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: c
USB_Rx_buf: c
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
-----------------------------------
USB_Tx_buf: G
USB_Rx_buf: G
...
Y aquí está la parte de la comunicación del código:
...
/* init code for USB_DEVICE */
MX_USB_DEVICE_Init();
/* USER CODE BEGIN startUSBTask */
uint8_t USB_TX_buf[MAX_COMMAND_STR_SIZE];
sprintf ( ( char * ) USB_TX_buf, "STRING_OF_TRANSMIT_BUFFER\r" );
sprintf ( USB_RX_BUF, "STRING_OF_RECEIVE_BUFFER" );
/* Infinite loop */
for ( ;; )
{
CDC_Transmit_FS ( USB_TX_buf, ( uint16_t ) strlen ( ( char * ) USB_TX_buf ) );
osDelay ( 10 );
if (DEBUG) printf ( "USB_TX_buf: %s\nUSB_Rx_buf: %s\n-----------------------------------\n", ( char * ) USB_TX_buf, USB_RX_BUF );
}
/* USER CODE END startUSBTask */
....
Aquí hay algunas líneas de usbd_cdc_if.c
, 84 a 89:
/* Received Data over USB are stored in this buffer */
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
char USB_RX_BUF[APP_RX_DATA_SIZE];
/* Send Data over USB CDC are stored in this buffer */
uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
251 a 262:
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
sprintf(USB_RX_BUF, (char*)Buf);
return (USBD_OK);
/* USER CODE END 6 */
}
¿Dónde debo buscar una solución? O ¿Cómo puedo buscarlo en Google?