diff --git a/hal_st/stm32fxxx/FlashInternalStm.cpp b/hal_st/stm32fxxx/FlashInternalStm.cpp index db113d00..12850eec 100644 --- a/hal_st/stm32fxxx/FlashInternalStm.cpp +++ b/hal_st/stm32fxxx/FlashInternalStm.cpp @@ -5,20 +5,17 @@ namespace { -#if defined(STM32H5) +#if defined(FLASH_DBANK_SUPPORT) || defined(FLASH_BANK_SIZE) uint32_t GetBank(const uint8_t* memoryBegin) { auto address = reinterpret_cast(memoryBegin); - if (READ_BIT(FLASH->OPTSR_CUR, FLASH_OPTSR_SWAP_BANK) == 0) - { - // No Bank swap - return (address < (FLASH_BASE + FLASH_BANK_SIZE)) ? FLASH_BANK_1 : FLASH_BANK_2; - } - else - { - // Bank swap - return (address < (FLASH_BASE + FLASH_BANK_SIZE)) ? FLASH_BANK_2 : FLASH_BANK_1; - } +#if defined(FLASH_OPTSR_SWAP_BANK) + // Bank swap + if (READ_BIT(FLASH->OPTSR_CUR, FLASH_OPTSR_SWAP_BANK)) + return (address < (FLASH_BASE + FLASH_BANK_SIZE)) ? FLASH_BANK_2 : FLASH_BANK_1; +#endif + + return (address < (FLASH_BASE + FLASH_BANK_SIZE)) ? FLASH_BANK_1 : FLASH_BANK_2; } #endif @@ -47,7 +44,7 @@ namespace hal const auto flashBegin = reinterpret_cast(flashMemory.begin()); -#if defined(STM32WBA) || defined(STM32H5) +#if defined(FLASH_TYPEPROGRAM_QUADWORD) detail::AlignedWriteBuffer(buffer, address, flashBegin); #elif defined(STM32WB) || defined(STM32G4) || defined(STM32G0) detail::AlignedWriteBuffer(buffer, address, flashBegin); @@ -96,6 +93,9 @@ namespace hal eraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; eraseInitStruct.Page = beginIndex; eraseInitStruct.NbPages = endIndex - beginIndex; +#if defined(FLASH_DBANK_SUPPORT) || defined(FLASH_BANK_BOTH) + eraseInitStruct.Banks = GetBank(flashMemory.begin()); +#endif auto result = HAL_FLASHEx_Erase(&eraseInitStruct, &pageError); really_assert(result == HAL_OK);