把小数存入到FLASH的思路及过程

在STM32微控制器中,可以利用联合体(Union)来实现浮点数到Flash的存储和读取。通过创建包含浮点数和无符号整型的联合体,浮点数转换为整型后写入Flash,读取时再转换回浮点数。这种方法依赖于浮点数在内存中的二进制表示。联合体允许不同类型的成员共享同一块内存,从而实现数据类型的转换。
摘要由CSDN通过智能技术生成

在STM32中,有几种方法可以将小数存储到flash中。一种方法是将小数乘以一个系数,将其放大为整数,然后将其存储。当您需要读取该数据时,再除以相同的系数即可得到原始的小数1。

另一种方法是使用联合体(union)。您可以创建一个联合体,其中包含一个float变量和一个uint32_t变量。然后,您可以将float变量设置为您要存储的值,并使用uint32_t变量将数据写入flash。读取数据时,您可以直接读取uint32_t变量,并使用float变量访问原始的小数值

以下为通过联合体把小数存到flash中的小例子:

union float_to_uint32 {
    float floatValue;
    uint32_t uintValue;
};

void write_float_to_flash(uint32_t address, float value) {
    union float_to_uint32 converter;
    converter.floatValue = value;

    FLASH_Unlock();
    FLASH_ErasePage(address);
    FLASH_ProgramWord(address, converter.uintValue); // 写入到flash
    FLASH_Lock();
}

float read_float_from_flash(uint32_t address) {
    union float_to_uint32 converter;
    converter.uintValue = *(__IO uint32_t*) address; // 从flash中读出
    return converter.floatValue; // 返回转换后的结果
}

为什么使用联合体能达到这样的效果:

        因为联合体(union)是一种特殊的数据类型,它允许在同一块内存中存储不同类型的数据。联合体的大小等于其最大成员的大小。这意味着,联合体中的所有成员都共享相同的内存位置。

如果帮助到您,麻烦点个赞哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值