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