STM32中,利用联合体进行浮点型数据与整形数据的互相转换

 实际工程中,经常需要将数据存入到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;
    }
  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值