• 串口应用程序


    #include <termios.h>
    
    struct termios
    {
        tcflag_t c_iflag;      /* input modes */
        tcflag_t c_oflag;      /* output modes */
        tcflag_t c_cflag;      /* control modes */
        tcflag_t c_lflag;      /* local modes */
        cc_t     c_cc[NCCS];   /* special characters */
    }
    int tcgetattr(int fd, struct termios *termios_p); //获取与终端相关的参数
    inttcsetattr(int fd, int optional_actions, struct termios *termios_p); //设置终端参数
    int tcsendbreak(int fd, int duration);
    int tcdrain(int fd); //等待直到所有写入 fd 引用的对象的输出都被传输
    int tcflush(int fd, int queue_selector); //刷清(扔掉)输入缓存
    int tcflow(int fd, int action); //挂起传输或接受
    int cfmakeraw(struct termios *termios_p);// 制作新的终端控制属性
    speed_t cfgetispeed(struct termios *termios_p); //得到输入速度
    speed_t cfgetospeed(struct termios *termios_p); //得到输出速度
    int cfsetispeed(struct termios *termios_p, speed_t speed); //设置输入速度
    int cfsetospeed(struct termios *termios_p, speed_t speed) //设置输出速度

    send.c

    #include <fcntl.h>
    #include <unistd.h>
    #include <termios.h>
    
    int main()
    {
        char sbuf[] = {"Hello, this is a serial port test!
    "};
        struct termios option;
    
        ///dev/pts/?是两个虚拟串口之一
        int fd = open("/dev/pts/25", O_RDWR | O_NOCTTY | O_NONBLOCK);
        if(fd == -1) 
        {   
                perror("Open serial port error!
    ");
                return -1; 
        }   
    
        printf("Open serial port success!
    ");
    
        tcgetattr(fd, &option);
        cfmakeraw(&option);
        cfsetispeed(&option, B9600);
        cfsetospeed(&option, B9600);
        tcsetattr(fd, TCSANOW, &option);
    
        int length = sizeof(sbuf);
        int ret = write(fd, sbuf, length);
        if(ret == -1) 
        {   
                perror("Write data error!
    ");
                return -1; 
        }   
    
        printf("The number of char sent is %d
    ", ret);
    
        ret = close(fd);
        if(ret == -1)
            perror("Close the device failure!
    ");
    
        return 0;
    }

    recv.c

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <termios.h>
    #include <math.h>
    
    #define MAX_BUFFER_SIZE 512
    
    int main()
    {
        char hd[MAX_BUFFER_SIZE], *rbuf;
        int ret;
        struct termios opt;
    
        ///dev/pts/?是两个虚拟串口之一
        int fd = open("/dev/pts/28", O_RDWR|O_NOCTTY|O_NDELAY);
        if(fd == -1) 
        {   
            perror("Open serial port error!
    ");
            return -1; 
        }   
    
        printf("Open serial port success!
    ");
    
        tcgetattr(fd, &opt);
        cfmakeraw(&opt);
        cfsetispeed(&opt, B9600);
        cfsetospeed(&opt, B9600);
        tcsetattr(fd, TCSANOW, &opt);
    
        rbuf = hd; 
        printf("Ready for receiving data...
    ");
        while(1)
        {
            while((ret = read(fd, rbuf, 1)) > 0)
                    printf("%c", *rbuf);
        }
        printf("
    ");
    
        ret = close(fd);
        if(ret == -1)
            perror("Close the device failure!
    ");
    
        return 0;
    }

    虚拟串口http://blog.csdn.net/zhangxuechao_/article/details/70670405

  • 相关阅读:
    记laravel项目,本地环境PHP7.1,线上PHP版本7.2,报错each函数废弃问题
    [教程] 《Mysql 实战 45 讲》
    PHP递归求和计算1加到n的和
    SSL原理
    PHP之抽象类与接口
    iOS调试之挂起线程
    iOS之Starfield
    iOS之透视效果
    CSS之框模型
    HTTP之CacheControl
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709727.html
Copyright © 2020-2023  润新知