用
STM32F103VET6flash存储float变量,读取时只有整数部分。代码如下:往flash写13.12,读出来DATAW[0]显示13.0。
#define FLASH_PAGE_SIZE ((uint32_t)0x00000800) /* FLASH Page Size */
#define FLASH_USER_START_ADDR ((uint32_t)0x0803F800) /* Start @ of user Flash area */
#define FLASH_USER_END_ADDR ((uint32_t)0x0803FFFF) /* End @ of user Flash area */
void Save_factory_parameter()
{
uint32_t Addr = FLASH_USER_START_ADDR , i; //FLASH_USER_START_ADDR的地址留给出厂值设置标志位用的
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
while( FLASH_ErasePage(FLASH_USER_START_ADDR ) != FLASH_COMPLETE );
while( FLASH_ProgramWord( Addr , 13.12 ) != FLASH_COMPLETE ) ;
FLASH_Lock();
}
void Read_factory_parameter()
{
uint32_t Addr = FLASH_USER_START_ADDR ;
DATAW[0] = *(__IO uint32_t *)Addr;
}
while( FLASH_ProgramWord( Addr , 13.12 ) != FLASH_COMPLETE ) ;
最好改为while( FLASH_ProgramWord( Addr , 13.12f ) != FLASH_COMPLETE ) ;
然后 float DATAW[n];定义成float比较好,不知道你是如何定义的
最后用这个读: DATAW[0] = *(__IO uint32_t *)Addr;
谢谢你的回答,数组我也是定义成float型的,如右 float Data1W[2];
9楼的方法可行,我试过了。
非常感谢,你的方法我试了一下,可行!
谢谢,你的答复
一周热门 更多>