Linux下, 通过串口控制单片机的灯lLED0亮,单片机程序已经写好,上位机部分的传输信息这一块有点问题 20
我想在LINUX下,通过串口来实现对单片机LED灯的控制。单片机上的串口程序是,当串口输入过来的信号为'y'时,LED0就亮。用串口助手已经调试过了,程序没有问题现在面临...
我想在LINUX下,通过串口来实现对单片机LED灯的控制。
单片机上的串口程序是,当串口输入过来的信号为'y'时,LED0就亮。
用串口助手已经调试过了,程序没有问题
现在面临的一个问题就是,上位机这边,Linux的串口程序实验代码如下,我设置了相关了linux串口参数
包括 文件句柄 波特率 数据位 奇偶校验 停止位,设置一个buf,它的值为'y',并在设置完串口参数后将buf发送给串口。
程序运行也没问题,能够正常结束,但是单片机上的灯就是不亮,这是什么原因?是我初始化串口参数的时候漏了吗?
求详细,可加分
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <fcntl.h>
#define FD_TTY "/dev/tty7"
int main()
{
int fd;
struct termios opt;
char *buf;
//Open Serial Port
if((fd = open(FD_TTY, O_RDWR)) < 0)
{
perror("Open device");
exit(1);
}
printf("Open successful\n");
tcgetattr(fd, &opt);
tcflush(fd, TCIOFLUSH);
cfsetispeed(&opt, B9600);
cfsetispeed(&opt, B9600);
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= CS8;
opt.c_cflag &= ~PARENB;
opt.c_iflag &= ~INPCK;
opt.c_cflag &= ~CSTOPB;
if(tcsetattr(fd, TCSANOW, &opt) < 0)
{
perror("set baudrate");
exit(1);
}
tcflush(fd, TCIOFLUSH);
buf = "y";
if(write(fd, buf, strlen(buf)) < 0)
{
perror("write data\n");
close(fd);
exit(1);
}
printf("Send successful!\n");
close(fd);
return 0;
} 展开
单片机上的串口程序是,当串口输入过来的信号为'y'时,LED0就亮。
用串口助手已经调试过了,程序没有问题
现在面临的一个问题就是,上位机这边,Linux的串口程序实验代码如下,我设置了相关了linux串口参数
包括 文件句柄 波特率 数据位 奇偶校验 停止位,设置一个buf,它的值为'y',并在设置完串口参数后将buf发送给串口。
程序运行也没问题,能够正常结束,但是单片机上的灯就是不亮,这是什么原因?是我初始化串口参数的时候漏了吗?
求详细,可加分
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <fcntl.h>
#define FD_TTY "/dev/tty7"
int main()
{
int fd;
struct termios opt;
char *buf;
//Open Serial Port
if((fd = open(FD_TTY, O_RDWR)) < 0)
{
perror("Open device");
exit(1);
}
printf("Open successful\n");
tcgetattr(fd, &opt);
tcflush(fd, TCIOFLUSH);
cfsetispeed(&opt, B9600);
cfsetispeed(&opt, B9600);
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= CS8;
opt.c_cflag &= ~PARENB;
opt.c_iflag &= ~INPCK;
opt.c_cflag &= ~CSTOPB;
if(tcsetattr(fd, TCSANOW, &opt) < 0)
{
perror("set baudrate");
exit(1);
}
tcflush(fd, TCIOFLUSH);
buf = "y";
if(write(fd, buf, strlen(buf)) < 0)
{
perror("write data\n");
close(fd);
exit(1);
}
printf("Send successful!\n");
close(fd);
return 0;
} 展开
2个回答
展开全部
单片机接收数据正确吗? 接收后可以判断正确吗?
更多追问追答
追问
应该是对的诶。
在WINDOW界面的串口调试助手上,我发送 y 到单片机,就可以亮灯
但是linux这个, 我直接也是定义的一个 char *buf = "y" ,也是对的撒,它就是不亮
追答
那有可能是LINUX 这里的问题,它数据没发出,或单片机没收到。
你可以让LINUX 发送数据,电脑接收看看发送正不正常。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询