Je galère grave pour faire fonctionner l'UART sur mon Raspberry Pi3...
Malgré tout ce que je trouve sur les forums, mon UART ne veut rien lire... J'ai un système externe qui crache des data surt l'UART, j'ai placé un espion avec un convertisseur UART/RS232 vers USB vers mon PC, et mon système envoie bien les données. Ca fonctionnait parfaitement avec Arduino....
Dans la config du pi3: serial on, wire on.
J'ai lancé cette commande: sudo chmod a+rw /dev/ttyAMA0
Et voici mon code, strlen contien en permanence 4 XXX XXX XXX, on dirait qu'il se mets au taquet de la vaaleur d'un int:
Code: Select all
//Open in non blocking read/write mode
if(serialPort = open("/dev/ttyAMA0", O_RDWR | O_NONBLOCK) == -1){
cout << "Error - Unable to open UART" << endl;
return false;
}
fcntl(serialPort, F_SETFL, FNDELAY);
struct termios options;
tcgetattr(serialPort, &options);
options.c_cflag = B115200 | CS8 | CLOCAL | CREAD; //<Set baud rate
options.c_iflag = IGNPAR;
options.c_oflag = 0;
options.c_lflag = 0;
tcflush(serialPort, TCIFLUSH);
tcsetattr(serialPort, TCSANOW, &options);
// On éteint J2_START pour lancer le processus
Device::piloterDiscret(RELAY_ON, RELAY_ON, RELAY_ON, RELAY_ON, RELAY_ON, RELAY_OFF, RELAY_OFF); // un action qui fait que mon système externe crache sur l'UART
// Time Out
time(&now);
while(1){
if((strLen = read(serialPort, (void*)readBuf, 511)) > 0){ //Si le buffer d'entré contient des datas
cout << "strlen: " << strLen << endl;
readBuf[strLen] = '\0';
dataOk = true; // Juste pour dire qu'on a bien chargé des données
}else{
time(&timeAfter);
if(timeOut = (difftime(timeAfter, now) >= RS232_TIME_OUT)) // Timeout = 5000ms
break;
}
usleep(100000);
}
cout << "Fin récup donnée strLen: " << strLen << endl;