本帖最后由 守候ocean 于 2017-2-28 10:52 编辑
芯片是M058LBN,Data Flash从0x0001_F000 到0x0001_FFFF共4KB,擦除单位为512字节
/*---------------------------------------------------------------------------------------------------------*/
/* Function: LOAD_DATA */
/* */
/* Parameters: */
/* None. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Load the water data. */
/*---------------------------------------------------------------------------------------------------------*/
void LOAD_DATA(void)
{
uint32_t i;
/* Unlock protected registers */
SYS_UnlockReg();
/* Enable_ISP */
_FMC_ENABLE_ISP();
/* Load the water data */
for(i=0;i<24;i++) //24块表
{
uint32_t x,y,z,j;
x=~(FMC_Read(FMC_EEPROM_BASE + (i/3)*FMC_FLASH_PAGE_SIZE + 0x1F8)); // FMC_EEPROM_BASE:0x0001F000
if(x==0xFFFFFFFF)
{
x=32;
}
else
{
x++;
j=0;
while(x)
{
x=x/2;
j++;
}
x=j-1;
}
y=~(FMC_Read(FMC_EEPROM_BASE + (i/3)*FMC_FLASH_PAGE_SIZE + 0x1FC));
if(y>=0x000001FF)
{
y=9;
}
else
{
y++;
j=0;
while(y)
{
y=y/2;
j++;
}
y=j-1;
}
SAVE_NUMB[i/3]=x+y; //uint8_t SAVE_NUMB[8] 存储用的,FLASH是512个字节页擦除,数据存储空间为4K,所以就是8个区域
z=FMC_Read(FMC_EEPROM_BASE + (i/3)*FMC_FLASH_PAGE_SIZE + SAVE_NUMB[i/3]*12 + (i%3)*4);
WATER=z%0x1000000; //水表数WATER是uint32_t的数组
WATER_ERROR=z/0x1000000; //水表状态标志位WATER_ERROR是uint8_t的数组
if(WATER>999999)
{
WATER=0;
}
if(WATER_ERROR>100)
{
WATER_ERROR=0;
}
}
/* Disable_ISP */
_FMC_DISABLE_ISP();
/* Lock protected registers */
SYS_LockReg();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢 看了好久都没看到这是干啥
一周热门 更多>