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;
}
运行效果如图:
一键三连呀!