STM32 CDC ACM Virtual COM problema con LINUX
sto cercando di far comunicare un STM32 tramite VCOM su USB con un PC Linux Ubuntu.
il programma è fatto con il framework QT
Il PC apre la porta seriale e invia la stringa "who" il micro risponde con una stringa predefinita.
il problema è che con linux sembra che viene inviato un carattere alla volta.
Questa è la funzione del micro che viene richiamata se sono presenti dati nel buffer in ingresso:
nel caso di linux la funzione viene chiamata per ogni carattere e la variabile cnt risulta 1.
Mentre con windows funziona perfettamente: la funzione viene chiamata quando il uart_rx_buf contiene i 3 catratteri trasmessi dal PC.
ho provato anche con "moserial" a mandare manualmente la stringa "who" ma il risultato è lo stesso.
Credevo fosse un problema di configurazione della tty, dato che linux tratta la seriale come un terminale. sono quindi andato a spulciarmi il sorgente della libreria Qtserialport e la seriale viene inizializzata in raw mode con cfmakeraw().
Idee?? nessuno si è imbattuto in un problema analogo?
Grazie!
il programma è fatto con il framework QT
Il PC apre la porta seriale e invia la stringa "who" il micro risponde con una stringa predefinita.
il problema è che con linux sembra che viene inviato un carattere alla volta.
Questa è la funzione del micro che viene richiamata se sono presenti dati nel buffer in ingresso:
- Codice: Seleziona tutto
...
void USBD_CDC0_ACM_DataReceived(uint32_t len)
{
int32_t cnt;
(void)(len);
cnt = USBD_CDC_ACM_ReadData(0U, uart_rx_buf, 64);
if (cnt > 0) {
osSignalSet(T_LED_Thread, 0x01);
}
}
...
nel caso di linux la funzione viene chiamata per ogni carattere e la variabile cnt risulta 1.
Mentre con windows funziona perfettamente: la funzione viene chiamata quando il uart_rx_buf contiene i 3 catratteri trasmessi dal PC.
ho provato anche con "moserial" a mandare manualmente la stringa "who" ma il risultato è lo stesso.
Credevo fosse un problema di configurazione della tty, dato che linux tratta la seriale come un terminale. sono quindi andato a spulciarmi il sorgente della libreria Qtserialport e la seriale viene inizializzata in raw mode con cfmakeraw().
Idee?? nessuno si è imbattuto in un problema analogo?
Grazie!
