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;
    }
    

    运行效果如图:

    一键三连呀!
  • 相关阅读:
    HTML元素解释
    Java命名规范
    HDU 1058 Humble Numbers(DP,数)
    HDU 2845 Beans(DP,最大不连续和)
    HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
    HDU 2870 Largest Submatrix(DP)
    HDU 1421 搬寝室(DP)
    HDU 2844 Coins (组合背包)
    HDU 2577 How to Type(模拟)
    HDU 2159 FATE(二维完全背包)
  • 原文地址:https://www.cnblogs.com/jee-cai/p/14095367.html
Copyright © 2011-2022 走看看