Bonjour !

J'ai 2 montages a base de STM32 qui communiquent entre eux par des modules à 2.4Ghz. Ces modules utilisent l'UART pour communiquer avec les cartes.

J'ai pu configurer mes modules, j'arrive à échanger quelques données, mais sur ce dernier point, c'est le bordel.

Je transfert des paquets de 30 octets avec 1 premier octet d'entête, puis 14 int en 16 bits et un char à la fin que je laisse à 0 pour le moment. Je met tout ça dans un grand buffer de 30 bytes du coté de l'émetteur, j'écris tout d'un bloc avec serial.write(buffer, 30); et ça part (j'ai configuré mon module pour des paquets de 32 octets max).

De l'autre coté, j'ai tenté pas mal de truc, mais tout tourne autour de l'idée suivante dans le loop() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
while(mySerial.available() ) {
    readBuf[e] = (byte)mySerial.read();
    e++;
}
Le problème, c'est que les paquets sont découpés un peu au grès du vent (la doc du module dit pourtant bien qu'en dessous de la valeurs maximale d'un paquet, tout est envoyé en un seul paquet. mais bon, admettons.)

Je pourrais recoller les morceaux de paquets que je reçoit, ce n'est pas trop le soucis, mais comment diable avec un protocole de communication tel que l'UART fait-on pour structurer un peu ses données ? Je ne cherche pas forcément une vraie sérialisation, mais comment faire pour savoir quand on commence un nouveau paquet vu que je transporte des variables susceptibles de contenir n'importe quel valeur (et donc y compris la valeur d'un entête que je pourrais arbitrairement spécifier).

En vous remerciant