在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)是一种特殊的数据类型,它允许在同一块内存中存储不同类型的数据。联合体的大小等于其最大成员的大小。这意味着,联合体中的所有成员都共享相同的内存位置。
如果帮助到您,麻烦点个赞哦~