bonjour à tous,
je suis actuellement sur un developpement de port serie sous linux en C.
j'ouvre mon port comme cela :
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
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 /*************************************************************/
avec une tempo toute les 500 micro secondes.
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)
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
Partager