Skip to content

Commit 3ff0440

Browse files
committed
fix(stm32): disable interrupts during flash erase/program to prevent hangs on F4
1 parent b00baec commit 3ff0440

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

radio/src/targets/common/arm/stm32/flash_driver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,14 @@ static int stm32_flash_erase_sector(uint32_t address)
145145
int ret = 0;
146146
uint32_t sector_errors = 0;
147147

148+
__disable_irq();
148149
stm32_flash_unlock();
149150
if (HAL_FLASHEx_Erase(&eraseInit, &sector_errors) != HAL_OK) {
150151
ret = -1;
151152
}
152153

153154
stm32_flash_lock();
155+
__enable_irq();
154156
return ret;
155157
}
156158

@@ -174,6 +176,7 @@ static int stm32_flash_program(uint32_t address, void* data, uint32_t len)
174176
uint32_t end_addr = address + len;
175177

176178
int ret = 0;
179+
__disable_irq();
177180
stm32_flash_unlock();
178181
while (address < end_addr) {
179182
if (_FLASH_PROGRAM(address, p_data) != HAL_OK) {
@@ -186,6 +189,7 @@ static int stm32_flash_program(uint32_t address, void* data, uint32_t len)
186189
}
187190

188191
stm32_flash_lock();
192+
__enable_irq();
189193
return ret;
190194
}
191195

0 commit comments

Comments
 (0)