导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→ARM的一个串口通信的奇怪的问题:([blueskyxing]

 *第24140篇: ARM的一个串口通信的奇怪的问题:(

  
楼 主:blueskyxing 2004年7月27日11:06
 ARM的一个串口通信的奇怪的问题:(
我再一个arm9的板子上,编写的应用层串口收发测试程序。就是target(arm开发板)和host(开发主机)进行简单的串口收发数据,发现,再host发target收的时候,收不到任何东西。但再target发host收的时候(一次发送一个字节,循环1024次),第一次收字节总数少一(ex:target发1024个字节,host第一次只收到1023个),后来就是每次都多收到一个。费解啊~~~~!气死我了。如果发字符串的话(使用buffer),第一次,host能正常显示,以后就显示不到了。晕啊。大侠们救我~~~~~~~!!

难道是结束符‘\0’搞得鬼????

  
2楼:dali_ly 2004年7月27日12:13
 能否将你的大概的程序写出来看一个,还有请
能否将你的大概的程序写出来看一个,还有请将发送线和接收线短接,在target上做自发自收的测试。
  
3楼:blueskyxing 2004年7月27日20:56
 大侠,我得qq——405505216,能
大侠,我得qq——405505216,能不能加我?
  
4楼:blueskyxing 2004年7月27日20:50
 int main(int argc, c
int main(int argc, char **argv)
{
 int fd;
 int nread;
 int nwrite;
 int i;
 char buff[16];
 char *dev ="/dev/ttyS1";
 fd = OpenDev(dev);
 if (fd>  0)
    set_speed(fd,19200);
 else
  {
  printf("Can't Open Serial Port!\n");
  exit(0);
  }
  if (set_Parity(fd,8,1,'N')== 0)
  {
    printf("Set Parity Error\n");
    exit(1);
  }
  for (i=10;i>  0;i--)
   {
  printf("\nCome into read loop~~!");
     if(nread = read(fd,buff,16)>  0)
     {
        printf("\nLen %d\n",nread);
        buff[nread+1]='\0';
        printf("\n%s",buff);
  }
  else
  printf("\nRead error~~!:(");
  break;
 
   }
/*    for(i=1023;i>  0;i--)
 {
  while(nwrite = write(fd,"7",1)  <0)
  {
  printf("\nwrite failed~~~!!!\n");
  }
  printf("%d",nwrite);
 }
  write(fd,"7\0",1);*/
   close(fd);
   exit(0);
}
我只贴出main函数,别的就只是配置串口数据位、奇偶校验位、和停止位,以及波特率的函数
  
5楼:dali_ly 2004年7月28日13:35
 对于发送,会不会是for语句写错了, f
对于发送,会不会是for语句写错了, for(i=1023;i>  0;i--)只是循环1023次。
  
6楼:blueskyxing 2004年7月28日20:18
 我以前是直接循环1024次,有错。以为是
我以前是直接循环1024次,有错。以为是结束符搞得鬼。后来改成这个样子
循环体外,还有一条语句的。另外加了一个‘\0’符号,结果还是不对。

昨天,我又做了试验,nnd,我一个字节一个字节的发,结果,是对的。:)
不过,收还是不对啊,郁闷,就是运行,接收程序,target就没有反应了,好像死循环一样,必须要ctrl+z才能退出。
还有一个有趣的现象,就是接收程序用ctrl+z退出后,发送的程序就一点错都没了。就是那种直接循环1024次的发送也没问题了呵呵

  
7楼:dali_ly 2004年7月29日09:45
 你的程序应当没有问题,不知你用的是什么操
你的程序应当没有问题,不知你用的是什么操作系统。还有read()和write()函数应当是阻塞的,你注意了吗?

如果说程序没有问题,或是所使用的操作系统也是比较成熟的,则问题应当出在串口线阿这些比较简单的问题上,这种希奇古怪的问题查出来的结果往往很简单。千万别泄气,你一定能找到问题。

顺便说一下,你能否将taget上的串口接收和发送线短接,在DB9的头上就是将2和3短接起来,然后先发送一个字节,发送完一个字节后接收一个字节,如接收和发送硬件正常,则应当能收到前面所发送出去的字节。如收不到,请仔细的检查硬件。当然这一测试也可产在host进行,现在网上有很多的串口调试程序,如串口精灵等等。用这些工具能很方便的进行host侧的测试。Good luck!


>>>>>>对该主题发表你的看法

本主题贴数7,分页: [第1页]


[上一篇主题]:请教关于C51和18B20实现的多点测温中的问题

[下一篇主题]:请教用TL494控制的DC/DC的一点问题