这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 串口只能发送,怎么都调不通串口接受 ,请大牛们帮忙啊

共2条 1/1 1 跳转至

串口只能发送,怎么都调不通串口接受 ,请大牛们帮忙啊

菜鸟
2006-12-17 00:29:32     打赏

/**************ttytest.c*******************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "rs232.h"
main(int argc, char *argv[])
{

int ret,portno,nWritten,nRead;
char buf[256];
portno=0;
while(1)
{
ret=OpenCom(portno,"/dev/ttyS1",115200);
if(ret==-1)
{
perror("The /dev/ttyS1 open error.");
exit(1);
}
nWritten=ComWrt(portno,"abc",3);
printf("\n/dev/ttyS1 has send %d chars!\n",nWritten);
printf("\nRecieving data!***\n");
fflush(stdout);
nRead=ComRd(0,buf,256,3000);
if(nRead>0)
{
printf("*****OK\n");
}
else
printf("Timeout\n");
if((ret=CloseCom(portno)==-1))
{
perror("Close com");
exit(1);
}
printf("\n\n");
}
printf("Exit now.\n");
return;
}

/******************************rs232********************************/

int ComRd(int portNo, char buf[], int maxCnt,int Timeout)
{
int actualRead = 0;
fd_set rfds;
struct timeval tv;
int retval;

if (!ports[portNo].busy)
{
assert(0);
}

/* camp on the port until data appears or 5 seconds have passed */
FD_ZERO(&rfds);
FD_SET(ports[portNo].handle, &rfds);
tv.tv_sec = Timeout/1000;
tv.tv_usec = (Timeout%1000)*1000;
retval = select(16, &rfds, NULL, NULL, &tv);

if (retval)
{
actualRead = read(ports[portNo].handle, buf, maxCnt);
}

rs232.c贴了一部分 我查了retval是0 ,超时 ,我是用串口调试助手发的 会是什么原因呢

疯掉了~~~~




关键词: 串口     只能     发送     怎么     不通     接受     请大     牛们         

菜鸟
2007-01-05 17:51:00     打赏
2楼

建议:

首先:用导线对接PC机串口的收发端,然后利用串口调试程序发数据,检查有没有受到数据,收到的数据对不对,这样保证PC机端的串口是通的;

其次:检查电平转换芯片是否收发的电平转换都是可用的,有时候一个电平转换芯片可能有一路能用而另一路却不能用,这个问题容易被忽略掉,因

为往往我们检查一路能用,就认为这个芯片是没问题的。

再次:建议采用中断方式来接收数据。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]