OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4315|回复: 5

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

[复制链接]

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2018-3-6
在线时间
38 小时
发表于 2018-11-26 14:12:52 | 显示全部楼层 |阅读模式
20金钱
很有趣的东西,欢迎大家来讨论,我写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;

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2018-3-6
在线时间
38 小时
 楼主| 发表于 2018-11-26 14:14:37 | 显示全部楼层
可能是小弟学艺不精 还忘大神指点一二,感激不尽,尝试过加上擦那段写固定地址  也写不进去
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2018-3-6
在线时间
38 小时
 楼主| 发表于 2018-11-26 14:35:13 | 显示全部楼层
我擦flash也是用的写函数 写的0x00  没用擦除函数FLASH_EraseByte
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2018-3-6
在线时间
38 小时
 楼主| 发表于 2018-11-26 14:36:22 | 显示全部楼层
尝试用函数擦也失败了  用的是FLASH_EraseByte();
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2018-3-6
在线时间
38 小时
 楼主| 发表于 2018-11-26 14:37:22 | 显示全部楼层
尝试更好地址 结果也是如此
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-11-27 02:45:14 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 12:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表