呐咯密密 发表于 2025-5-29 14:48

AT32F415 FLASH操作

编程的次序为:解锁 - 擦除 - 编程 -加锁/*------------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;   
}

DuskHarvest 发表于 2025-7-16 16:55

这个可以,看了之前一个哥们问了类似问题,我把你的链接发给他
页: [1]
查看完整版本: AT32F415 FLASH操作