写外部flash EN25Q16A-104HIP 的函数
uint8 program_data(uint16 flash_addr, uint8 buffer[], uint8 len) { uint8 i,flagstatus; uint16 address; int8 trycnt=1; //u16 timeout = 0xFFFF; retry_lbl: if(trycnt-- <= 0) return(0); FLASH->CR1 &= (u8)(~0x01); FLASH->CR1 |= (u8)0x00; address = flash_addr; for(i = 0; i < len; i++) { clr_watchdog(NULL); /* Unlock Program memory */ FLASH_Unlock(FLASH_MEMTYPE_PROG); *((uint8 *) address) = buffer[i]; while (flagstatus == 0x00) { flagstatus = (u8)(FLASH->IAPSR & ((u8)(0x04) |(u8)(0x01))); //timeout--; } FLASH_Lock(FLASH_MEMTYPE_PROG); address++; } address = flash_addr; for(i = 0; i < len; i++) { if(*((u8*) address) != buffer[i]) goto retry_lbl; address++; } return(1); }
STM8 FLASH
oid flash_write(u16 addr, const void *in, u8 len)
{
//FLASH->CR1 &= (u8) (~0x01);
const u8 *data = (const u8 *)in;
FLASH_Unlock(FLASH_MEMTYPE_PROG);
while (len--)
{
*((u8*) addr++) = *data++;
while (!(u8) (FLASH->IAPSR & ((u8) (0x04) | (u8) (0x01))))
IWDG->KR = IWDG_KEY_REFRESH;
}
FLASH_Lock(FLASH_MEMTYPE_PROG);
}