读写flash,将float类型的数据存放在flash中,
使用的是联合体操作
union var
{
float zero_angle;
uint32_t s;
};
#define FMC_WRITE_START_ADDR ((uint32_t)0x08004000U)
void write_page(uint32_t data)
{
fmc_unlock();
fmc_page_erase(FMC_WRITE_START_ADDR);
fmc_word_program(FMC_WRITE_START_ADDR,data);
fmc_lock();
}
//获取float类型的数据
flo_flash.zero_angle = AS5600_ReadAngle(0x0c,0x0d);
//将数据写入flash
write_page(flo_flash.s);
//读取数据
flo_flash.s = (*(volatile uint32_t *)(uint32_t)(FMC_WRITE_START_ADDR));
以上操作,在没有进行下一步的时候都没问题。
使用printf函数重定向 打印浮点型数据就会将flash的数据给影响到,
里面的数据就会变成一个不确定的数值,且非常小。
printf("%f\n",a);
但是printf 其他类型的数据,就不会受到影响。
|