发 帖  
【四旋翼飞行器】76小时吃透四轴算法!史上最强软硬结合实战项目,👉戳此立抢👈
[问答] 请问PC通过串口助手如何给单片机发送小数?
318 串口 单片机
分享
PC通过串口助手如何给单片机发送小数,单片机接收后如何处理?
0
2019-1-11 09:25:07   评论 分享淘帖 邀请回答
9个回答
测试如下:

这个是浮点数的表示形式,123.456按IEEE754的规范,表示成十六进制就是42 F6 E9 79。

然后使用串口程序发送给STM32:

两个注意的地方:
a. 浮点数是近似表示,所以你看STM32解析的是123.456001,而不是精确的123.456,这并不违反IEEE 754标准,尤其是涉及到最后一个bit的四舍五入方法,在IEEE 754 中并没有明确规定。
b. 字节顺序和对齐。你所有的工作只是定义好联合体,然后填充好联合体,STM32会自动替你完成转换。不过需要注意的是,一些上位机采用的是大端对齐的方式, 发送的字节顺序会相反。

2. 字符串方式
如果是字符串或者其他方式发送,那就可以自定义一套转换机制,甚至你的上位机在发送2/5的分数,或者40%这样的字符串,都可以解析为0.4的浮点数,这种方式的灵活度非常高,但是对编程要求更复杂,而且相对而言,比较占用MCU的CPU时间和Flash。
2019-1-11 09:44:39 评论

举报

#include<stdlib.h>    // 使用 atof()函数 需要包含此头文件
#include<stdio.h>
int main()
{
double d;
char str[] = "123.456";
d=atof(str);
printf("string=%s,double=%lf\n",str,d);
return 0;
}
2019-1-11 09:51:27 评论

举报

比如数据buf[]="12.3",则ret = atof(buf).可一获取小数值,或者使用sscanf这个函数来解析也行
2019-1-11 10:01:14 评论

举报

2019-1-11 10:17:32 评论

举报

本帖最后由 wenyangzeng 于 2018-5-15 09:42 编辑

浮点小数是32位,当然要化成4个字节的格式分4次发送
2019-1-11 10:33:02 评论

举报

串口发过来的是字符格式还是二进制格式?解析方式应该不同。
2019-1-11 10:51:00 评论

举报

60user36 发表于 2019-1-11 19:11
测试如下:

这个是浮点数的表示形式,123.456按IEEE754的规范,表示成十六进制就是42 F6 E9 79。

非常感谢,受益匪浅,谢谢!
2019-1-11 11:04:35 评论

举报

guanrui1202 发表于 2019-1-11 20:18
串口发过来的是字符格式还是二进制格式?解析方式应该不同。

您能这两种都给我介绍一下吗?
2019-1-11 11:11:02 评论

举报

就把4个字节发过去就行了啊
2019-1-11 16:31:57 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

提问题
关闭

站长推荐 上一条 /7 下一条

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