簡體   English   中英

使用 RS232 的 C 程序僅在啟動 minicom 時才有效

[英]C-program using RS232 does only work when starting minicom

我正在使用 RS232 通信程序。 到目前為止,該程序運行良好,但我需要在啟動程序之前啟動和退出 minicom(並最終關閉硬件流控制)。

下面是我用來初始化端口的代碼。 我已經看過http://www.cmrr.umn.edu/~strupp/serial.html並嘗試了不同的進一步標志/選項,例如明確設置硬件流控制關閉,但它沒有幫助。

int open_port(void)
{
        int fd;
#ifdef DEBUG
printf("open port\n");
#endif
        fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
        if (fd == -1)
        {
                perror("open_port: Unable to open /dev/ttyS0");
        }
        else
        {
                if (port_set==0){
                        port_set=1;
                        struct termios options;
                        tcgetattr(fd, &options);
                        cfsetispeed(&options, B9600);
                        cfsetospeed(&options, B9600);
                        options.c_cflag |= (CLOCAL | CREAD);
                        tcsetattr(fd, TCSANOW, &options);
                }
        }
        return (fd);
}

對於非規范模式,您需要使用宏 cfmakeraw 來簡化所需的各種設置。 否則程序將執行阻塞讀取,直到檢測到像 0x0A 這樣的終止字符,該字符可能永遠不會被發送。 插入這一行

cfmakeraw(&options);// make raw

就在這條線之后

tcgetattr(fd, &options);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM