打印
[AT32F415]

AT32F415 FLASH操作

[复制链接]
57|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呐咯密密|  楼主 | 2025-5-29 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编程的次序为:
解锁 - 擦除 - 编程 -加锁
/*------------FLASH operation----------*/
void FLASH_Unlock(void)
{
    FLASH->FCKEY = 0x45670123;
    FLASH->FCKEY = 0xCDEF89AB;
}

void FLASH_Lock(void)
{
    FLASH->CTRL |= (uint32_t)FLASH_CTRL_LCK;
}

uint8_t FLASH_ErasePage(uint32_t Page_Address)
{
    uint32_t Timeout = 0x10000000;

    do
    {
        Timeout--;
    } while (FLASH->STS & FLASH_STS_BSY);

    if (Timeout > 0)
    {
        FLASH->CTRL |= FLASH_CTRL_PGERS;
        FLASH->ADDR = Page_Address;
        FLASH->CTRL |= FLASH_CTRL_STRT;

        Timeout = 0x10000000;
        do
        {
            Timeout--;
        } while (FLASH->STS & FLASH_STS_BSY);

        FLASH->CTRL &= ~FLASH_CTRL_PGERS;
        if (Timeout > 0)
            return 1;
        else
            return 0;         
    }
    else
        return 0;
}

uint8_t FLASH_ProgramWord(uint32_t Address, uint32_t Data)
{
    uint32_t Timeout = 0x0000F000;

    do
    {
        Timeout--;
    } while (FLASH->STS & FLASH_STS_BSY);

    if (Timeout > 0)
    {
        FLASH->CTRL |= FLASH_CTRL_PRGM;
        *(__IO uint32_t*)Address = Data;

        Timeout = 0x0000F000;
        do
        {
            Timeout--;
        } while (FLASH->STS & FLASH_STS_BSY);

        FLASH->CTRL &= ~FLASH_CTRL_PRGM;
        if (Timeout > 0)
            return 1;
        else
            return 0;         
    }
    else
        return 0;   
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

563

主题

4077

帖子

53

粉丝