gpt4 book ai didi

c - C 中的 Linux 串口

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:45 24 4
gpt4 key购买 nike

<分区>

我用c写了一个读写串口的程序,但问题是我正在使用while循环,它不断地通过串口发送命令。

  1. 我想在串口上写一些命令
  2. 等待回答
  3. 再写一个命令
  4. 等待一些答案等等

我的代码是这样的:-

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>
#include <errno.h>
#include <time.h>

int main()

{
printf("\n");
printf("Please wait till serial Port is being Initialized .... \n");
sleep(2);
printf("\n................. Initializing ................\n");
sleep(2);
printf("\n");
printf("\n\n");
static int fd = 0;
int len;
char res[100];
char s[100] = " Hellow World";


struct termios options;

//==================================================================
// hard coaded port ttyO3
//==================================================================

fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, O_NONBLOCK);

//==================================================================
// Error Handling
//==================================================================

if (fd < 0)
{
printf("Serial open error %d %s\n", errno, strerror(errno));
}
printf("\n");

printf("\n==================================================\n");

//==================================================================
// Get the current options for the port...
//==================================================================

tcgetattr(fd, &options);


//==================================================================
// Set the baud rates to 115200...
//==================================================================


cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);

//=================================================================
// Enable the receiver and set local mode..
//==================================================================

options.c_cflag |= (CLOCAL | CREAD);

//==================================================================
// Set the new options for the port...
//==================================================================

tcsetattr(fd, TCSANOW,&options);

while(1)
{



write(fd,s,strlen((char*)s));
sleep(1);

len = read(fd,res,100);
if (len < 0)
{
if (errno == EAGAIN)
{
continue;
}
else
{
printf("read error %d %s\n", errno, strerror(errno));
}
}
else
{
res[len < 100 ? len:100] ='\0';
printf("read %d chars: %s\n",len, res);
}
}
close(fd);
}

我哪里错了。

感谢和问候

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com