当前位置: 技术问答>linux和unix
linux 下串口 程序
来源: 互联网 发布时间:2016-03-12
本文导语: /** *@breif main() */ int main(int argc, char **argv) { int fd; int nread; //缓冲区 char buff[512]; char *dev ="/dev/ttyS1"; //打开串口 buff[0]=0x40; buff[1]=0x02; buff[2]=0x02; buff[3]=0xbc; fd = OpenDev(dev); printf("%dn",fd); if (fd>0...
/**
*@breif main()
*/
int main(int argc, char **argv)
{
int fd;
int nread;
//缓冲区
char buff[512];
char *dev ="/dev/ttyS1";
//打开串口
buff[0]=0x40;
buff[1]=0x02;
buff[2]=0x02;
buff[3]=0xbc;
fd = OpenDev(dev);
printf("%dn",fd);
if (fd>0)
{
set_Parity(fd,57600,8,1,'N');
}
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
printf("Open com OK!n");
SendByte(fd,buff,6);
ReadByte(fd,&(buff[0]),9);
printf("%xn",buff[0]);
printf("%xn",buff[1]);
printf("%xn",buff[2]);
printf("%xn",buff[3]);
printf("CLOSECOM NOW!n");
CloseDev(fd);
printf("CLOSECOM OK!n");
exit(0);
}
发现个问题, 这个程序,我发的是 40 02 02 bc, 在后面的打印出来的也是这个值,就不是我想要的效果了
原本的意思是: 我通过串口,连接了设备, 发40 02 02 bc后, 应该返回 f0 06 xx xx xx 的值回来
哪里有问题?? 谢谢 怎么和windows下的不一样呢?
*@breif main()
*/
int main(int argc, char **argv)
{
int fd;
int nread;
//缓冲区
char buff[512];
char *dev ="/dev/ttyS1";
//打开串口
buff[0]=0x40;
buff[1]=0x02;
buff[2]=0x02;
buff[3]=0xbc;
fd = OpenDev(dev);
printf("%dn",fd);
if (fd>0)
{
set_Parity(fd,57600,8,1,'N');
}
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
printf("Open com OK!n");
SendByte(fd,buff,6);
ReadByte(fd,&(buff[0]),9);
printf("%xn",buff[0]);
printf("%xn",buff[1]);
printf("%xn",buff[2]);
printf("%xn",buff[3]);
printf("CLOSECOM NOW!n");
CloseDev(fd);
printf("CLOSECOM OK!n");
exit(0);
}
发现个问题, 这个程序,我发的是 40 02 02 bc, 在后面的打印出来的也是这个值,就不是我想要的效果了
原本的意思是: 我通过串口,连接了设备, 发40 02 02 bc后, 应该返回 f0 06 xx xx xx 的值回来
哪里有问题?? 谢谢 怎么和windows下的不一样呢?
|
send后wait一下再看
|
看不到你的封装函数内容啊.
可能是数据还没有到达,看read有没有返回错误。
也有可能串口设备选项没设置好.先用别的工具设置一下然后再试试程序运行效果,比如minicom、gtkterm、cutecom等都可以
可能是数据还没有到达,看read有没有返回错误。
也有可能串口设备选项没设置好.先用别的工具设置一下然后再试试程序运行效果,比如minicom、gtkterm、cutecom等都可以
|
你没有检查SendByte的返回值,应该先判断SendByte返回值是否大于0再做输出。
你的输出和输入使用的是同一个缓冲区,缓冲区数据始终没变,当然还会打印发出去的东西了
你的输出和输入使用的是同一个缓冲区,缓冲区数据始终没变,当然还会打印发出去的东西了
|
同意6楼的,buff指向同一块内存,
在SendByte后memset一下buff,再ReadByte看有没有数据
在SendByte后memset一下buff,再ReadByte看有没有数据
|
一般串口是有本地回响的