2

我正在尝试通过 VCP 接收浮点数,并使用 Keil IDE 将其写入 STM32F4 发现板的闪存中。用于写入 Flash 存储器的函数:

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”更改为“float”(它们都应该是 4 字节数据,在 keil 编译器指南中有说明),我会得到类似 1.7345673 e-42 的数字。

也许这是一个愚蠢的问题,但如果你能给我一个线索,我真的很感激。

4

2 回答 2

5

将数据写入浮点数:

float f = 12.34;
FLASH_ProgramWord(Address, *(uint32_t *)&f);

将读取数据转换为浮点数:

uint32_t u = flash_read(Address);
float f = *(float *)&u;
于 2015-09-26T16:58:16.393 回答
1

我不明白为什么这不起作用:

float dataflash1 = -1000.0f;
float gain;
uint32_t Address= 0x08008000;
.......
FLASH_ProgramWord(Address,dataflash1);
.......
gain=*(float*)Address;

请注意,您需要将dataflash1和都声明gain为浮点数。任何给定数字(例如,-1000)作为整数和浮点数的表示通常是完全不同的,因此期望您可以使用其整数表示将数据写入内存然后将其读回是不合理的直接转为浮点数。您需要先更改位级表示。这里没有关于写入闪存的具体内容:以下代码,仅使用 RAM 中的变量,也不起作用:

int dataflash1 = -1000;
float gain;
gain=*(float*)Address;

如果您尝试打印 的值gain,我可以向您保证结果不会是 -1000。

于 2014-07-11T02:58:01.760 回答