我尝试通过VCP接收浮点数,并使用Keil IDE将其写入STM32F4发现板的闪存中。 用于写入闪存的函数:
FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data);
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data);
接受无符号整数值作为数据输入,但我设法使用以下代码在闪存中写入有符号整数:
int dataflash1 = -1000;
int gain;
uint32_t Address= 0x08008000;
.......
FLASH_ProgramWord(Address,dataflash1);
.......
gain=*(int*)Address;
但是,我仍然没有设法编写浮动数据。如果我改变" int"与"浮动" (它们都应该是4字节数据,它在keil编译器指南中说过)我得到的数字如1.7345673 e-42。
也许这是一个愚蠢的问题,但如果你能给我一个线索,我真的很感激。
答案 0 :(得分:4)
将数据写为float:
float f = 12.34;
FLASH_ProgramWord(Address, *(uint32_t *)&f);
将读取数据转换为float:
uint32_t u = flash_read(Address);
float f = *(float *)&u;
答案 1 :(得分:1)
我不明白为什么这不起作用:
float dataflash1 = -1000.0f;
float gain;
uint32_t Address= 0x08008000;
.......
FLASH_ProgramWord(Address,dataflash1);
.......
gain=*(float*)Address;
请注意,您需要将dataflash1
和gain
都声明为float。任何给定数字(例如,-1000)作为整数和浮点数的表示通常是完全不同的,因此期望您可以使用其整数表示将数据写入内存然后将其读回来是不合理的。直接到浮点数。您需要先更改位级表示。这里没有关于写入闪存的具体内容:以下代码仅使用RAM中的变量,它们也不起作用:
int dataflash1 = -1000;
float gain;
gain=*(float*)Address;
如果您尝试打印gain
的值,我可以向您保证结果不会是-1000。