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