99#define assert_param(expr) ((void)0)
114#define HAL_FLASH_MODULE_ENABLED
116#ifdef HAL_FLASH_MODULE_ENABLED
123#define FLASH_TIMEOUT_VALUE ((uint32_t)50000)
186 HAL_StatusTypeDef status = HAL_ERROR;
192 assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
199 if(TypeProgram == FLASH_TYPEPROGRAM_BYTE)
204 else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD)
209 else if(TypeProgram == FLASH_TYPEPROGRAM_WORD)
224 FLASH->CR &= (~FLASH_CR_PG);
244 HAL_StatusTypeDef status = HAL_OK;
250 assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
253 __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP);
256 __HAL_FLASH_ENABLE_IT(FLASH_IT_ERR);
261 if(TypeProgram == FLASH_TYPEPROGRAM_BYTE)
266 else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD)
271 else if(TypeProgram == FLASH_TYPEPROGRAM_WORD)
291 uint32_t addresstmp = 0;
294 if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
295 FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET)
325 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET)
328 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
385 CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_SER | FLASH_CR_SNB | FLASH_MER_BIT));
388 __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP);
391 __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR);
456 if((FLASH->CR & FLASH_CR_LOCK) != RESET)
459 FLASH->KEYR = FLASH_KEY1;
460 FLASH->KEYR = FLASH_KEY2;
477 FLASH->CR |= FLASH_CR_LOCK;
488 if((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET)
491 FLASH->OPTKEYR = FLASH_OPT_KEY1;
492 FLASH->OPTKEYR = FLASH_OPT_KEY2;
509 FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK;
521 *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT;
583 while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET)
598 if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))
601 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
604 if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
605 FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET)
632 assert_param(IS_FLASH_ADDRESS(Address));
635 CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
636 FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD;
637 FLASH->CR |= FLASH_CR_PG;
639 *(__IO uint64_t*)Address = Data;
658 assert_param(IS_FLASH_ADDRESS(Address));
661 CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
662 FLASH->CR |= FLASH_PSIZE_WORD;
663 FLASH->CR |= FLASH_CR_PG;
665 *(__IO uint32_t*)Address = Data;
683 assert_param(IS_FLASH_ADDRESS(Address));
686 CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
687 FLASH->CR |= FLASH_PSIZE_HALF_WORD;
688 FLASH->CR |= FLASH_CR_PG;
690 *(__IO uint16_t*)Address = Data;
708 assert_param(IS_FLASH_ADDRESS(Address));
711 CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
712 FLASH->CR |= FLASH_PSIZE_BYTE;
713 FLASH->CR |= FLASH_CR_PG;
715 *(__IO uint8_t*)Address = Data;
724 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) != RESET)
729 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR);
732 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR) != RESET)
737 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGAERR);
740 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGPERR) != RESET)
745 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGPERR);
748 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR) != RESET)
753 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR);
756 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) != RESET)
761 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_RDERR);
764 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR) != RESET)
769 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR);
void HAL_FLASH_IRQHandler(void)
This function handles FLASH interrupt request.
__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue)
FLASH operation error interrupt callback.
__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue)
FLASH end of operation interrupt callback.
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
Program byte, halfword, word or double word at a specified address with interrupt enabled.
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
Program byte, halfword, word or double word at a specified address.
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void)
Launch the option byte loading.
HAL_StatusTypeDef HAL_FLASH_Unlock(void)
Unlock the FLASH control register access.
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void)
Lock the FLASH Option Control Registers access.
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void)
Unlock the FLASH Option Control Registers access.
HAL_StatusTypeDef HAL_FLASH_Lock(void)
Locks the FLASH control register access.
uint32_t HAL_FLASH_GetError(void)
Get the specific FLASH error flag.
void FLASH_FlushCaches(void)
Flush the instruction and data caches.
static void FLASH_Program_Word(uint32_t Address, uint32_t Data)
Program word (32-bit) at a specified address.
static void FLASH_Program_Byte(uint32_t Address, uint8_t Data)
Program byte (8-bit) at a specified address.
static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data)
Program a half-word (16-bit) at a specified address.
static void FLASH_SetErrorCode(void)
Set the specific FLASH error flag.
static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data)
Program a double word (64-bit) at a specified address.
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
Wait for a FLASH operation to complete.
FLASH_ProcessTypeDef pFlash
void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange)
Erase the specified FLASH memory sector.
Header file of FLASH HAL module.
Header file of FLASH HAL Extension module.
FLASH handle Structure definition
__IO uint32_t NbSectorsToErase
__IO uint8_t VoltageForErase
__IO FLASH_ProcedureTypeDef ProcedureOnGoing