当前位置: 代码迷 >> 驱动开发 >> Linux上的串口通信
  详细解决方案

Linux上的串口通信

热度:26   发布时间:2016-04-28 10:48:04.0
Linux下的串口通信
移植了一个简单的开发板与pC机的串口通信,代码如下
/*发送字符*/
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h>
#define buffer_size 100
volatile fd;
int flag_close;
int open_serial(int k)
{
if(k==0)
{
fd=open("/dev/ttySAC0", O_NOCTTY |O_NONBLOCK);
perror("open /dev/ttySAC0");
}
else
{
fd=open("/dev/ttySAC1",O_RDWR);
perror("open /dec/ttySAC1");
}
if(fd==-1)
return -1;
else
return 0;

}
int main(int argc,char *argv[])
{
char sbuf[]={"hello\n"};
int retv,i;
struct termios opt;
int length=sizeof(sbuf);
open_serial(0);
printf("ready for sending data");
tcgetattr(fd,&opt);
tcflush(fd,TCIOFLUSH);
cfmakeraw(&opt);//设置终端属性
cfsetispeed(&opt,B115200);
cfsetospeed(&opt,B115200);
/*设置8位数据位*/
opt.c_cflag &=~CSIZE;
opt.c_cflag |=CS8;
/*设置奇偶校验*/
opt.c_cflag &=~PARENB;
opt.c_cflag &=~INPCK;
tcsetattr(fd,TCSANOW,&opt);
retv=write(fd,sbuf,length);//将数据写入终端不需要1位1位的写吗?
if(retv==-1)
{
perror("write");

}
printf("the number of char sent is %d\n",retv);
flag_close=close(fd);
if(flag_close==-1)
printf("close the device failur!\n");
return 0;
}
结果运行时显示错误为:open /dev/ttySAC0: No such file or directory
write: Bad file descriptor
ready for sending datathe number of char sent is -1
close the device failur!
初学,有没有人能耐心看一下,指导一下,谢谢!
  61,1 92%



------解决方案--------------------
串口设备存在么?

或者说,串口对应的设备名不对? /dev/ttySAC0
------解决方案--------------------
你确定有/dev/ttySAC0这个设备?
------解决方案--------------------
直接命令行里cat /dev/ttySAC0能否成功
------解决方案--------------------
你确定有/dev/ttySAC0这个设备?一般linux下com口对应的设备文件在/dev下,如果串口驱动安装成功的话,会在/dev下生成一个对应于设备的设备文件,一般设备文件名为/ttyS0 /ttyS1表示第一个 、第二个串口,直接按操作文件的方式操作设备节点就可以与设备通信了。