你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
myfocus-2048857 提问时间:2016-12-21 18:22 /
本帖最后由 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。

谢谢 !

附图一
无标题.png

附图二
无标题1.png

附图三 无标题3.png




收藏 2 评论9 发布时间:2016-12-21 18:22

举报

9个回答
技术范儿 回答时间:2016-12-21 19:34:39
本帖最后由 技术范儿 于 2016-12-21 19:36 编辑

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

技术范儿 回答时间:2016-12-21 19:43:26
本帖最后由 技术范儿 于 2016-12-22 09:32 编辑

RS485发送完成转换到接收状态20ms刚刚好,再长或者在短都会有问题。

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

  3.       char *p = (char *)&inPut;
  4.       outPut[0] = p[0];
  5.       outPut[0] = p[0];
  6.       outPut[0] = p[0];
  7.       outPut[0] = p[0];
  8. }

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

  11.       memcpy(outPut,(char *)&inPut,4);
  12. }
复制代码
shuolang126 回答时间:2016-12-22 07:30:39
在接收现实工具上勾选十六进制显示!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

xhzheng 回答时间:2016-12-22 08:21:18
在显示部分,选择2进制,或者16等显示方式看看;

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

5265325 回答时间:2016-12-22 08:48:06
串口发送最低8位

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

斜阳 回答时间: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
谢谢各位,学习了

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版