cat /dev/ttyS* :查看串口端口终端
ps -ax :查看进程和控制端的关系
----------------------------
Linux下进行串口通信
-----------------
1.打开串口
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
int fd;
if((fd=open("/dev/ttyS0",O_REWR|O_NOCTTY))==-1)
perror("can not open the serial port");
return 1;
}
=====================================================================
2.设置串口通信的参数(波特率,数据位,奇偶校验位,数据流控制,)
2.1设置波特率
#include <termios.h>
#include <unistd.h>
//speed_t cfgetispeed(const struct termios *termois_p)
//speed_t cfsetospeed(const struct termios *termois_p);
//成功则是返回termois_p结构中的输入/输出端口的波特率,失败则是返回-1
-----------------------
波特率设置的代码段:
struct termios opt;
//获取串口指向termios结构的指针
togetattr(fd,&opt);
cfgetispeed(&opt,9600);//设置输入的波特率为9600bps
cfgetospeed(&opt,9600);//设置输出的波特率为9600bps
//把修改后的termois数据设置到串口中
tcsetattr(fd,TCANOW,&opt);
----------------------------------------
2.2设置数据位
//数据位是指每个字节中实际数据所占的比特数,要修改的数据位可以通过修改termios结构中的c_cflag成员来实现
struct termios opt;
//获取串口指向termios结构的指针
togetattr(fd,&opt);
//屏蔽其他的标志
opt.c_cflag&=~CSIZE;
//将数据位修改为8bit
opt.c_cflag|=CS8;
//将修改后的termios数据设置到串口中
tcsetattr(fd,TCANON,&opt);
---------------------------------------------
2.3奇偶校验位
2.3.1如果设置偶校验,则需要把termios结构中的c_cflag设置为PARENB,并清除PARODD标志
opt.c_cflag &=PARENB;
opt.c_cflah&=~PARENB;
2.3.2如果设置偶校验,则需要把termios结构中的c_cflag设置为PARENB,和PARODD标志
opt.c_cflag|=(PARODD|PARENB);
----------------------------------------------------
2.4数据流控制
数据流控制就是使用何种方法来标志数据传输的开始和结束
2.4.1不适用数据流控制
opt.c_cflag&=~CRTSCFS;
2.4.2使用硬件数据流控制
opt.c_cflag|=CRTSCTS;
2.4.3使用软件数据流控制
opt.c_cflag|=IXON|XOFF|XANY;
============================================
3.读写串口
int len;
char sbuf[]={hello world!\n};
int send_buf=sizeof(sbuf);
len=write(fd,sbuf,send_buf);
===============================
4.关闭串口
int fd;
close()