c语言串口发送数据函数
时间: 2023-07-15 21:15:17 浏览: 115
C语言 串口数据发送/接收
5星 · 资源好评率100%
在C语言中,发送数据到串口可以使用以下函数:
```c
#include <stdio.h> // 包含标准输入输出头文件
#include <stdlib.h> // 包含标准库头文件
#include <string.h> // 包含字符串操作头文件
#include <unistd.h> // 包含unix标准头文件
#include <fcntl.h> // 包含文件控制头文件
#include <termios.h> // 包含串口控制头文件
int send_data(int fd, char *data)
{
int len = strlen(data); // 获取数据长度
int ret = write(fd, data, len); // 写入数据到串口
if (ret != len) {
printf("Send data error!\n"); // 发送数据失败
return -1;
}
return 0;
}
```
其中,`fd`为串口文件描述符,`data`为要发送的数据。在使用该函数前,需要先打开串口,例如:
```c
int fd; // 定义串口文件描述符
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); // 打开串口
if (fd == -1) {
printf("Open serial port error!\n"); // 打开串口失败
return -1;
}
struct termios options;
tcgetattr(fd, &options); // 获取当前串口配置
cfsetispeed(&options, B115200); // 设置串口接收速度为115200bps
cfsetospeed(&options, B115200); // 设置串口发送速度为115200bps
options.c_cflag |= CLOCAL; // 忽略调制解调器状态线
options.c_cflag |= CREAD; // 打开接收功能
options.c_cflag &= ~CSIZE; // 数据位为8位
options.c_cflag |= CS8;
options.c_cflag &= ~PARENB; // 无奇偶校验位
options.c_cflag &= ~CSTOPB; // 停止位为1位
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 非规范模式
options.c_oflag &= ~OPOST; // 原始输出
options.c_cc[VTIME] = 0; // 读取一个字符等待的时间
options.c_cc[VMIN] = 1; // 读取字符的最小数量
tcsetattr(fd, TCSANOW, &options); // 设置串口配置
char data[] = "Hello, world!"; // 要发送的数据
send_data(fd, data); // 发送数据到串口
close(fd); // 关闭串口
```
以上代码中,打开串口使用`open`函数,串口配置使用`termios`结构体进行配置,其中设置串口接收和发送速度为115200bps,数据位为8位,无奇偶校验位,停止位为1位。在发送数据之前,需要先调用`send_data`函数将数据发送到串口。最后使用`close`函数关闭串口。
阅读全文