我正在尝试从串行端口连续读取数据并将其保存到 buf 和/或文件中。此外,该数据是十六进制字符流而不是 ASCII。我正在使用运行 debian 的芯片。我已连接串行端口(UART)/dev/ttyS0
(这是我读取数据的位置和方式)。我正在尝试用 C 语言编写它。
我能够读取数据的某些部分,但不确定它是什么,因为我无法将其写入文本文件,而且当我尝试在控制台上打印时,数据不是可读格式,因为数据是十六进制和控制台打印字符串。是否可以打印十六进制字符?
另外,当我尝试连续读取端口时,缓冲区只保存第一个值并显示(打印)所有读取的相同值,但是当我将数据输出连接到 putty 窗口时,我可以看到数据流,也可以在使用设备监视工具查看原始数据时查看十六进制字符。
如何存储串口连续接收到的数据?
#debian version
$ cat /etc/issue
Debian GNU/Linux 8 \n \l
$ cat /etc/debian_version
8.6
代码片段:
main()
{
char *portname = "/dev/ttyS0" //Serial port connected(UART)
int fd = open (portname, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd < 0)
{
perror ("error %d opening %s: %s", errno, portname, strerror (errno));
return;
}
// *these two functions are used to set attributes for serial communication.*
set_interface_attribs (fd, B115200, 0); // set speed to 115,200 bps, 8n1 (no parity)
set_blocking (fd, 0); // set no blocking
char buf [100];
printf("Reading data on serial port");
int n;
while(1)
{
n = read (fd, &buf, sizeof(buf)); // read up to 100 characters if ready to read
puts(buf);
}
return 0;
}
界面设置
tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars
// disable IGNBRK for mismatched speed tests; otherwise receive break
// as \000 chars
tty.c_iflag &= ~IGNBRK; // disable break processing
tty.c_lflag = 0; // no signaling chars, no echo,
// no canonical processing
tty.c_oflag = 0; // no remapping, no delays
tty.c_cc[VMIN] = 0; // read doesn't block
tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout
tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl
tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls,
// enable reading
tty.c_cflag &= ~(PARENB | PARODD); // shut off parity
tty.c_cflag |= parity;
tty.c_cflag &= ~CSTOPB; //one stop bit
tty.c_cflag &= ~CRTSCTS;
有谁可以帮忙吗!!!!
提前致谢...