天嵌 ARM开发社区

 找回密码
 注册
查看: 4062|回复: 14

2440串口接收问题

[复制链接]
fl753914075 发表于 2012-3-21 13:48:40 | 显示全部楼层 |阅读模式
用的TQ2440自带的串口测试程序,收十六进制的数总是有问题当发送的数带有 ABCDEF的时候收到的那一位总是少了0x80,
如a2,那么收到的肯定是22,所以这个问题怎么解决呢,顺便说一下我已经把原来的printf("%d",buff[i]);  改成printf("%x",buff[i])了,请高手指点,不知道怎么解决,我一定要收十六进制的数,然后打印到终端上
embedsky_lhh 发表于 2012-3-21 18:22:45 | 显示全部楼层
把代码贴出来看下,是不是你数据类型定义错了。
 楼主| fl753914075 发表于 2012-3-21 20:15:30 | 显示全部楼层
embedsky_lhh 发表于 2012-3-21 18:22
把代码贴出来看下,是不是你数据类型定义错了。

我用自带的串口测试程序,收十六进制的数据就是不对的,问题就是我上面说的问题,源代码贴给你看,就是开发板的程序,发没问题,收的时候接受十六进制数有上述问题,麻烦你了
void serial_rw()
{
        int i;
        char buff[512];
        char buff2[] = "hello,TQ2440!\n";
        int nread,nwrite;

        nwrite = write(serial_fd,buff2,sizeof(buff2));
        printf("nwrite=%d\n",nwrite);
        while(1)
        {
                if((nread = read(serial_fd,buff,512))>0)
                {
                        buff[nread] = '\0';
#if 0        //调用这段代码可以实现回显,如果配合上面的回显,就会出现回显两次的情况。
                        write(serial_fd,buff,nread);
#endif
                        printf("\nrecv:%d\n",nread);
#if 1
                        for(i=0;i<nread;i++)
                        {
                                printf("%x",buff);
                        }
                        printf("\n");
#else
                        printf("%s",buff);
                        printf("\n");
#endif
                }
        }

        close(serial_fd);
 楼主| fl753914075 发表于 2012-3-22 09:37:39 | 显示全部楼层
有人回答我的问题吗?这个问题这么难么
TQ-lkp 发表于 2012-3-22 12:51:40 | 显示全部楼层
把里面所有的char 改成unsigned char
 楼主| fl753914075 发表于 2012-3-22 15:18:44 | 显示全部楼层
TQ-lkp 发表于 2012-3-22 12:51
把里面所有的char 改成unsigned char

改过了,但是不行啊,我用的底层驱动是友善的,测试程序没改,发的时候没问题,收的时候十六进制就是会丢失最高位的1,也就少了0x80,是因为这个原因吗?
 楼主| fl753914075 发表于 2012-3-24 21:44:59 | 显示全部楼层
TQ-lkp 发表于 2012-3-22 12:51
把里面所有的char 改成unsigned char

我用回TQ2440开发板,还是有这个问题
void serial_rw()
{
        int i;
        char buff[512];
        char buff2[] = "hello,TQ2440!\n";
        int nread,nwrite;

        nwrite = write(serial_fd,buff2,sizeof(buff2));
        printf("nwrite=%d\n",nwrite);
        while(1)
        {
                if((nread = read(serial_fd,buff,512))>0)
                {
                        buff[nread] = '\0';
#if 0        //调用这段代码可以实现回显,如果配合上面的回显,就会出现回显两次的情况。
                        write(serial_fd,buff,nread);
#endif
                        printf("\nrecv:%d\n",nread);
#if 1
                        for(i=0;i<nread;i++)
                        {
                                printf("%x",buff);
                        }
                        printf("\n");
#else
                        printf("%s",buff);
                        printf("\n");
#endif
                }
        }

        close(serial_fd);

}
 楼主| fl753914075 发表于 2012-3-25 18:43:50 | 显示全部楼层
fl753914075 发表于 2012-3-22 15:18
改过了,但是不行啊,我用的底层驱动是友善的,测试程序没改,发的时候没问题,收的时候十六进制就是会丢 ...

void serial_rw()
{
        int i;
        unsigned char buff[512];
        unsigned char buff2[] = "hello,TQ2440!\n";
        int nread,nwrite;

        nwrite = write(serial_fd,buff2,sizeof(buff2));
        printf("nwrite=%d\n",nwrite);
        while(1)
        {
                if((nread = read(serial_fd,buff,512))>0)
                {
                        buff[nread] = '\0';
#if 0        //调用这段代码可以实现回显,如果配合上面的回显,就会出现回显两次的情况。
                        write(serial_fd,buff,nread);
#endif
                        printf("\nrecv:%d\n",nread);
#if 1
                        for(i=0;i<nread;i++)
                        {
                                printf("%x",buff);
                        }
                        printf("\n");
#else
                        printf("%s",buff);
                        printf("\n");
#endif
                }
        }

        close(serial_fd);

}

救我。。。
TQ-lkp 发表于 2012-3-26 09:04:52 | 显示全部楼层
你使用我们提供的驱动来测试
古月镇 发表于 2012-4-24 17:33:57 | 显示全部楼层
求助,usb转串口的测试程序怎么改,利用开发板提供的serial_test应该在哪些地方修改的,求助
 楼主| fl753914075 发表于 2012-4-24 18:24:55 | 显示全部楼层
你是什么问题?
 楼主| fl753914075 发表于 2012-4-24 18:25:41 | 显示全部楼层
古月镇 发表于 2012-4-24 17:33
求助,usb转串口的测试程序怎么改,利用开发板提供的serial_test应该在哪些地方修改的,求助

你是什么问题?
古月镇 发表于 2012-4-24 18:52:53 | 显示全部楼层
我的问题是,我在内核中添加了usb转串口的驱动,但是如何用开发板提供的serial_test测试程序进行测试的,测试程序应该怎么改的,其中通讯协议中启动采样:接收:20h 32h 发送:20h 32h,我应该在哪些地方修改的,求助
古月镇 发表于 2012-4-24 18:53:25 | 显示全部楼层
  1. void serial_rw()
  2. {
  3.         int i;
  4.         char buff[512];
  5.    char buff1[] = {0x20,0x32,0x20,0x32};
  6.    int nread,nwrite;
  7.        
  8.    nwrite= write(serial_fd,buff1,sizeof(buff1));
  9.         printf("nwrite=%d\n",nwrite);


  10. while(1)

  11.         {
  12.                 if((nread = read(serial_fd,buff,512))>0)

  13.                 {

  14.                         buff[nread] = '\0';

  15. #if 0        //调用这段代码可以实现回显,如果配合上面的回显,就会出现回显两次的情况。
  16.                         write(serial_fd,buff,nread);

  17. #endif
  18.                         printf("\nrecv:%d\n",nread);

  19. #if 0
  20.                         for(i=0;i<nread;i++)

  21.                         {

  22.                                 printf("%c",buff[i]);

  23.                         }
  24.                         printf("\n");

  25. #else
  26.                         printf("%s",buff);
  27.                         printf("\n");

  28. #endif
  29.                 }

  30.         }


  31.         close(serial_fd);

  32. }
复制代码
古月镇 发表于 2012-4-24 18:56:15 | 显示全部楼层
这是部分的测试程序的代码,不清楚需要在哪些地方进行修改的才能获取到传感器的数据,我在测试的时候调用,但是能够提取到配置文件的参数,但是就是无法读取到数据,并且无法从测试程序中跳出,只能重启开发板
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-16 07:27 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表