C语言写一个cat1模组串口通讯代码
时间: 2024-02-17 22:03:41 浏览: 135
C#串口通讯代码
4星 · 用户满意度95%
下面是一个基于Linux系统的C语言串口通讯代码示例,使用的是cat1模组和串口设备文件/dev/ttyUSB0:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#define BAUDRATE B115200 // 串口波特率
#define MODEMDEVICE "/dev/ttyUSB0" // 串口设备文件
#define _POSIX_SOURCE 1 // POSIX兼容性选项
#define FALSE 0
#define TRUE 1
volatile int STOP = FALSE;
// 打开串口
int open_serial()
{
int fd;
struct termios oldtio, newtio;
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
if (fd < 0)
{
perror(MODEMDEVICE);
exit(-1);
}
tcgetattr(fd, &oldtio); /* save current serial port settings */
bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 character received */
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
return fd;
}
// 关闭串口
void close_serial(int fd)
{
close(fd);
}
// 读取串口数据
int read_serial(int fd, char *buf, int buf_len)
{
int res = read(fd, buf, buf_len);
if (res <= 0)
{
perror("Read error");
return -1;
}
return res;
}
// 发送串口数据
int write_serial(int fd, const char *buf, int buf_len)
{
int res = write(fd, buf, buf_len);
if (res <= 0)
{
perror("Write error");
return -1;
}
return res;
}
int main()
{
int fd;
char buf[255];
fd = open_serial();
// 发送AT指令并读取响应
write_serial(fd, "AT\r\n", 4);
read_serial(fd, buf, sizeof(buf));
printf("%s", buf);
close_serial(fd);
return 0;
}
```
该程序使用了Linux系统提供的串口API,通过open_serial()函数打开串口设备,并设置串口参数。然后,使用write_serial()函数发送AT指令,并使用read_serial()函数读取响应数据。最后,使用close_serial()函数关闭串口设备。
阅读全文