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!\r\n";
	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\r\n",recvbuff);
 //       }
	}
	close(fd);
	return 0;
}

运行效果如图:

posted @ 2020-05-27 22:51  jee-cai  阅读(148)  评论(0编辑  收藏  举报