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联合体
,来降低精度的损失。这样不仅降低了精度的损失,而且也解决了float
转u32
和u32
转float
的问题。原因是他们共用同一地址,而且都是占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