101 #ifdef HAL_FLASH_MODULE_ENABLED 105 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 106 #define FLASH_NB_DOUBLE_WORDS_IN_ROW 64 108 #define FLASH_NB_DOUBLE_WORDS_IN_ROW 32 119 .ErrorCode = HAL_FLASH_ERROR_NONE, \
122 .Bank = FLASH_BANK_1, \
124 .NbPagesToErase = 0U, \
173 HAL_StatusTypeDef status;
174 uint32_t prog_bit = 0;
190 if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
193 __HAL_FLASH_DATA_CACHE_DISABLE();
201 if(TypeProgram == FLASH_TYPEPROGRAM_DOUBLEWORD)
205 prog_bit = FLASH_CR_PG;
207 else if((TypeProgram == FLASH_TYPEPROGRAM_FAST) || (TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST))
213 if(TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST)
215 prog_bit = FLASH_CR_FSTPG;
255 HAL_StatusTypeDef status =
HAL_OK;
266 if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
269 __HAL_FLASH_DATA_CACHE_DISABLE();
278 if(TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST)
289 __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_OPERR);
291 if(TypeProgram == FLASH_TYPEPROGRAM_DOUBLEWORD)
296 else if((TypeProgram == FLASH_TYPEPROGRAM_FAST) || (TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST))
320 CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_MER1 | FLASH_CR_PER | FLASH_CR_PNB));
321 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ 322 defined (STM32L496xx) || defined (STM32L4A6xx) || \ 323 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 334 error = (FLASH->SR & FLASH_FLAG_SR_ERRORS);
335 error |= (FLASH->ECCR & FLASH_FLAG_ECCC);
343 __HAL_FLASH_CLEAR_FLAG(error);
373 if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != 0U)
376 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
391 tmp_page = pFlash.
Page;
398 pFlash.
Page = 0xFFFFFFFFU;
440 __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_OPERR);
509 HAL_StatusTypeDef status =
HAL_OK;
511 if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != 0U)
514 WRITE_REG(FLASH->KEYR, FLASH_KEY1);
515 WRITE_REG(FLASH->KEYR, FLASH_KEY2);
518 if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != 0U)
534 SET_BIT(FLASH->CR, FLASH_CR_LOCK);
545 if(READ_BIT(FLASH->CR, FLASH_CR_OPTLOCK) != 0U)
548 WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1);
549 WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2);
566 SET_BIT(FLASH->CR, FLASH_CR_OPTLOCK);
578 SET_BIT(FLASH->CR, FLASH_CR_OBL_LAUNCH);
658 while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY))
660 if(Timeout != HAL_MAX_DELAY)
669 error = (FLASH->SR & FLASH_FLAG_SR_ERRORS);
670 error |= (FLASH->ECCR & FLASH_FLAG_ECCD);
678 __HAL_FLASH_CLEAR_FLAG(error);
684 if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))
687 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
706 SET_BIT(FLASH->CR, FLASH_CR_PG);
709 *(__IO uint32_t*)Address = (uint32_t)Data;
716 *(__IO uint32_t*)(Address+4U) = (uint32_t)(Data >> 32);
727 uint32_t primask_bit;
728 uint8_t row_index = (2*FLASH_NB_DOUBLE_WORDS_IN_ROW);
729 __IO uint32_t *dest_addr = (__IO uint32_t*)Address;
730 __IO uint32_t *src_addr = (__IO uint32_t*)DataAddress;
736 SET_BIT(FLASH->CR, FLASH_CR_FSTPG);
739 primask_bit = __get_PRIMASK();
745 *dest_addr = *src_addr;
749 }
while (row_index != 0U);
752 __set_PRIMASK(primask_bit);
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
Program double word or fast program of a row at a specified address with interrupt enabled...
void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue)
FLASH operation error interrupt callback.
__IO FLASH_ProcedureTypeDef ProcedureOnGoing
void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue)
FLASH end of operation interrupt callback.
__IO uint32_t NbPagesToErase
static void FLASH_Program_Fast(uint32_t Address, uint32_t DataAddress)
Fast program a row double-word (64-bit) at a specified address.
This file contains all the functions prototypes for the HAL module driver.
void FLASH_PageErase(uint32_t Page, uint32_t Banks)
Erase the specified FLASH memory page.
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void)
Lock the FLASH Option Bytes Registers access.
HAL_StatusTypeDef HAL_FLASH_Lock(void)
Lock the FLASH control register access.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void)
Launch the option byte loading.
FLASH_ProcedureTypeDef
FLASH Procedure structure definition.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
HAL_StatusTypeDef HAL_FLASH_Unlock(void)
Unlock the FLASH control register access.
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
Program double word or fast program of a row at a specified address.
void FLASH_FlushCaches(void)
Flush the instruction and data caches.
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void)
Unlock the FLASH Option Bytes Registers access.
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
Wait for a FLASH operation to complete.
void HAL_FLASH_IRQHandler(void)
Handle FLASH interrupt request.
FLASH handle Structure definition.
FLASH_ProcessTypeDef pFlash
Variable used for Program/Erase sectors under interruption.
uint32_t HAL_FLASH_GetError(void)
Get the specific FLASH error flag.
__IO FLASH_CacheTypeDef CacheToReactivate
static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data)
Program double-word (64-bit) at a specified address.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))