bonjour à tous,

je suis actuellement sur un developpement de port serie sous linux en C.

j'ouvre mon port comme cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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