/** * @brief This function handles FLASH interrupt request. * @retval None */ void HAL_FLASH_IRQHandler(void) { uint32_t addresstmp = 0U; /* Check FLASH operation error flags */ if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) { if(pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) { /*return the faulty sector*/ addresstmp = pFlash.Sector; pFlash.Sector = 0xFFFFFFFFU; } else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) { /*return the faulty bank*/ addresstmp = pFlash.Bank; } else { /*return the faulty address*/ addresstmp = pFlash.Address; } /*Save the Error code*/ FLASH_SetErrorCode(); /* FLASH error interrupt user callback */ HAL_FLASH_OperationErrorCallback(addresstmp); /*Stop the procedure ongoing*/ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } /* Check FLASH End of Operation flag */ if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) { /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); if(pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) { /*Nb of sector to erased can be decreased*/ pFlash.NbSectorsToErase--; /* Check if there are still sectors to erase*/ if(pFlash.NbSectorsToErase != 0U) { addresstmp = pFlash.Sector; /*Indicate user which sector has been erased*/ HAL_FLASH_EndOfOperationCallback(addresstmp); /*Increment sector number*/ pFlash.Sector++; addresstmp = pFlash.Sector; FLASH_Erase_Sector(addresstmp, pFlash.VoltageForErase); } else { /*No more sectors to Erase, user callback can be called.*/ /*Reset Sector and stop Erase sectors procedure*/ pFlash.Sector = addresstmp = 0xFFFFFFFFU; pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* Flush the caches to be sure of the data consistency */ FLASH_FlushCaches() ; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(addresstmp); } } else { if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) { /* MassErase ended. Return the selected bank */ /* Flush the caches to be sure of the data consistency */ FLASH_FlushCaches() ; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Bank); } else { /*Program ended. Return the selected address*/ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Address); } pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } } if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) { /* Operation is completed, disable the PG, SER, SNB and MER Bits */ CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_SER | FLASH_CR_SNB | FLASH_MER_BIT)); /* Disable End of FLASH Operation interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP); /* Disable Error source interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR); /* Process Unlocked */ __HAL_UNLOCK(&pFlash); } }
/** * @brief This function handles FLASH interrupt request. * @retval None */ void HAL_FLASH_IRQHandler(void) { uint32_t temp = 0; /* If the program operation is completed, disable the PG Bit */ FLASH->CR &= (~FLASH_CR_PG); /* If the erase operation is completed, disable the SER Bit */ FLASH->CR &= (~FLASH_CR_SER); FLASH->CR &= SECTOR_MASK; /* if the erase operation is completed, disable the MER Bit */ FLASH->CR &= (~FLASH_MER_BIT); /* Check FLASH End of Operation flag */ if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) { switch (pFlash.ProcedureOnGoing) { case FLASH_PROC_SECTERASE : { /* Nb of sector to erased can be decreased */ pFlash.NbSectorsToErase--; /* Check if there are still sectors to erase */ if(pFlash.NbSectorsToErase != 0) { temp = pFlash.Sector; /* Indicate user which sector has been erased */ HAL_FLASH_EndOfOperationCallback(temp); /* Clear pending flags (if any) */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); /* Increment sector number */ temp = ++pFlash.Sector; FLASH_Erase_Sector(temp, pFlash.VoltageForErase); } else { /* No more sectors to Erase, user callback can be called.*/ /* Reset Sector and stop Erase sectors procedure */ pFlash.Sector = temp = 0xFFFFFFFF; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(temp); /* Sector Erase procedure is completed */ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); } break; } case FLASH_PROC_MASSERASE : { /* MassErase ended. Return the selected bank : in this product we don't have Banks */ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(0); /* MAss Erase procedure is completed */ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); break; } case FLASH_PROC_PROGRAM : { /*Program ended. Return the selected address*/ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Address); /* Programming procedure is completed */ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); break; } default : break; } } /* Check FLASH operation error flags */ if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_ERSERR )) != RESET) { switch (pFlash.ProcedureOnGoing) { case FLASH_PROC_SECTERASE : { /* return the faulty sector */ temp = pFlash.Sector; pFlash.Sector = 0xFFFFFFFF; break; } case FLASH_PROC_MASSERASE : { /* No return in case of Mass Erase */ temp = 0; break; } case FLASH_PROC_PROGRAM : { /*return the faulty address*/ temp = pFlash.Address; break; } default : break; } /*Save the Error code*/ FLASH_SetErrorCode(); /* FLASH error interrupt user callback */ HAL_FLASH_OperationErrorCallback(temp); /* Clear FLASH error pending bits */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_ERSERR ); /*Stop the procedure ongoing */ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) { /* Disable End of FLASH Operation interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP); /* Disable Error source interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR); /* Process Unlocked */ __HAL_UNLOCK(&pFlash); } }
/** * @brief This function handles FLASH interrupt request. * @retval None */ void HAL_FLASH_IRQHandler(void) { uint32_t temp; /* Check FLASH operation error flags */ /* WARNING : On the first cut of STM32L031xx and STM32L041xx devices, * (RefID = 0x1000) the FLASH_FLAG_OPTVERR bit was not behaving * as expected. If the user run an application using the first * cut of the STM32L031xx device or the first cut of the STM32L041xx * device, the check on the FLASH_FLAG_OPTVERR bit should be ignored. * * Note :The revId of the device can be retrieved via the HAL_GetREVID() * function. * */ if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | \ FLASH_FLAG_RDERR | FLASH_FLAG_FWWERR | FLASH_FLAG_NOTZEROERR) != RESET) { if(ProcFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) { /* Return the faulty sector */ temp = ProcFlash.Page; ProcFlash.Page = 0xFFFFFFFFU; } else { /* Return the faulty address */ temp = ProcFlash.Address; } /* Save the Error code */ FLASH_SetErrorCode(); /* FLASH error interrupt user callback */ HAL_FLASH_OperationErrorCallback(temp); /* Stop the procedure ongoing */ ProcFlash.ProcedureOnGoing = FLASH_PROC_NONE; } /* Check FLASH End of Operation flag */ if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) { /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); /* Process can continue only if no error detected */ if(ProcFlash.ProcedureOnGoing != FLASH_PROC_NONE) { if(ProcFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) { /* Nb of sector to erased can be decreased */ ProcFlash.NbPagesToErase--; /* Check if there are still sectors to erase */ if(ProcFlash.NbPagesToErase != 0U) { temp = ProcFlash.Page; /* Indicate user which sector has been erased */ HAL_FLASH_EndOfOperationCallback(temp); /* Increment sector number */ temp = ProcFlash.Page + FLASH_PAGE_SIZE; ProcFlash.Page = ProcFlash.Page + FLASH_PAGE_SIZE; /* If the erase operation is completed, disable the ERASE Bit */ CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE); FLASH_ErasePage(temp); } else { /* No more sectors to Erase, user callback can be called */ /* Reset Sector and stop Erase sectors procedure */ ProcFlash.Page = temp = 0xFFFFFFFFU; ProcFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(temp); } } else { if(ProcFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM) { /* If the program operation is completed, disable the PROG Bit */ CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG); /* Program ended. Return the selected address */ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(ProcFlash.Address); } ProcFlash.ProcedureOnGoing = FLASH_PROC_NONE; } } } if(ProcFlash.ProcedureOnGoing == FLASH_PROC_NONE) { /* Operation is completed, disable the PG and PER Bits */ CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE | FLASH_PECR_PROG); /* Disable End of FLASH Operation interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP); /* Disable Error source interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR); /* Process Unlocked */ __HAL_UNLOCK(&ProcFlash); } }
/** * @brief Handle FLASH interrupt request. * @retval None */ void HAL_FLASH_IRQHandler(void) { uint32_t tmp_page; /* If the operation is completed, disable the PG, PNB, MER1, MER2 and PER Bit */ CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_MER1 | FLASH_CR_MER2 | FLASH_CR_PER | FLASH_CR_PNB)); /* Disable the FSTPG Bit only if it is the last row programmed */ if(pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM_LAST) { CLEAR_BIT(FLASH->CR, FLASH_CR_FSTPG); } /* Check FLASH operation error flags */ if((__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PROGERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_SIZERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_MISERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_FASTERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD))) { /*Save the error code*/ FLASH_SetErrorCode(); /* FLASH error interrupt user callback */ if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGE_ERASE) { HAL_FLASH_EndOfOperationCallback(pFlash.Page); } else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASS_ERASE) { HAL_FLASH_EndOfOperationCallback(pFlash.Bank); } else if((pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM) || (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM_LAST)) { HAL_FLASH_OperationErrorCallback(pFlash.Address); } HAL_FLASH_OperationErrorCallback(pFlash.Address); /*Stop the procedure ongoing*/ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } /* Check FLASH End of Operation flag */ if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) { /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGE_ERASE) { /* Nb of pages to erased can be decreased */ pFlash.NbPagesToErase--; /* Check if there are still pages to erase*/ if(pFlash.NbPagesToErase != 0) { /* Indicate user which page has been erased*/ HAL_FLASH_EndOfOperationCallback(pFlash.Page); /* Increment page number */ pFlash.Page++; tmp_page = pFlash.Page; FLASH_PageErase(tmp_page, pFlash.Bank); } else { /* No more pages to Erase */ /* Reset Address and stop Erase pages procedure */ pFlash.Page = 0xFFFFFFFF; pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* Flush the caches to be sure of the data consistency */ FLASH_FlushCaches() ; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Page); } } else { if(pFlash.ProcedureOnGoing == FLASH_PROC_MASS_ERASE) { /* MassErase ended. Return the selected bank */ /* Flush the caches to be sure of the data consistency */ FLASH_FlushCaches() ; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Bank); } else if((pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM) || (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM_LAST)) { /* Program ended. Return the selected address */ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Address); } /*Clear the procedure ongoing*/ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } } if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) { /* Disable End of Operation and Error interrupts */ __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_OPERR); /* Process Unlocked */ __HAL_UNLOCK(&pFlash); } }
/** * @brief This function handles FLASH interrupt request. * @retval None */ void HAL_FLASH_IRQHandler(void) { uint32_t addresstmp = 0U; /* Check FLASH operation error flags */ if( __HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_SIZERR) || #if defined(FLASH_SR_RDERR) __HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) || #endif /* FLASH_SR_RDERR */ #if defined(FLASH_SR_OPTVERRUSR) __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERRUSR) || #endif /* FLASH_SR_OPTVERRUSR */ __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) ) { if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) { /* Return the faulty sector */ addresstmp = pFlash.Page; pFlash.Page = 0xFFFFFFFFU; } else { /* Return the faulty address */ addresstmp = pFlash.Address; } /* Save the Error code */ FLASH_SetErrorCode(); /* FLASH error interrupt user callback */ HAL_FLASH_OperationErrorCallback(addresstmp); /* Stop the procedure ongoing */ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } /* Check FLASH End of Operation flag */ if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) { /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); /* Process can continue only if no error detected */ if(pFlash.ProcedureOnGoing != FLASH_PROC_NONE) { if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) { /* Nb of pages to erased can be decreased */ pFlash.NbPagesToErase--; /* Check if there are still pages to erase */ if(pFlash.NbPagesToErase != 0U) { addresstmp = pFlash.Page; /*Indicate user which sector has been erased */ HAL_FLASH_EndOfOperationCallback(addresstmp); /*Increment sector number*/ addresstmp = pFlash.Page + FLASH_PAGE_SIZE; pFlash.Page = addresstmp; /* If the erase operation is completed, disable the ERASE Bit */ CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE); FLASH_PageErase(addresstmp); } else { /* No more pages to Erase, user callback can be called. */ /* Reset Sector and stop Erase pages procedure */ pFlash.Page = addresstmp = 0xFFFFFFFFU; pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(addresstmp); } } else { /* If the program operation is completed, disable the PROG Bit */ CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG); /* Program ended. Return the selected address */ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Address); /* Reset Address and stop Program procedure */ pFlash.Address = 0xFFFFFFFFU; pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } } } if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) { /* Operation is completed, disable the PROG and ERASE */ CLEAR_BIT(FLASH->PECR, (FLASH_PECR_ERASE | FLASH_PECR_PROG)); /* Disable End of FLASH Operation and Error source interrupts */ __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); /* Process Unlocked */ __HAL_UNLOCK(&pFlash); } }
/** * @brief This function handles FLASH interrupt request. * @param None * @retval None */ void HAL_FLASH_IRQHandler(void) { uint32_t temp; /* If the program operation is completed, disable the PROG Bit */ FLASH->PECR &= (~FLASH_PECR_PROG); /* If the erase operation is completed, disable the ERASE Bit */ FLASH->PECR &= (~FLASH_PECR_ERASE); /* Check FLASH End of Operation flag */ if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) { if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) { /*Nb of sector to erased can be decreased*/ pFlash.NbPagesToErase--; /* Check if there are still sectors to erase*/ if(pFlash.NbPagesToErase != 0) { temp = pFlash.Page; /*Indicate user which sector has been erased*/ HAL_FLASH_EndOfOperationCallback(temp); /* Clear pending flags (if any) */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_ENDHV | FLASH_FLAG_WRPERR |\ FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR| FLASH_FLAG_OPTVERR |\ FLASH_FLAG_RDERR | FLASH_FLAG_NOTZEROERR); /*Increment sector number*/ temp = pFlash.Page + PAGESIZE; pFlash.Page = pFlash.Page + PAGESIZE; FLASH_Erase_Page(temp); } else { /*No more sectors to Erase, user callback can be called.*/ /*Reset Sector and stop Erase sectors procedure*/ pFlash.Page = temp = 0xFFFFFFFF; pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(temp); /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); } } else { if(pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM) { /*Program ended. Return the selected address*/ /* FLASH EOP interrupt user callback */ HAL_FLASH_EndOfOperationCallback(pFlash.Address); } pFlash.ProcedureOnGoing = FLASH_PROC_NONE; /* Clear FLASH End of Operation pending bit */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); } } /* Check FLASH operation error flags */ if( (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_ENDHV) != RESET) || \ (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) != RESET)|| (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR) != RESET) || \ (__HAL_FLASH_GET_FLAG(FLASH_FLAG_SIZERR) != RESET)|| (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) != RESET) || \ (__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) != RESET) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_NOTZEROERR) != RESET)) { if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) { /*return the faulty sector*/ temp = pFlash.Page; pFlash.Page = 0xFFFFFFFF; } else { /*retrun the faulty address*/ temp = pFlash.Address; } /*Save the Error code*/ FLASH_SetErrorCode(); /* FLASH error interrupt user callback */ HAL_FLASH_OperationErrorCallback(temp); /* Clear FLASH error pending bits */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_ENDHV | FLASH_FLAG_WRPERR |\ FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR| FLASH_FLAG_OPTVERR |\ FLASH_FLAG_RDERR | FLASH_FLAG_NOTZEROERR); /*Stop the procedure ongoing*/ pFlash.ProcedureOnGoing = FLASH_PROC_NONE; } if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) { /* Disable End of FLASH Operation interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP); /* Disable Error source interrupt */ __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR); /* Process Unlocked */ __HAL_UNLOCK(&pFlash); } }