STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)

本文介绍了STM32单片机在处理WiFi模块数据传输时遇到的float到u32再到u8,以及u8到u32再到float的转换问题。在传输过程中,为避免精度损失,采用了特定的转换方法。在数据接收时,需要执行逆操作以还原原始float值。通过详细阐述转换原理和移位运算,帮助解决类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)

  最近在做毕业设计,在做wifi数据传输与接收时,涉及到了STM32单片机中的数据转换问题,经过一系列查资料终于解决了这个烦人的问题!!!!
  其中涉及了WiFi的数据传输WiFi的数据接收

1. WiFi的数据传输(float->u32->u8)

  WiFi数据传输时,因为使用的是NRF24L01模块,其官方代码是传输的u8类型的数组,但是我需要传输的是经纬度(float类型),所以要对数据进行转换。
1. float->u32
  如果使用强转,会导致精度严重损失,所以我这里采用union联合体,来降低精度的损失。这样不仅降低了精度的损失,而且也解决了floatu32u32float的问题。原因是他们共用同一地址,而且都是占32位的。

typedef union
{
   
    float a;
    uint32_t b;
}Data;

2. u32->u8(涉及到位操作

  • 左移运算符(<<)
    定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
    设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
    若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2

  • 右移运算符(>>)
    定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
    例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。
    操作数每右移一位,相当于该数除以2

int 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值