4719|13

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

苦恼的问题! [复制链接]

最近编一个串口通信的程序,运行程序后在minicom中没有显示任何的传输数据迹象。程序的功能是当向下位机发送一个字符“0x0d”后,下位机自动回复,当缓存区再次接收到“0x0d”后在终端显示,哪位师兄师姐能指点我这个小师弟一下。串口参数是:比特率19200,数据位8,奇偶校验位无,无数据流,停止位1.程序如下:
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_TTYS "/dev/ttyS0"
void init_ttyS(int fd)
{
    struct termios options;
    bzero(&options,sizeof(options));
    cfsetispeed(&options,B19200);
    cfsetospeed(&options,B19200);
    options.c_cflag |=(-CRTSCTS|CS8|CLOCAL|CREAD);
    options.c_iflag=IGNPAR;
    tcflush(fd,TCIFLUSH);
    tcsetattr(fd,TCSANOW,&options);
}
void Link_test(void)
{
    int fd;
    int a=0;
    int nread;
    char c=13;
    char buff1[1];
    buff1[0]=c;
    char buff[512];
    write(fd,buff1,1);
    do{nread=read(fd,buff,512);}
    while(buff[nread+1]!=c);
    printf("\n%s",buff);
}
int main(void)
{
    int fd;
    fd=open(DEVICE_TTYS,O_RDWR);
    if(fd==-1)
     {
       printf("open device %s error\n",DEVICE_TTYS);
     }
    else
     {
       init_ttyS(fd);
       Link_test();
                                                                                
     }

最新回复

fd定义成全局变量  详情 回复 发表于 2009-2-7 09:41
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶!
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你用的是什么芯片
我以前用186的时候用的是COM0,
使用的是查询方式,但是在使用的时候一定要关COM的中断不然发送或接收就会触发死掉

最好看看你使用的串口中间件搞清楚了再用
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
用的是s3c2410,串口中间件是什么?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
你是在Linux下开发吧?

现在碰到什么问题?估计是无法看到0x0d显示吧。

那就要判断无法发送?无法接收?接收了无法显示?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
恩,是在linux下开发,出现的问题也是这些,高手指点一下吧
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

7
 
write(fd,buff1,1);
do{nread=read(fd,buff,512);}

这里面的fd哪里来的?main当中的fd是main的局部变量,在test中可没法用的。要么传递指针,要么定义成全局变量。
这样编译器都不报错?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
Link_test里的第一行定义了啊
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
知道定义了,但已经不是main里面那个fd=open(DEVICE_TTYS,O_RDWR); 了。

fd在Link_test里面只是个普通的局部变量,你这样读写无法实际映射到串口里去。

如果有时间,建议先去翻看一下C语言的变量作用域(生存范围),以及函数的参数传递。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
友情up
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

11
 
友情up
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 8 楼 shuiyan 的回复:
知道定义了,但已经不是main里面那个fd=open(DEVICE_TTYS,O_RDWR); 了。

fd在Link_test里面只是个普通的局部变量,你这样读写无法实际映射到串口里去。

如果有时间,建议先去翻看一下C语言的变量作用域(生存范围),以及函数的参数传递。

顶!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
就是没有fd
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 
fd定义成全局变量
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表