myfocus-2048857 发表于 2016-12-21 18:22:55

发送的是int数据,为何显示的是ASCII字符 ?

本帖最后由 myfocus-2048857 于 2016-12-21 18:37 编辑

发送的是int数据,为何显示的是ASCII字符 ?

见图一,RS485主机端发送的是unsigned int型数据(0,1,2,3,4,5...);
见图二,丛机端接收后,通过printf打印到PC串口工具(见图三),显示的是ASCII字符。

请问:
1. 我发送的是unsigned int型数据,为什么在串口工具显示的是ASCII ?
2. 我想要 在 串口工具端也显示unsigned int型数据,该如何实现 ?

说明:
丛机接收端 RS485接收和printf用的是一个USART。

谢谢 !

附图一


附图二


附图三




技术范儿 发表于 2016-12-21 19:34:39

本帖最后由 技术范儿 于 2016-12-21 19:36 编辑

LZ注意数据类型呀,你上面虽然定义了了unsigned int 没错是四个字节,但是串口出去的一个字节uint8_t,所以发送过程中舍去三个字节,如果想用串口传输小数或者整数甚至有符号数,建议LZ用memcpy函数处理一下,当然接收端也要根据端序做相应拼包

技术范儿 发表于 2016-12-21 19:43:26

本帖最后由 技术范儿 于 2016-12-22 09:32 编辑

RS485发送完成转换到接收状态20ms刚刚好,再长或者在短都会有问题。
void UintToChar(uint inPut,char *outPut)//注意端序
{

      char *p = (char *)&inPut;
      outPut = p;
      outPut = p;
      outPut = p;
      outPut = p;
}

void UintToChar(uint inPut,char *outPut)//注意端序
{

      memcpy(outPut,(char *)&inPut,4);
}

shuolang126 发表于 2016-12-22 07:30:39

在接收现实工具上勾选十六进制显示!

xhzheng 发表于 2016-12-22 08:21:18

在显示部分,选择2进制,或者16等显示方式看看;

5265325 发表于 2016-12-22 08:48:06

串口发送最低8位

斜阳__ 发表于 2016-12-22 08:59:06

同意1楼,高位被舍弃了

技术范儿 发表于 2016-12-22 09:32:10

5265325 发表于 2016-12-22 08:48
串口发送最低8位

这个到底是那个,看大小端决定的,但是肯定是丢了三个字节,自己做个内存测试一下

jackten 发表于 2016-12-22 10:07:50

:):):):)                              

myfocus-2048857 发表于 2016-12-22 17:28:10

谢谢各位,学习了
页: [1]
查看完整版本: 发送的是int数据,为何显示的是ASCII字符 ?