Thanks Jan, i forgot it! 
 
 
Jan Kardell ha scritto:
 
   
  2009/2/20 Andrea Russi  <andrearussi@xxxxxxxxx>
  Hi, 
I want to set the serial port (RS485) in this way: 1 start, 7 bit, 1
parity (even), 1 stop 
With the code below i read corrupted data (some negative value of byte,
impossible in 7 bit trasnfer), i don't understand why... 
Can someone help me? 
Thanks, 
Andrea Russi 
   
   
It's a bit field, you have to clear unwanted bits. See below.  
   
   
     
int status; 
struct rs485_ctrl ctrl485; 
char dev[] = "/dev/ttyS3"; 
int baudrate = B9600; 
     
// Apre la porta seriale 
fd = open(dev, O_RDWR | O_NONBLOCK); 
if (fd < 0) return -1; 
     
// Imposta la porta seriale nel funzionamento 485 
ctrl485.rts_on_send = 0; 
ctrl485.rts_after_sent = 1; 
ctrl485.delay_rts_before_send = 0; 
ctrl485.enabled = 1; 
     
status = ioctl(fd, TIOCSERSETRS485, &ctrl485); 
if (status) return -1; 
     
tcgetattr(fd, &ti);          // Legge la vecchia configurazione 
cfsetospeed(&ti, baudrate);   // Imposta la velocità di trasmissione 
cfsetispeed(&ti, baudrate);   // Imposta la velocità di ricezione 
//cfmakeraw(&ti); (non so se cambia qualcosa...) 
   
    
   ti.c_flag &= ~CSIZE; 
   
  ti.c_cflag
|= CS7; 
ti.c_cflag |= PARENB; 
ti.c_cflag &= ~PARODD; 
ti.c_cflag &= ~CSTOPB; 
     
if (tcsetattr(fd, TCSANOW, &ti) != 0) return -1; 
     
   
   
//Jan  
   
   
   
 
 
 |