stm32 浮点数据怎么储存
或者Q格式化的数据
一般是前者
昨天遇到类似的问题,因STM32F103CX不支持浮点运算。后来根据大概的意思我尝试了一下,验证是可以的。举例如下:
比如将浮点数 float A=26.5,B=24.2;存储到STM32F103C8之flash指定地址0x0800F000,数据为Data然后再取出的方法。
首先将A、B都乘以10,变成整数:并分别存储到flash的高16位和低16位:
void WriteFlashData(void)
{
Data = A *10*65535 + B*10;
HAL_FLASH_Unlock();
FLASH_EraseInitTypeDef f;
f.TypeErase = FLASH_TYPEERASE_PAGES;
f.PageAddress = 0x0800F000;
f.NbPages = 1;
uint32_t PageError = 0;
HAL_FLASHEx_Erase(&f, &PageError);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x0800F000, Data);
HAL_FLASH_Lock();
}
2.读取则先读取Data,再强制转换为浮点数,最后再/10
void ReadFlash_Data(void)
{
Data = *(__IO uint32_t*)(FlashAddr_0x800F000);
A= ((float)(Data / 65535))/10;
B= ((float)Data )/10;
}
说明:flash的操作用的是STM32CUBE MX 的HAl库函数,本例子中擦除时会将0x800F000~0x800F00C共4个32位的数据同时擦除。更多用法请参考相关手册。