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

发送的是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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版