Establecer las opciones de puerto RS232 desde MacOS X CLI

3

¿Alguien sabe el comando mágico para configurar la velocidad en baudios, la paridad, el control de flujo, etc. para un puerto RS-232 en la CLI de MacOS X?

    
pregunta J. Polfer

2 respuestas

5

Para leer de mi arduino o attiny, utilizo este sencillo programa:

#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

int main(int argc, char **argv) {

    int fd;
    ssize_t len;
    unsigned char buf[8192];
    struct termios tio;

    fd = open( argv[1], O_RDONLY | O_NOCTTY | O_NONBLOCK );
    cfmakeraw(&tio);
    cfsetispeed(&tio,B9600);
    cfsetospeed(&tio,B9600);
    tcsetattr(fd,TCSANOW,&tio);

    for(;;) {
        len = read( fd, &buf[0], 8192 );
        if( len > 0 ) write(1,buf,len);
        sleep(1);
    }

}

En el mac, usar el chip FTDI (Arduino Duemilanove) para la serie significa que el comando stty no tiene un efecto duradero. Una vez que se cierra el puerto, vuelve a los parámetros predeterminados. Mientras se ejecuta este programa, puede usar stty para modificar los parámetros.

Aquí está el valor predeterminado:

$ stty -f /dev/tty.usbserial-* -a
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb

Luego, si el programa C se está ejecutando:

$ stty -f /dev/tty.usbserial-A6003SHf -a
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel ignbrk -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb -hupcl
discard dsusp   eof     eol     eol2    erase   intr    kill    lnext   
^@      ^@      ^@      ^@      ^@      ^@      ^@      ^@      ^@      
quit    reprint start   status  stop    susp    werase  
^@      ^@      ^@      ^@      ^@      ^@      ^@      

Puede cambiar la velocidad en baudios si, por ejemplo, el Arduino está utilizando Serial.begin (19200) para una transmisión más rápida.

$ stty -f /dev/tty.usbserial-* 19200
$ stty -f /dev/tty.usbserial-*
speed 19200 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel ignbrk -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb -hupcl
discard dsusp   eof     eol     eol2    erase   intr    kill    lnext   
^@      ^@      ^@      ^@      ^@      ^@      ^@      ^@      ^@      
quit    reprint start   status  stop    susp    werase  
^@      ^@      ^@      ^@      ^@      ^@      ^@      

Una vez que se cierra el programa C, el puerto serie vuelve a su valor predeterminado.

    
respondido por el Jack Schmidt
2

No sé en bash (o lo que sea que use shell OS X), pero es probable que se pueda lograr en Python con la biblioteca de piser.

Actualización: Cómo sobre esta respuesta en StackOverflow: enlace

Oh, espera, escribiste eso. ¿Funciona?

    
respondido por el pingswept

Lea otras preguntas en las etiquetas