zoukankan      html  css  js  c++  java
  • linux下串口开发

    一、串口通信

    通信的基本方式可分为并行通信与串行通信两种方式:

    • 并行通信是指数据的各个位同时进行传输的一种通信方式  优点:传输速度快  
      缺点:数据有多少位就需要多少根传输线,所以在位数多、传输距 离远时,通信线路复杂,成本高。

    • 串行通信是指数据一位一位地传输的方式。
      优点:这种通信方式的数据传输只需一、两根传输线,通信线路简单,成本低,特别适用于远程通信
      缺点:传输速度较慢。多用于传输距离长、低速度的场合。

    常用的串行通信协议有uart、iic、spi、单总线、usb等,其中以uart在控制领域应用最为普遍。
    **按照物理层的实现不同,**uart又可以分为:

    (1)RS-232-C:也称标准串口,是目前最常用的一种串行通讯接口 (2)RS-422:为改进RS-232通信距离短、速率低的缺点
    (3)RS-485:为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力

    其中rs232用+5——+15表示逻辑0,-5——-15表示逻辑1



    二、(应用)在linux下的串口开发c编程实例
    自己可以根据需要进行数据位校验位停止位和波特率的修改

    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <string.h>
    
    int main()
    {
    	int fd;
    	char recvbuff[128]; 
    	int count=0;
    	char buffer[]="Hello,word!
    ";
    	struct termios uart_cfg;
    	fd=open("/dev/ttyS1",O_RDWR|O_NONBLOCK|O_NOCTTY);//打开串口
    	if(fd<0)
    	{
    		perror("Failed to open serial:");
    		return -1;
    	}
        fcntl(fd,F_SETFL,0);//设置串口阻塞办法
    	//cfmakeraw(&uart_cfg);//将终端设置为原始模式 8n1没有流控
    	cfsetspeed(&uart_cfg,B9600);	//设置波特率
       // uart_cfg.c_cflag|=CLOCAL|CREAD;
    //设置数据位
    uart_cfg.c_cflag &= ~CSIZE; /* 用数据位掩码清空数据位设置 */
    uart_cfg.c_cflag |= CS8;//数据位为8
    //设置奇偶校验位
    //奇校
    //uart_cfg.c_cflag |= (PARODD | PARENB); 
    //uart_cfg.c_iflag |= INPCK;
    //偶校
    uart_cfg.c_cflag |= PARENB;
    uart_cfg.c_cflag &= ~PARODD;   /* 清除奇校验标志,则配置为偶校验*/
    uart_cfg.c_iflag |= INPCK;
    //无校
    //uart_cfg.c_cflag &= ~PARENB;
    //设置停止位
    //uart_cfg.c_cflag &=  ~CSTOPB;	/* 将停止位设置为一个比特 */
    uart_cfg.c_cflag |=  CSTOPB;	/* 将停止位设置为两个比特 */
    	tcflush(fd,TCIOFLUSH);/* 用于清空输入/输出缓冲区*/
    	tcsetattr(fd,TCSANOW,&uart_cfg);//使新的设置生效
    	while(1)
    	{
    		write(fd,buffer,strlen(buffer));	//往串口发送消息	
    		sleep(1);
          //  count=read(fd,recvbuff,127);   //读取串口接收数据
           // if(count>0)
         //   {
               // recvbuff[count]=0;
               // printf("STR:%s
    ",recvbuff);
     //       }
    	}
    	close(fd);
    	return 0;
    }
    

    运行效果如图:

    一键三连呀!
  • 相关阅读:
    cstring string 比较之二(学习笔记)
    转 大话设计模式学习笔记(思维导图) 更新中
    转 十三种设计模式的思维导图
    (转)关于栈、堆、静态存储区最大可分配大小的探讨 海量之一
    如何学习网络协议(学习笔记)
    境界篇:linux 驱动开发的境界(学习笔记)
    b.关于vc编程境界的讨论
    关于编程境界的小结
    Java异常(一) Java异常简介及其架构
    多线程简单阐述
  • 原文地址:https://www.cnblogs.com/jee-cai/p/14095367.html
Copyright © 2011-2022 走看看