实际工程中,经常需要将数据存入到flash中或者通过串口发送。但这些数据往往有一部分是浮点型而非整型,需要进行转换,我们可以借用C语言中的联合体特性进行转换,代码如下: union Transfer
{
/*定义union,方便进行
整型和浮点型的转换*/
float Float_data;//stm32中float占4个字节32位
uint8_t Byte[4]; //4个uint8_t类型元素,占32位
}transunion,*transptr=&transunion;
/*******************************************************************************
* Function Name : Float_To_Int
* Description : 浮点数转化为整形
* Parameters : 浮点数
* Return : 32位整型
* Notice : None
*******************************************************************************/
uint32_t Float_To_Int(float data)
{
uint32_t Flash_uInt=0;
/*将float的数据分别按字节存放在地址内*/
transptr->Byte[0]=((uint8_t *)&data)[0];
transptr->Byte[1]=((uint8_t *)&data)[1];
transptr->Byte[2]=((uint8_t *)&data)[2];
transptr->Byte[3]=((uint8_t *)&data)[3];
Flash_uInt=*(uint32_t*)transptr->Byte;//用uint32_t类型读取该32位地址的数据
return Flash_uInt;
}
/*******************************************************************************
* Function Name : Int_To_Float
* Description : 整形转化为浮点数
* Parameters : 32位整形
* Return : 浮点数
* Notice : None
*******************************************************************************/
float Int_To_Float(uint32_t data)
{
double Flash_flt=0.0;
//分解32位整形为4个8位整形
transptr->Byte[0]=data&0xff;
transptr->Byte[1]=(data>>8)&0xff;
transptr->Byte[2]=(data>>16)&0xff;
transptr->Byte[3]=(data>>24)&0xff;
Flash_flt=transptr->Float_data;//利用float类型读取出该32位地址的数据
return Flash_flt;
}
|