用C语言写一个串口发送字符串函数
时间: 2023-03-20 07:03:36 浏览: 270
利用API函数实现字符发送.rar_PLC 串口通信_plc串口_利用API函数实现字符发送_自由口
可以使用以下代码实现串口发送字符串的函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
int serialport_init(const char* serialport, int baud)
{
struct termios options;
int fd;
fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0) {
perror("open");
return -1;
}
fcntl(fd, F_SETFL, 0);
tcgetattr(fd, &options);
speed_t speed;
switch (baud) {
case 4800:
speed = B4800;
break;
case 9600:
speed = B9600;
break;
case 19200:
speed = B19200;
break;
case 38400:
speed = B38400;
break;
case 57600:
speed = B57600;
break;
case 115200:
speed = B115200;
break;
default:
fprintf(stderr, "Unsupported baudrate\n");
return -1;
}
cfsetispeed(&options, speed);
cfsetospeed(&options, speed);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag &= ~(IXON | IXOFF | IXANY);
options.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL);
options.c_oflag &= ~OPOST;
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 1;
tcsetattr(fd, TCSANOW, &options);
return fd;
}
int serialport_write(int fd, const char* str)
{
int len = strlen(str);
int n = write(fd, str, len);
if (n != len) {
perror("write");
return -1;
}
return n;
}
int main()
{
int fd = serialport_init("/dev/ttyUSB0", 115200);
if (fd < 0) {
return 1;
}
serialport_write(fd, "Hello World!\n");
close(fd);
return 0;
}
```
这段代码通过Linux下的串口通信库termios来实现串口初始化和数据发送,其中serialport_init函数用于初始化串口,serialport_write函数用于发送字符串。在使用时,需要修改串口设备文件路径和波特率,以及要发送的字符串内容。
阅读全文