串口应用程序

时间:2022-04-30 21:03:24
#include <termios.h>

struct termios
{
tcflag_t c_iflag; /* input modes */
tcflag_t c_oflag; /* output modes */
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
cc_t c_cc[NCCS]; /* special characters */
}
int tcgetattr(int fd, struct termios *termios_p); //获取与终端相关的参数
inttcsetattr(int fd, int optional_actions, struct termios *termios_p); //设置终端参数
int tcsendbreak(int fd, int duration);
int tcdrain(int fd); //等待直到所有写入 fd 引用的对象的输出都被传输
int tcflush(int fd, int queue_selector); //刷清(扔掉)输入缓存
int tcflow(int fd, int action); //挂起传输或接受
int cfmakeraw(struct termios *termios_p);// 制作新的终端控制属性
speed_t cfgetispeed(struct termios *termios_p); //得到输入速度
speed_t cfgetospeed(struct termios *termios_p); //得到输出速度
int cfsetispeed(struct termios *termios_p, speed_t speed); //设置输入速度
int cfsetospeed(struct termios *termios_p, speed_t speed) //设置输出速度

send.c

#include <fcntl.h>
#include <unistd.h>
#include <termios.h>

int main()
{
char sbuf[] = {"Hello, this is a serial port test!\n"};
struct termios option;

///dev/pts/?是两个虚拟串口之一
int fd = open("/dev/pts/25", O_RDWR | O_NOCTTY | O_NONBLOCK);
if(fd == -1)
{
perror("Open serial port error!\n");
return -1;
}

printf("Open serial port success!\n");

tcgetattr(fd, &option);
cfmakeraw(&option);
cfsetispeed(&option, B9600);
cfsetospeed(&option, B9600);
tcsetattr(fd, TCSANOW, &option);

int length = sizeof(sbuf);
int ret = write(fd, sbuf, length);
if(ret == -1)
{
perror("Write data error!\n");
return -1;
}

printf("The number of char sent is %d\n", ret);

ret = close(fd);
if(ret == -1)
perror("Close the device failure!\n");

return 0;
}

recv.c

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <math.h>

#define MAX_BUFFER_SIZE 512

int main()
{
char hd[MAX_BUFFER_SIZE], *rbuf;
int ret;
struct termios opt;

///dev/pts/?是两个虚拟串口之一
int fd = open("/dev/pts/28", O_RDWR|O_NOCTTY|O_NDELAY);
if(fd == -1)
{
perror("Open serial port error!\n");
return -1;
}

printf("Open serial port success!\n");

tcgetattr(fd, &opt);
cfmakeraw(&opt);
cfsetispeed(&opt, B9600);
cfsetospeed(&opt, B9600);
tcsetattr(fd, TCSANOW, &opt);

rbuf = hd;
printf("Ready for receiving data...\n");
while(1)
{
while((ret = read(fd, rbuf, 1)) > 0)
printf("%c", *rbuf);
}
printf("\n");

ret = close(fd);
if(ret == -1)
perror("Close the device failure!\n");

return 0;
}

虚拟串口http://blog.csdn.net/zhangxuechao_/article/details/70670405