天嵌 ARM开发社区

 找回密码
 注册
查看: 2687|回复: 5

如何向UART发送一组十六进制的数据包?

[复制链接]
Real_me゛ 发表于 2013-11-20 22:45:33 | 显示全部楼层 |阅读模式
例如:
  1. void serial_rw()
  2. {       
  3.         int j, nwrite;
  4.         int i = 3;
  5. //        char reply[128];
  6.        
  7.         unsigned char VfyPwd[]="0xEF010XFFFFFFFF0x010x070x130xFF0xFF0xFF0xFF0X0417";

  8.        
  9.         while (i)
  10.         {
  11.                         nwrite = write(serial_fd,VfyPwd,strlen(VfyPwd));         //发送握手命令
  12.                         printf("\nsend = %d, %s\n\n",nwrite,VfyPwd);       

  13.                 printf("\n\nsend over!\n");
  14.                 check_ok();

  15.                 printf("\n");
  16.                 printf ("VfyPwd out\n");
  17.                 i--;       
  18.         }

  19.         close(serial_fd);
  20. }
复制代码


其中unsigned char VfyPwd[]="0xEF010XFFFFFFFF0x010x070x130xFF0xFF0xFF0xFF0X0417";中的每一个0x--表示一个16进制数,整体是一个数据包,这样直接发送不行啊,请问这该怎么办?各位大侠们!
TQ-ZQL 发表于 2013-11-21 09:13:32 | 显示全部楼层
自己程序解释VfyPwd,重新组包或者分多次发都可以吧。
 楼主| Real_me゛ 发表于 2013-11-21 10:23:32 | 显示全部楼层
TQ-ZQL 发表于 2013-11-21 09:13
自己程序解释VfyPwd,重新组包或者分多次发都可以吧。

可以试试,但是这里面都是写字符啊,人家串口需要的是16进制的数据,我觉得应该写一个将字符串转化为16进制的函数,每次取一个字符,转化完成后直接用write函数送去串口。
 楼主| Real_me゛ 发表于 2013-11-21 21:00:02 | 显示全部楼层
怎么都没人理我,都头疼了一天了,试了我所有能想到的办法。
TQ-lkp 发表于 2013-11-22 08:50:06 | 显示全部楼层
16进制不是这么发的啊
unsigned char VfyPwd[]="0xEF010XFFFFFFFF0x010x070x130xFF0xFF0xFF0xFF0X0417";
上面的定义发的就是字符串,你的0xEF01这就是六个字符,根本不是16进制!
unsigned char VfyPwd[]={0xEF,0x01,0xFF0xFF,0xFF};
这个才是16进制的数据,明白?
 楼主| Real_me゛ 发表于 2013-11-29 14:34:29 | 显示全部楼层
TQ-lkp 发表于 2013-11-22 08:50
16进制不是这么发的啊
unsigned char VfyPwd[]="0xEF010XFFFFFFFF0x010x070x130xFF0xFF0xFF0xFF0 ...

我明白了,但是程序现在这样写,
  1. void serial_rw()
  2. {       
  3.         int j,nwrite,nread;
  4.         int i = 3;
  5.         int Vfypwd[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x07,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};
  6.         int buffer[64]={0};

  7.         while (i--)
  8.         {
  9.                 for(j=0;j<16;j++)
  10.                 {
  11.                         write(serial_fd,Vfypwd[j],1);       
  12.                 }
  13.                 printf("\nsend %x\n\n",Vfypwd);       
  14.                 nread = read(serial_fd,buffer,64);
  15.                 printf("\n%d recv,is %x\n",nread,buffer);
  16.                 sleep (3);        
  17.                
  18.                
  19.         }
  20.         close(serial_fd);
  21. }
复制代码


用十六进制%x输出,为什么是这些:
[root@EmbedSky zhiwen]# ./uart1_zhiwen
readserailcfg
serialread.dev is /dev/tq2440_serial2
serialread.speed is 9600
serialread.databits is 8
serialread.stopbits is 1
serialread.parity is N
Vfypwd out!

send beef3ae0


0 recv,is beef39e0
Vfypwd out!

send beef3ae0


0 recv,is beef39e0
Vfypwd out!

send beef3ae0


0 recv,is beef39e0

虽然现在还是0 Recv我想先把十六进制包给发出去。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-5-28 00:56 , Processed in 1.031256 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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