写STM8flash和写外部flash EN25Q16A-104HIP 的函数小纪

写外部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);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值