开发者社区> 问答> 正文

串口通信,如果read函数返回值是-1,可能是因为?

1、用open函数打开串口时候返回值不是-1.可见正常打开了
2、让ARM(上位)与8051(下位)通信,协议是9600,8N1(经常搞通信的都懂的)
3、51单片机大概每秒就向ARM发送一个byte,8位。
4、结果qtopia的terminal上一直打印“Read Error”
5、关掉terminal,打开qtipia自带的串口助手,竟然也接收不到信号!
6、把8051电源关掉,让通信不可能存在,ARM上READ得到返回值也不是0,依然是-1!

下面添加主函数代码。不久将放程序清单。

int main(void)
 {
 int fd;
 int nread;
 char buff[2];
 char *dev ="/dev/ttySAC0"; 
 fd = OpenDev(dev); 
 if (fd>0)
 set_speed(fd,9600); //打开后设置波特率9600
 else
 { 
 printf("Can't Open Serial Port!\n");
 exit(0);
 }
 if (set_Parity(fd,8,1,'N')== FALSE) //设置8,1,n 注意,这里和上面要和下位机相符才可能通信
{
printf("Set Parity Error\n");
 exit(1);
 }
 fcntl(fd,F_SETFL,FNDELAY);//UNBLOCK 
 while(1)
 {
 if(read(fd,buff,1) while((nread = read(fd,buff,1))>0)
 {
 printf("\nLen %d\n",nread);
 buff[nread+1]='\0';
 printf(" Ken %s",buff);
 tcflush(fd, TCIOFLUSH);//读完再度清洗
}
 }

展开
收起
杨冬芳 2016-07-08 16:46:36 5934 0
1 条回答
写回答
取消 提交回答
  • IT从业

    看看/dev/ttySAC0的设备权限?

    2019-07-17 19:53:40
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载