93#define assert_param(expr) ((void)0)
104#define HAL_FLASH_MODULE_ENABLED
106#ifdef HAL_FLASH_MODULE_ENABLED
113#define FLASH_TIMEOUT_VALUE 50000U
151HAL_StatusTypeDef
HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress)
153 HAL_StatusTypeDef status;
154 __IO uint32_t *dest_addr = (__IO uint32_t *)FlashAddress;
155 __IO uint32_t *src_addr = (__IO uint32_t*)DataAddress;
157 uint8_t row_index = FLASH_NB_32BITWORD_IN_FLASHWORD;
160 assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
161 assert_param(IS_FLASH_PROGRAM_ADDRESS(FlashAddress));
166#if defined (FLASH_OPTCR_PG_OTP)
167 if((IS_FLASH_PROGRAM_ADDRESS_BANK1(FlashAddress)) || (IS_FLASH_PROGRAM_ADDRESS_OTP(FlashAddress)))
169 if(IS_FLASH_PROGRAM_ADDRESS_BANK1(FlashAddress))
174#if defined (DUAL_BANK)
175 else if(IS_FLASH_PROGRAM_ADDRESS_BANK2(FlashAddress))
193#if defined (DUAL_BANK)
194 if(bank == FLASH_BANK_1)
196#if defined (FLASH_OPTCR_PG_OTP)
197 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
200 SET_BIT(FLASH->OPTCR, FLASH_OPTCR_PG_OTP);
206 SET_BIT(FLASH->CR1, FLASH_CR_PG);
212 SET_BIT(FLASH->CR2, FLASH_CR_PG);
215#if defined (FLASH_OPTCR_PG_OTP)
216 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
219 SET_BIT(FLASH->OPTCR, FLASH_OPTCR_PG_OTP);
225 SET_BIT(FLASH->CR1, FLASH_CR_PG);
232#if defined (FLASH_OPTCR_PG_OTP)
233 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
236 *(__IO uint16_t *)FlashAddress = *(__IO uint16_t*)DataAddress;
244 *dest_addr = *src_addr;
248 }
while (row_index != 0U);
257#if defined (DUAL_BANK)
258#if defined (FLASH_OPTCR_PG_OTP)
259 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
262 CLEAR_BIT(FLASH->OPTCR, FLASH_OPTCR_PG_OTP);
267 if(bank == FLASH_BANK_1)
270 CLEAR_BIT(FLASH->CR1, FLASH_CR_PG);
275 CLEAR_BIT(FLASH->CR2, FLASH_CR_PG);
279#if defined (FLASH_OPTCR_PG_OTP)
280 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
283 CLEAR_BIT(FLASH->OPTCR, FLASH_OPTCR_PG_OTP);
289 CLEAR_BIT(FLASH->CR1, FLASH_CR_PG);
311 HAL_StatusTypeDef status;
312 __IO uint32_t *dest_addr = (__IO uint32_t*)FlashAddress;
313 __IO uint32_t *src_addr = (__IO uint32_t*)DataAddress;
315 uint8_t row_index = FLASH_NB_32BITWORD_IN_FLASHWORD;
318 assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
319 assert_param(IS_FLASH_PROGRAM_ADDRESS(FlashAddress));
327#if defined (FLASH_OPTCR_PG_OTP)
328 if((IS_FLASH_PROGRAM_ADDRESS_BANK1(FlashAddress)) || (IS_FLASH_PROGRAM_ADDRESS_OTP(FlashAddress)))
330 if(IS_FLASH_PROGRAM_ADDRESS_BANK1(FlashAddress))
335#if defined (DUAL_BANK)
336 else if(IS_FLASH_PROGRAM_ADDRESS_BANK2(FlashAddress))
349 if (status != HAL_OK)
358#if defined (DUAL_BANK)
359 if(bank == FLASH_BANK_1)
364#if defined (FLASH_OPTCR_PG_OTP)
365 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
368 SET_BIT(FLASH->OPTCR, FLASH_OPTCR_PG_OTP);
374 SET_BIT(FLASH->CR1, FLASH_CR_PG);
378#if defined (FLASH_CR_OPERRIE)
379 __HAL_FLASH_ENABLE_IT_BANK1(FLASH_IT_EOP_BANK1 | FLASH_IT_WRPERR_BANK1 | FLASH_IT_PGSERR_BANK1 | \
380 FLASH_IT_STRBERR_BANK1 | FLASH_IT_INCERR_BANK1 | FLASH_IT_OPERR_BANK1);
382 __HAL_FLASH_ENABLE_IT_BANK1(FLASH_IT_EOP_BANK1 | FLASH_IT_WRPERR_BANK1 | FLASH_IT_PGSERR_BANK1 | \
383 FLASH_IT_STRBERR_BANK1 | FLASH_IT_INCERR_BANK1);
392 SET_BIT(FLASH->CR2, FLASH_CR_PG);
395#if defined (FLASH_CR_OPERRIE)
396 __HAL_FLASH_ENABLE_IT_BANK2(FLASH_IT_EOP_BANK2 | FLASH_IT_WRPERR_BANK2 | FLASH_IT_PGSERR_BANK2 | \
397 FLASH_IT_STRBERR_BANK2 | FLASH_IT_INCERR_BANK2 | FLASH_IT_OPERR_BANK2);
399 __HAL_FLASH_ENABLE_IT_BANK2(FLASH_IT_EOP_BANK2 | FLASH_IT_WRPERR_BANK2 | FLASH_IT_PGSERR_BANK2 | \
400 FLASH_IT_STRBERR_BANK2 | FLASH_IT_INCERR_BANK2);
407#if defined (FLASH_OPTCR_PG_OTP)
408 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
411 SET_BIT(FLASH->OPTCR, FLASH_OPTCR_PG_OTP);
417 SET_BIT(FLASH->CR1, FLASH_CR_PG);
421#if defined (FLASH_CR_OPERRIE)
422 __HAL_FLASH_ENABLE_IT_BANK1(FLASH_IT_EOP_BANK1 | FLASH_IT_WRPERR_BANK1 | FLASH_IT_PGSERR_BANK1 | \
423 FLASH_IT_STRBERR_BANK1 | FLASH_IT_INCERR_BANK1 | FLASH_IT_OPERR_BANK1);
425 __HAL_FLASH_ENABLE_IT_BANK1(FLASH_IT_EOP_BANK1 | FLASH_IT_WRPERR_BANK1 | FLASH_IT_PGSERR_BANK1 | \
426 FLASH_IT_STRBERR_BANK1 | FLASH_IT_INCERR_BANK1);
433#if defined (FLASH_OPTCR_PG_OTP)
434 if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
437 *(__IO uint16_t *)FlashAddress = *(__IO uint16_t*)DataAddress;
445 *dest_addr = *src_addr;
449 }
while (row_index != 0U);
467 FLASH_ProcedureTypeDef procedure;
470 if(__HAL_FLASH_GET_FLAG_BANK1(FLASH_SR_EOP) != RESET)
484 __HAL_FLASH_CLEAR_FLAG_BANK1(FLASH_FLAG_EOP_BANK1);
502 __HAL_FLASH_CLEAR_FLAG_BANK1(FLASH_FLAG_EOP_BANK1);
509 if((procedure == FLASH_PROC_MASSERASE_BANK1) || (procedure == FLASH_PROC_ALLBANK_MASSERASE))
515 else if(procedure == FLASH_PROC_PROGRAM_BANK1)
526 if((procedure != FLASH_PROC_SECTERASE_BANK2) && \
527 (procedure != FLASH_PROC_MASSERASE_BANK2) && \
528 (procedure != FLASH_PROC_PROGRAM_BANK2))
532 __HAL_FLASH_CLEAR_FLAG_BANK1(FLASH_FLAG_EOP_BANK1);
537#if defined (DUAL_BANK)
539 if(__HAL_FLASH_GET_FLAG_BANK2(FLASH_SR_EOP) != RESET)
553 __HAL_FLASH_CLEAR_FLAG_BANK2(FLASH_FLAG_EOP_BANK2);
571 __HAL_FLASH_CLEAR_FLAG_BANK2(FLASH_FLAG_EOP_BANK2);
578 if((procedure == FLASH_PROC_MASSERASE_BANK2) || (procedure == FLASH_PROC_ALLBANK_MASSERASE))
584 else if(procedure == FLASH_PROC_PROGRAM_BANK2)
595 if((procedure != FLASH_PROC_SECTERASE_BANK1) && \
596 (procedure != FLASH_PROC_MASSERASE_BANK1) && \
597 (procedure != FLASH_PROC_PROGRAM_BANK1))
601 __HAL_FLASH_CLEAR_FLAG_BANK2(FLASH_FLAG_EOP_BANK2);
608#if defined (FLASH_SR_OPERR)
609 errorflag = FLASH->SR1 & (FLASH_FLAG_WRPERR_BANK1 | FLASH_FLAG_PGSERR_BANK1 | FLASH_FLAG_STRBERR_BANK1 | \
610 FLASH_FLAG_INCERR_BANK1 | FLASH_FLAG_OPERR_BANK1);
612 errorflag = FLASH->SR1 & (FLASH_FLAG_WRPERR_BANK1 | FLASH_FLAG_PGSERR_BANK1 | FLASH_FLAG_STRBERR_BANK1 | \
613 FLASH_FLAG_INCERR_BANK1);
622 __HAL_FLASH_CLEAR_FLAG_BANK1(errorflag);
626 if(procedure == FLASH_PROC_SECTERASE_BANK1)
632 else if((procedure == FLASH_PROC_MASSERASE_BANK1) || (procedure == FLASH_PROC_ALLBANK_MASSERASE))
650#if defined (DUAL_BANK)
652#if defined (FLASH_SR_OPERR)
653 errorflag = FLASH->SR2 & ((FLASH_FLAG_WRPERR_BANK2 | FLASH_FLAG_PGSERR_BANK2 | FLASH_FLAG_STRBERR_BANK2 | \
654 FLASH_FLAG_INCERR_BANK2 | FLASH_FLAG_OPERR_BANK2) & 0x7FFFFFFFU);
656 errorflag = FLASH->SR2 & ((FLASH_FLAG_WRPERR_BANK2 | FLASH_FLAG_PGSERR_BANK2 | FLASH_FLAG_STRBERR_BANK2 | \
657 FLASH_FLAG_INCERR_BANK2) & 0x7FFFFFFFU);
666 __HAL_FLASH_CLEAR_FLAG_BANK2(errorflag);
670 if(procedure== FLASH_PROC_SECTERASE_BANK2)
676 else if((procedure == FLASH_PROC_MASSERASE_BANK2) || (procedure == FLASH_PROC_ALLBANK_MASSERASE))
697#if defined (FLASH_CR_OPERRIE)
699 __HAL_FLASH_DISABLE_IT_BANK1(FLASH_IT_EOP_BANK1 | FLASH_IT_WRPERR_BANK1 | FLASH_IT_PGSERR_BANK1 | \
700 FLASH_IT_STRBERR_BANK1 | FLASH_IT_INCERR_BANK1 | FLASH_IT_OPERR_BANK1);
702#if defined (DUAL_BANK)
704 __HAL_FLASH_DISABLE_IT_BANK2(FLASH_IT_EOP_BANK2 | FLASH_IT_WRPERR_BANK2 | FLASH_IT_PGSERR_BANK2 | \
705 FLASH_IT_STRBERR_BANK2 | FLASH_IT_INCERR_BANK2 | FLASH_IT_OPERR_BANK2);
709 __HAL_FLASH_DISABLE_IT_BANK1(FLASH_IT_EOP_BANK1 | FLASH_IT_WRPERR_BANK1 | FLASH_IT_PGSERR_BANK1 | \
710 FLASH_IT_STRBERR_BANK1 | FLASH_IT_INCERR_BANK1);
712#if defined (DUAL_BANK)
714 __HAL_FLASH_DISABLE_IT_BANK2(FLASH_IT_EOP_BANK2 | FLASH_IT_WRPERR_BANK2 | FLASH_IT_PGSERR_BANK2 | \
715 FLASH_IT_STRBERR_BANK2 | FLASH_IT_INCERR_BANK2);
786 if(READ_BIT(FLASH->CR1, FLASH_CR_LOCK) != 0U)
789 WRITE_REG(FLASH->KEYR1, FLASH_KEY1);
790 WRITE_REG(FLASH->KEYR1, FLASH_KEY2);
793 if (READ_BIT(FLASH->CR1, FLASH_CR_LOCK) != 0U)
799#if defined (DUAL_BANK)
800 if(READ_BIT(FLASH->CR2, FLASH_CR_LOCK) != 0U)
803 WRITE_REG(FLASH->KEYR2, FLASH_KEY1);
804 WRITE_REG(FLASH->KEYR2, FLASH_KEY2);
807 if (READ_BIT(FLASH->CR2, FLASH_CR_LOCK) != 0U)
824 SET_BIT(FLASH->CR1, FLASH_CR_LOCK);
827 if (READ_BIT(FLASH->CR1, FLASH_CR_LOCK) == 0U)
832#if defined (DUAL_BANK)
834 SET_BIT(FLASH->CR2, FLASH_CR_LOCK);
837 if (READ_BIT(FLASH->CR2, FLASH_CR_LOCK) == 0U)
852 if(READ_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK) != 0U)
855 WRITE_REG(FLASH->OPTKEYR, FLASH_OPT_KEY1);
856 WRITE_REG(FLASH->OPTKEYR, FLASH_OPT_KEY2);
859 if (READ_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK) != 0U)
875 SET_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK);
878 if (READ_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK) == 0U)
892 HAL_StatusTypeDef status;
899#if defined (DUAL_BANK)
910 if (status == HAL_OK)
913 SET_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTSTART);
1001 uint32_t bsyflag = FLASH_FLAG_QW_BANK1;
1002 uint32_t errorflag = FLASH->SR1 & FLASH_FLAG_ALL_ERRORS_BANK1;
1005 assert_param(IS_FLASH_BANK_EXCLUSIVE(Bank));
1007#if defined (DUAL_BANK)
1009 if (Bank == FLASH_BANK_2)
1012 errorflag = (FLASH->SR2 & FLASH_FLAG_ALL_ERRORS_BANK2) | 0x80000000U;
1014 bsyflag = FLASH_FLAG_QW_BANK2;
1018 while(__HAL_FLASH_GET_FLAG(bsyflag))
1020 if(Timeout != HAL_MAX_DELAY)
1031 if((errorflag & 0x7FFFFFFFU) != 0U)
1037 __HAL_FLASH_CLEAR_FLAG(errorflag);
1043 if(Bank == FLASH_BANK_1)
1045 if (__HAL_FLASH_GET_FLAG_BANK1(FLASH_FLAG_EOP_BANK1))
1048 __HAL_FLASH_CLEAR_FLAG_BANK1(FLASH_FLAG_EOP_BANK1);
1051#if defined (DUAL_BANK)
1054 if (__HAL_FLASH_GET_FLAG_BANK2(FLASH_FLAG_EOP_BANK2))
1057 __HAL_FLASH_CLEAR_FLAG_BANK2(FLASH_FLAG_EOP_BANK2);
1077 while(READ_BIT(FLASH->OPTSR_CUR, FLASH_OPTSR_OPT_BUSY) != 0U)
1090 if(READ_BIT(FLASH->OPTSR_CUR, FLASH_OPTSR_OPTCHANGEERR) != 0U)
1096 FLASH->OPTCCR |= FLASH_OPTCCR_CLR_OPTCHANGEERR;
1117 assert_param(IS_FLASH_BANK_EXCLUSIVE(Bank));
1120 if(Bank == FLASH_BANK_1)
1122 bsyflag = FLASH_FLAG_CRC_BUSY_BANK1;
1126 bsyflag = FLASH_FLAG_CRC_BUSY_BANK2;
1130 while(__HAL_FLASH_GET_FLAG(bsyflag))
1143 if(Bank == FLASH_BANK_1)
1145 if (__HAL_FLASH_GET_FLAG_BANK1(FLASH_FLAG_CRCRDERR_BANK1))
1151 __HAL_FLASH_CLEAR_FLAG_BANK1(FLASH_FLAG_CRCRDERR_BANK1);
1156#if defined (DUAL_BANK)
1159 if (__HAL_FLASH_GET_FLAG_BANK2(FLASH_FLAG_CRCRDERR_BANK2))
1165 __HAL_FLASH_CLEAR_FLAG_BANK2(FLASH_FLAG_CRCRDERR_BANK2);
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 FlashAddress, uint32_t DataAddress)
Program flash words of 256 bits at a specified address with interrupt enabled.
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress)
Program flash 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.
HAL_StatusTypeDef FLASH_CRC_WaitForLastOperation(uint32_t Timeout, uint32_t Bank)
Wait for a FLASH CRC computation to complete.
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout, uint32_t Bank)
Wait for a FLASH operation to complete.
HAL_StatusTypeDef FLASH_OB_WaitForLastOperation(uint32_t Timeout)
Wait for a FLASH Option Bytes change operation to complete.
void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange)
Erase the specified FLASH memory sector.
FLASH_ProcessTypeDef pFlash
Header file of FLASH HAL module.
Header file of FLASH HAL module.
FLASH handle Structure definition
__IO uint32_t NbSectorsToErase
__IO uint8_t VoltageForErase
__IO FLASH_ProcedureTypeDef ProcedureOnGoing