programmation port serie (parametrage)
bonjour à tous,
je suis actuellement sur un developpement de port serie sous linux en C.
j'ouvre mon port comme cela :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
/*****************************************************************/
//ouverture et init dU ports série
struct termio tnew;
FdComD=open("/dev/ttySA2",O_RDWR|O_NONBLOCK);
tnew.c_line = 0;
tnew.c_iflag = IGNBRK|IGNPAR;
//tnew.c_oflag &=~ OPOST;
tnew.c_oflag = 0;
tnew.c_lflag &=~ ICANON;
tnew.c_cflag &=~ CBAUD;
tnew.c_cflag |= B9600;
tnew.c_cflag &=~ CSIZE;
tnew.c_cflag |= CS8;
tnew.c_cflag &= ~PARENB;//No Parity
tnew.c_cflag |= CREAD;
tnew.c_cflag |= CLOCAL;
tnew.c_cc[VMIN] = 1;
tnew.c_cc[VTIME] = 0;
ioctl(FdComD,TCSETA,&tnew);
ioctl(FdComD,TCFLSH,0); //clear input serial buffer
ioctl(FdComD,TCFLSH,1); //clear output serial buffer
/*************************************************************/ |
puis je lis les caraceteres qui arrivent sur la liaison serie
Code:
1 2 3 4 5 6 7 8 9 10 11
|
do{
....
if (Tempo<difftemp)
{
val=read(FdComD,Trame,1);
printf("valeur = %d, octet lu =%02X",val,Trame[0]);
fflush(NULL);
}
}while(true) |
avec une tempo toute les 500 micro secondes.
Mon probleme vient du fait que j'envoie une trame a 9600 bauds toutes les 2ms et je ne percois pas les valeurs correspondant au saut entre 2 trrames (les caracteres arrivent toutes les 830 micro s pendant l'envoie d'une trame)
j'ai toujours val =1 et les caracteres de ma trame.
si je rajoute "ioctl(FdComD,TCFLSH,0); " dans la boucle do while j'ai plus rien.
Est ce un pb de configuration du port serie ?? je souhaite avoir -1 pour val lors de read sans caractere ceci me permettant de detecter des debut de trame.
merci par avance