完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ARM平台也是Linux系统,由ARM发送“hello”,宿主机(Linux系统)接收 ARM上程序: linux系统中程序: 其中open_port和set_port分别为: set_port: int set_opt(int fd,int nSpeed,int nBits,charnEvent,int nStop) { //fd:指定的串口,nSpeed:波特率,nBits:字符大小,nEvent:奇偶校验,nStop:停止位 struct termios newtio,oldtio; //保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息 if(tcgetattr(fd,&oldtio)!=0){ perror(“setupserial 1”); return -1; } bzero(&newtio,sizeof(newtio));//清零 //设置字符大小 newtio.c_cflag|=CLOCAL|CREAD;//本地连接和接收使能 newtio.c_cflag&=~CSIZE;//去除数据位位掩码 switch(nBits) { case 7: newtio.c_cflag|=CS7;//7个数据位 break; case 8: newtio.c_cflag|=CS8;//8个数据位 break; } //设置奇偶校验位 switch(nEvent) { case ‘O’://奇数 newtio.c_cflag|=PARENB;//校验位使能 newtio.c_cflag|=PARODD;//使用奇校验 newtio.c_iflag|=(INPCK|ISTRIP);//奇偶校验使能以及除去奇偶校验位 break; case ‘E’://偶数 newtio.c_iflag|=(INPCK|ISTRIP); newtio.c_cflag|=PARENB; newtio.c_cflag&=~PARODD; break; case ‘N’: newtio.c_cflag&=~PARENB; break; } //设置波特率 switch(nSpeed) { case 2400: cfsetispeed(&newtio,B2400);//输入波特率 cfsetospeed(&newtio,B2400);//输出波特率 break; case 4800: cfsetispeed(&newtio,B4800); cfsetospeed(&newtio,B4800); break; case 9600: cfsetispeed(&newtio,B9600); cfsetospeed(&newtio,B9600); break; case 115200: cfsetispeed(&newtio,B115200); cfsetospeed(&newtio,B115200); break; case 460800: cfsetispeed(&newtio,B460800); cfsetospeed(&newtio,B460800); break; default: cfsetispeed(&newtio,B9600); cfsetospeed(&newtio,B9600); break; } //设置停止位 if(nStop==1) newtio.c_cflag&=~CSTOPB;//CSTOPB不设置为2,设置1 else if(nStop==2) newtio.c_cflag|=CSTOPB;、 //设置等待时间和最小接收字符 newtio.c_cc[VTIME]=0;//最小等待时间 newtio.c_cc[VMIN]=0;//最小接收字符 tcflush(fd,TCIFLUSH);//处理接收字符,刷新收到的数据但是不读 //激活新配置 if((tcsetattr(fd,TCSANOW,&newtio))!=0) { perror(“com set error”); return -1; } printf(“set done!n”); return 0; } open_port: int open_port(int fd,int comport) { char *dev[]={“/dev/ttyS0”,”/dev/ttyS1”,”/dev/ttyS2”}; long vdisable; if(comport==1)//串口1 { fd=open(“/dev/ttyS0”,O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd){ perror(“Can’topen serial port”); return -1; } } if(comport==2)//串口2 { fd=open(“/dev/ttyS1”,O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd){ perror(“Can’topen serial port”); return -1; } } if(comport==3)//串口3 { fd=open(“/dev/ttyS2”,O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd){ perror(“Can’topen serial port”); return -1; } } //恢复串口为阻塞状态 if(fcntl(fd,F_SETFL,0)<0) printf(“fcntlfailed!n”); else printf(“fcntl=%dn”,fcntl(fd,F_SETFL,0)); //测试是否为终端设备 if(isatty(STDIN_FILENO)==0) printf(“standardinput is not a terminal devicen”); else printf(“isatty successn”); printf(“fd-open=%dn”,fd); return fd; } 问题是:Linux系统是用虚拟机装的,为ubuntu12.04,arm板为micro2440,由ARM发送的“hellon”用串口助手可以接收到,但是Linux系统运行读串口程序时,提示set down(串口设置的最后一个printf语句)之后就没有下文了,也没有显示也没退出程序,请问这是什么原因造成的?应如何修改? |
|
相关推荐
3个回答
|
|
大家可以随意发言,任何想法都可以,多谢
|
|
|
|
额,学习下,不知道啥意思呢
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Cortex-A55 处理器到底什么来头?创龙教仪一文带您了解
333 浏览 0 评论
RK3568 + OpenCV 会碰撞出什么火花?案例详解:2-1 基于OpenCV的画线实验
371 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之编写程序
551 浏览 0 评论
RK3568国产处理器_教学实验箱_操作教程:1-22 密码学编程实验
301 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之六轴传感器icm20607介绍
477 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 14:48 , Processed in 0.855930 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号