Linux下的串口通信

方丈的寺院 软件工程师  2012-06-05 08:39:24
移植了一个简单的开发板与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%

...全文
250 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
方丈的寺院 2012-06-07
串口打开成功的提示为:open /ttySAC0 success.
write: Bad file descriptor
bash :command not found
ready for sending datathe number of char sent is -1[Quote=引用 6 楼 的回复:]

直接命令行里cat /dev/ttySAC0能否成功
[/Quote]
回复
方丈的寺院 2012-06-07
串口打开成功的open /ttySAC0 success.
write: Bad file descriptor
bash :command not found
ready for sending datathe number of char sent is -1


[Quote=引用 7 楼 的回复:]

你确定有/dev/ttySAC0这个设备?一般linux下com口对应的设备文件在/dev下,如果串口驱动安装成功的话,会在/dev下生成一个对应于设备的设备文件,一般设备文件名为/ttyS0 /ttyS1表示第一个 、第二个串口,直接按操作文件的方式操作设备节点就可以与设备通信了。
[/Quote]
回复
藏羚羊 2012-06-07
你确定有/dev/ttySAC0这个设备?一般linux下com口对应的设备文件在/dev下,如果串口驱动安装成功的话,会在/dev下生成一个对应于设备的设备文件,一般设备文件名为/ttyS0 /ttyS1表示第一个 、第二个串口,直接按操作文件的方式操作设备节点就可以与设备通信了。
回复
falloutmx 2012-06-07
直接命令行里cat /dev/ttySAC0能否成功
回复
方丈的寺院 2012-06-07

[Quote=引用 3 楼 的回复:]

你确定有/dev/ttySAC0这个设备?
[/Quote]
回复
方丈的寺院 2012-06-07
我在终端下查看了,存在[Quote=引用 2 楼 的回复:]

串口设备存在么?

或者说,串口对应的设备名不对? /dev/ttySAC0
[/Quote]
回复
falloutmx 2012-06-06
你确定有/dev/ttySAC0这个设备?
回复
曹大夯 2012-06-05
串口设备存在么?

或者说,串口对应的设备名不对? /dev/ttySAC0
回复
相关推荐
发帖
驱动开发/核心开发
创建于2007-09-28

2.1w+

社区成员

硬件/嵌入开发 驱动开发/核心开发
申请成为版主
帖子事件
创建了帖子
2012-06-05 08:39
社区公告
暂无公告