×
嵌入式 > 技术百科 > 详情

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

发布时间:2021-01-20 发布时间:
|

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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
SN74LVC04AD的技术参数