Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

STM32 CDC ACM Virtual COM problema con LINUX

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] STM32 CDC ACM Virtual COM problema con LINUX

Messaggioda Foto Utentepusillus » 17 gen 2018, 16:54

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:

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!
Avatar utente
Foto Utentepusillus
3.207 3 6 11
Master
Master
 
Messaggi: 1031
Iscritto il: 5 mar 2016, 15:19
Località: Latina

0
voti

[2] Re: STM32 CDC ACM Virtual COM problema con LINUX

Messaggioda Foto Utentepusillus » 21 gen 2018, 19:19

Mi rispondo da solo:
Come avevo intuito, Linux tratta la seriale come se fosse collegata ad un terminale e non basta impostarla come raw ma vanno settate anche altre impostazioni sulla seriale.
Ho modificato la libreria qtserialport e adesso il programma funziona.
Credo dovrò aprire un bug report agli sviluppatori QT... dopo qualche altra verifica.
Screenshot_2018-01-21_15-20-41.png
Avatar utente
Foto Utentepusillus
3.207 3 6 11
Master
Master
 
Messaggi: 1031
Iscritto il: 5 mar 2016, 15:19
Località: Latina

0
voti

[3] Re: STM32 CDC ACM Virtual COM problema con LINUX

Messaggioda Foto Utentepusillus » 21 feb 2018, 14:19

Aggiorno questo post perché potrebbe essere utile a chi volesse utilizzare le QT:
Ho contattato gli sviluppatori che mi hanno consigliato di non apporre modifiche ai sorgenti ma di utilzzare la funzione handle() per ottenere il descrittore a basso livello della seriale e fare le modifiche dal programma.
Ho seguito il loro consiglio e il codice va una meraviglia.

Dopo l'aggiornamento del kernel di Linux Ubuntu il problema è sparito: il programma funziona anche senza modifiche sulle opzioni della seriale ?%
Avatar utente
Foto Utentepusillus
3.207 3 6 11
Master
Master
 
Messaggi: 1031
Iscritto il: 5 mar 2016, 15:19
Località: Latina


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti