OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4782|回复: 11

通过串口发送10进制,为什么是乱码?选择16进制模式就可以了?

[复制链接]

17

主题

76

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-14
在线时间
30 小时
发表于 2016-6-15 11:55:02 | 显示全部楼层 |阅读模式
10金钱
串口发送数组,填的是10进制,结果串口助手是乱码,勾上16进制就对了。什么原因呢?应该是10进制的啊。代码如下

void UartASendStr (u8 *pucStr, u8 ulNum)      //′®¿ú2×Ö·û′®
{
u8 i;
        for(i = 0;i<ulNum;i++)
        {
                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);  
                        USART_SendData(USART2,*pucStr++);
        }  
}
void SendTOGprs(void)          //·¢&#203;íμ&#189;DTU
{
u8 data[6];
data[0]=66 ;   //head
data[1]=22;
data[2]=11;
data[3]=56;
data[4]=12;
data[5]=66;   //tail
UartASendStr(data,6);
}


最佳答案

查看完整内容[请看2#楼]

用printf就可以。 你这样是直接发送数值的。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-15 11:55:03 | 显示全部楼层
用printf就可以。
你这样是直接发送数值的。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-15 12:04:30 | 显示全部楼层
不勾16进制,显示的是ANSI码好像
回复

使用道具 举报

17

主题

76

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-14
在线时间
30 小时
 楼主| 发表于 2016-6-15 12:29:47 | 显示全部楼层
憨厚诚实大叔 发表于 2016-6-15 12:04
不勾16进制,显示的是ANSI码好像

嗯,那两个串口助手之间发10.2   14.4 啥的,是发送的?
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-15 12:54:21 | 显示全部楼层
你用的是正点原子推荐的那个串口助手吧,发送和接收都有16进制的选项,打钩后,他是按16进制接收显示和16进制发送。如果不打勾,接收和发送都是字符串。你可以对比下0-9,a-z,A-Z的ANSI编码码表
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-6-15 13:30:59 | 显示全部楼层
1066570234 发表于 2016-6-15 12:29
嗯,那两个串口助手之间发10.2   14.4 啥的,是发送的?

ascii码

10.2
这样写
data[0]='1' ;
data[1]='0';
data[2]='.' ;
data[3]='2';
回复

使用道具 举报

17

主题

76

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-14
在线时间
30 小时
 楼主| 发表于 2016-6-15 13:57:49 | 显示全部楼层
憨厚诚实大叔 发表于 2016-6-15 12:54
你用的是正点原子推荐的那个串口助手吧,发送和接收都有16进制的选项,打钩后,他是按16进制接收显示和16进 ...

那我将数据传给安卓,他接收到的是10进制的吗
回复

使用道具 举报

17

主题

76

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-14
在线时间
30 小时
 楼主| 发表于 2016-6-15 13:58:42 | 显示全部楼层

奥,谢谢。我将传感器数据,比如土壤湿度,带小数点,可以定义个float数组,直接发送吗?
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-6-15 14:17:27 | 显示全部楼层
本帖最后由 止天 于 2016-6-15 14:18 编辑

不知道你接收方是怎么处理的,
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-6-15 14:18:02 | 显示全部楼层
1066570234 发表于 2016-6-15 13:58
奥,谢谢。我将传感器数据,比如土壤湿度,带小数点,可以定义个float数组,直接发送吗?

不知道你接收方是怎么处理的,

如果是发数据的话是保留多少个小数点就扩大几倍,
比如保留两个小数就 *100,接收方再除以100.

如果只是为了显示就发ascii码吧,转化时候麻烦点,
直接找个有printf的例子看看,这个最简单。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-15 14:20:05 | 显示全部楼层
肯定不行啊,串口只能8位一次,float是32位的吧。
你可以把float强制转换成u32,然后分成4次发过去,那把再把4个u8合成u32,再强制转换回来float
回复

使用道具 举报

17

主题

76

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-14
在线时间
30 小时
 楼主| 发表于 2016-6-15 22:24:43 | 显示全部楼层
止天 发表于 2016-6-15 14:17
不知道你接收方是怎么处理的,

我是通过串口助手接收的,单片机采集的十进制温湿度发送,显示的是乱码,选择16进制就是正确的对应的10进制数。这是为什么呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 18:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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