管理员
  
- 积分
- 165371
- 金钱
- 165371
- 注册时间
- 2010-12-1
- 在线时间
- 2110 小时
|
发表于 2013-10-16 18:33:39
|
显示全部楼层
//解锁STM8S的FLASH
//0,程序存储区(FLASH)解锁
//1,数据存储区(EEPROM)解锁
void STMFLASH_Unlock(u8 type)
{
if(type==0) //程序存储区(FLASH)解锁
{
FLASH-> UKR=FLASH_UNLOCK_KEY1;
FLASH-> UKR=FLASH_UNLOCK_KEY2;
}
else //数据区(EEPROM)解锁
{
FLASH->DUKR=FLASH_UNLOCK_KEY2; //注意,这里和数据手册写的有出入!!!
FLASH->DUKR=FLASH_UNLOCK_KEY1;
}
while(!(FLASH->IAPSR&(1<<3))); //等待解锁成功
}
//STM8S的FLASH上锁
//0,程序存储区(FLASH)上锁
//1,数据存储区(EEPROM)上锁
void STMFLASH_Lock(u8 type)
{
if(type==0)FLASH->IAPSR&=~(1<<1); //主程序存储区(FLASH)上锁
else FLASH->IAPSR&=~(1<<3); //数据存储区(EEPROM)上锁
}
//等待FLASH操作完成
//type:
//0,等待程序存储区(FLASH)操作
//1,等待数据存储区(EEPROM)操作
//返回值:0,成功;1,失败.
u8 STMFLASH_WaitForLastOperation(u8 type)
{
u8 status=0X00;
u32 timeout=0XFFFFF;
#if defined(STM8S208)||defined(STM8S207)||defined(STM8S007)||defined(STM8S105)||\
defined(STM8S005)||defined(STM8AF52Ax)||defined(STM8AF62Ax)||defined(STM8AF626x)
if(type==0)//等待FLASH操作结束
{
while((status==0x00)&&timeout)
{
status=FLASH->IAPSR&(1<<2|1<<0);
timeout--;
}
}else //等待EEPROM操作结束
{
while((status==0x00)&&timeout)
{
status=FLASH->IAPSR&(1<<6|1<<0);
timeout--;
}
}
#else//STM8S103, STM8S903
while(status&&timeout)
{
status=FLASH->IAPSR&(1<<2|1<<0);
timeout--;
}
#endif
if(timeout==0)return 1;
return 0;
} |
|