Ich arbeite mit dem STM32F407VET6- Board. Und ich versuche, die Kommunikation zwischen meinem PC und dem Mikrocontroller über ein Sample herzustellen, das das überträgt, was es über USB CDC empfängt . Ich habe ein Beispiel für ein USB-Gerät über STM32CubeMX Version 4.16.0 und FW_F4 1.13.0 erstellt .
Mein Problem ist sehr fantastisch und ich weiß nicht, wie ich es googeln soll. Ich benutze;
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
Und
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
Funktionen.
Ich höre Ausgaben von /dev/ttyACM0
über CuteCom. Außerdem werden Befehle darüber gesendet. Wenn ich eine Zeichenfolge in den Puffer lege, wird sie nicht ohne Rauschen gesendet. Aber es sendet diese Zeichen korrekt (!):
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
Außerdem lese ich diese Zeichen im Puffer, wenn die Zeichenfolge, die ich über CuteCom gesendet habe, mit einem davon endet. Wenn ich nur den Port abhöre, nichts sende, ändert sich die erste Zeichenfolge und wird ~
nach mehreren Übertragungen zum Tilde( )-Zeichen. Hier starte ich die Anwendung, warte und sende die Zeichenfolge in der Reihenfolge: "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
...
Und hier ist der Kommunikationsteil des Codes:
...
/* 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 */
....
Hier sind einige Zeilen von usbd_cdc_if.c
, 84 bis 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 bis 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 */
}
Wo soll ich nach einer Lösung suchen? Oder wie kann ich es auf Google suchen?
Cutecom ist eigentlich keine niedliche Software. Es war die Wurzel des Problems. Nachdem ich alle möglichen Korrekturen ausprobiert habe, habe ich dies gerade in das Terminal eingegeben.
echo "CuteCom isn't actually cute software..." > /dev/ttyACM0
und es hat funktioniert! Ich kann jetzt meine Zeichenfolge aus dem Puffer lesen. Ich weiß nicht warum, aber ich hatte schon einmal ein Problem wie dieses. Ich würde mich freuen, wenn jemand meine Antwort verbessern würde.
echo
sendet die Zeichen nicht, während sie eingegeben werden, sondern wenn der Befehl ausgeführt wird.
pjc50
CL.
Orhan G. Hafif
usbd_conf.c
der Datei.Orhan G. Hafif