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