STM8flash有四个字节地址十分异常

2019-07-19 20:22发布

很有趣的东西,欢迎大家来讨论,我写flash一切正常,但是在程序开始加上这句之后,后面再写,有四个字节的flash总是写不进去, 这段注释掉就没有任何问题 这段注释掉就没有任何问题 注释掉这段擦flash之后就ok了,单片机是STM8L,好郁闷啊,不知道有没有大佬遇到过类似的问题呢,求助啊这是写flash的程序

这段是写flash的程序 这段是写flash的程序


这是不注释后的flash

读flash值 读flash值





附上擦flash和写flash的代码



if(判断flash标志位)
{
   操作
}
else
  {
    FLASH_Unlock(FLASH_MemType_Program);//MASS 密钥,解除EEPROM的保护
    FLASH_SetProgrammingTime(FLASH_ProgramTime_TProg); //设定编程时间为标准编程时间
    if(FLASH_ReadByte(MAIN_USER_Start_ADDR-1)==FLASHKEY)
      FLASH_ProgramByte(MAIN_USER_Start_ADDR-1 , 0x00);  //假如标志位未清空
    for(i=MAIN_USER_Start_ADDR;i<0x9FFF;i++)
    {
      FLASH_ProgramByte(i , 0x00);  //把数据写入相应的存储地址
      while(FLASH_GetFlagStatus(FLASH_FLAG_EOP) == 1);//等待编程结束
    }
    FLASH_Lock(FLASH_MemType_Program);//上锁
  }


u8 Write_App(u8 * Write_Data,u8 Write_Len)
{
    u32 addr = MAIN_USER_Start_ADDR;//得到flash地址
    u8 i = 0;

    FLASH_Unlock(FLASH_MemType_Program);//MASS 密钥,解除EEPROM的保护
    FLASH_SetProgrammingTime(FLASH_ProgramTime_TProg); //设定编程时间为标准编程时间
    for(i=3;i<(Write_Len-1);i++)
    {
      FLASH_ProgramByte(addr , USART_RX_BUF);  //把数据写入相应的存储地址
      while(FLASH_GetFlagStatus(FLASH_FLAG_EOP) == 1);//等待编程结束
      addr++;//为下次写入做准备
    }
    if(Write_Len<24)
    {
      FLASH_ProgramByte(MAIN_USER_Start_ADDR-1,FLASHKEY);//写入标志位 0xFF
      addr=MAIN_USER_Start_ADDR;//清空flash写地址
    }
    FLASH_Lock(FLASH_MemType_Program);//上锁
    return i;

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
momo最可爱
1楼-- · 2019-07-19 22:49
可能是小弟学艺不精 还忘大神指点一二,感激不尽,尝试过加上擦那段写固定地址  也写不进去
momo最可爱
2楼-- · 2019-07-20 00:15
 精彩回答 2  元偷偷看……
momo最可爱
3楼-- · 2019-07-20 05:52
尝试用函数擦也失败了  用的是FLASH_EraseByte();
momo最可爱
4楼-- · 2019-07-20 10:51
尝试更好地址 结果也是如此
正点原子
5楼-- · 2019-07-20 11:25
 精彩回答 2  元偷偷看……

一周热门 更多>