0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32如何收发float类型数据?

麦克泰技术 来源: 嵌入式大杂烩 作者: 嵌入式大杂烩 2024-01-05 11:14 次阅读

在之前文章里提到了共用体用来传输浮点数的用法,但那篇笔记中没有详细介绍,这篇笔记我们一起来看一看具体实例。

实际应用中,我们可能需要两个设备通过串口传输浮点数据:

71de583a-ab77-11ee-8b88-92fbcf53809c.png

本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下:

71f1efda-ab77-11ee-8b88-92fbcf53809c.png

我们创建一个用于管理float类型数据的共用体:

unionfloat_data
{
floatf_data;
uint8_tbyte[4];
};

数据的流向如:

7212186e-ab77-11ee-8b88-92fbcf53809c.png

本次使用串口助手模拟发送设备,省略了第一步,主要看第②、③步。

创建两个共用体变量,用于发送与接收:

unionfloat_datarx_float_data,tx_float_data;

收发相关代码:

左右滑动查看全部代码>>>

//公众号:嵌入式大杂烩
if(HAL_UART_Receive(&huart3,rx_float_data.byte,4,1000)==HAL_OK)
{
printf("rx_float_data.byte[0]=%.2x(addr:%#x)
",rx_float_data.byte[0],&rx_float_data.byte[0]);
printf("rx_float_data.byte[1]=%.2x(addr:%#x)
",rx_float_data.byte[1],&rx_float_data.byte[1]);
printf("rx_float_data.byte[2]=%.2x(addr:%#x)
",rx_float_data.byte[2],&rx_float_data.byte[2]);
printf("rx_float_data.byte[3]=%.2x(addr:%#x)
",rx_float_data.byte[3],&rx_float_data.byte[3]);
printf("rx_float_data.f_data=%f(addr:%#x)
",(float)rx_float_data.f_data,&rx_float_data.f_data);
tx_float_data.f_data=rx_float_data.f_data+1.0f;
printf("tx_float_data.f_data=%f
",tx_float_data.f_data);
HAL_UART_Transmit(&huart3,tx_float_data.byte,4,1000);
}

代码很简单,UART3接收到串口助手发送的float类型对应的16进制数据存于rx_float_data.byte中,并打印输出rx_float_data.byte的各个字节,此时rx_float_data.f_data就是我们接收的浮点数据,接收到的数据加上1.0后赋予tx_float_data.f_data再通过UART3把tx_float_data.byte发送出去。

运行结果:

7224de90-ab77-11ee-8b88-92fbcf53809c.png

这里以传输数据1.28为例,1.28对应的十六进制数据是什么呢?

我们可以通过一些在线网站查看,比如

723bdadc-ab77-11ee-8b88-92fbcf53809c.png

1.28对应的十六进制为:3FA3D70A。因为STM32是小端模式,所以使用串口助手发送时需要进行一个逆序,即发送0AD7A33F。从实验结果可以看到:

72465638-ab77-11ee-8b88-92fbcf53809c.png

STM32收到1.28之后,加上1.0之后通过UART3发回上位机,2.28对应4011EB85:

72595968-ab77-11ee-8b88-92fbcf53809c.png

这里我们使用串口助手来模拟一个设备,所以需要查一下我们要发送的float数据对应的十六进制数据。实际两个设备之间做传输是不需要这么做的,想发什么就传什么就可以:

726e51ba-ab77-11ee-8b88-92fbcf53809c.png

以上就是本次的分享,如有错误,欢迎指出,谢谢!本篇笔记对应的工程是在小熊派STM32开发板上做验证的,可在后台回复关键字:收发float数据实验,即可获取。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6514

    浏览量

    87611
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348868
  • 串口
    +关注

    关注

    14

    文章

    1485

    浏览量

    74526
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66820
  • float
    +关注

    关注

    0

    文章

    8

    浏览量

    7712

原文标题:STM32如何收发float类型数据?

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    浮点型float数据类型在内存中的表示方法

    嵌入式系统的串口数据传输都是以字节为单位,但是有些特殊的数据类型,比如浮点型float a=231.5,在内存是如何表示的呢?
    发表于 10-17 14:19 1148次阅读

    float类型数据是否合理判断

    float类型数据是否合理判断_chkfloat_单片机内嵌函数是怎么实现的?也就是怎么判断一个float数据是否合理的方法?出错可能是正溢
    发表于 07-22 16:17

    单片机串口如何发生float数据

    如题,char的数据或是数组我会发,可是float类型的怎么发呢,串口一次只能发8位的数据,像int或float这种超过8位的不知道怎么办好
    发表于 05-24 09:10

    关于一个float类型数据在keil c中保留几位小数点

    想请教一下各位大神,一个float类型数据在keil c中保留几位小数点?只想要前四位小数,如何去除我不想要的小数呢?
    发表于 05-05 21:35

    STVD COMSIC编译器无法调试double/float数据类型

    大家好, 我在使用COSMIC C编译器在STVD中使用double或float数据类型时遇到了一些问题。 我能够声明这些数据类型但是当我开始调试并想要观察变量时,STVD显示了奇怪的值。例如
    发表于 01-04 15:48

    请问STM32如何收发float类型数据

    请问STM32如何收发float类型数据
    发表于 12-13 07:00

    如何将float数据存到flash中

    项目场景:在灵动MCU平台基于逐飞科技开源的RTT库,将一个float类型数据变量保存到flash中;问题描述:写和读flash数据的接口是uint32
    发表于 12-13 06:54

    如何用串口传输float类型数据

    单片机小知识如何使用串口传输float类型数据比较难的就是数据进制的转化模拟量比如说 角度 距离速度 这些是10进制,串口通信用的是16进制 ,
    发表于 01-19 06:12

    C语言怎么输入float的变量,c语言float怎么用

    C语言中float是什么意思我是出自学者,有很多不会的,float是什么东东,什么意思啊,还有在程序float是C语言的基本数据类型中的一种,表示单精度浮点数。 C语言规定单精度浮点型
    发表于 03-29 10:36

    如何把float类型的变量发送到串口调试助手?

    有位小伙伴问,怎么把float类型的变量发送到串口调试助手?在这里给大家统一说一下。 什么时候用float类型的变量? 单片机计算数据,当用
    发表于 06-15 07:24

    如何在STM32收发float数据

    实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: uni
    的头像 发表于 04-02 17:03 3146次阅读
    如何在<b class='flag-5'>STM32</b>中<b class='flag-5'>收发</b><b class='flag-5'>float</b><b class='flag-5'>数据</b>?

    教你们STM32如何收发float类型数据

    实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: uni
    的头像 发表于 04-09 16:49 3432次阅读
    教你们<b class='flag-5'>STM32</b>如何<b class='flag-5'>收发</b><b class='flag-5'>float</b><b class='flag-5'>类型</b><b class='flag-5'>数据</b>

    51单片机和stm32单片机数据类型占的字节大小

    51单片机(8位):char 1int 2long 4float 4double 8指针类型所占字节和地址总线宽度有关系,8位机器的话就是1个字节stm32单片机(32位):char 1short
    发表于 11-18 20:06 19次下载
    51单片机和<b class='flag-5'>stm32</b>单片机<b class='flag-5'>数据类型</b>占的字节大小

    数据类型的取值范围和单片机的关系

    数据类型的大小和单片机的关系8种基本数据类型4种整形:byte,short),int,long2种浮点类型float,double1种Unicode编码的字符单元的字符型:char1
    发表于 01-13 13:30 3次下载
    <b class='flag-5'>数据类型</b>的取值范围和单片机的关系

    什么是数据类型转换

    常用的3种数据类型:1、Python数据类型第一种:字符串(str)。 2、Python数据类型第二种:整数(int)。 3、Python数据类型第三种:浮点数(
    的头像 发表于 02-23 15:21 583次阅读