Skip to main content
Dthum.1
Associate II
May 4, 2023 5:15 AM UTC
Solved

CFGBSY bit of FLASH SR register is SR is set it is not reset again in stm32g0b1cet6

Hi everyone,

i am using the stm32g0b1cet6 controller. in which I am working with flash memory. I am using the FLASH_WaitForLastOperation function. In that function, one flash SR register's CFGBSY bit is not reset, and due to that all other flash write and erase processes it not working.

 

this issue is coming randomly.

 


_legacyfs_online_stmicro_images_0693W00000bjLttQAE.pngbefore calling FLASH_WaitForLastOperation function I am clearing error flags as shown below

 

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PROGERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGAERR);

 

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_SIZERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_MISERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_FASTERR);

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_RDERR);

 

can someone please provide some input ASAP.

 

 

 

 

 

 

Goutham RBest answer
Explorer
Jun 26, 2023 6:58 AM UTC

I have found a fix for CFGBSY not clearing issue.

Write some random data to an address inside the page that you are going to erase/write before unlocking the flash for writing.

 

 

 

 uint32_t PageError = 0;
 static FLASH_EraseInitTypeDef EraseInitStruct;

 EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
 EraseInitStruct.Banks = BANK;
 EraseInitStruct.Page = PAGE;
 EraseInitStruct.NbPages = 1;

 FLASH->SR = FLASH_SR_CLEAR;

 for (uint16_t rte = 0; rte < 10; rte++)
 {
 if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY) != 0x00U)
 {
 *(uint32_t*) (adr + 64) = 21323;
 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
 }
 if (HAL_FLASH_Unlock () == HAL_OK)
 {
 FLASH_WaitForLastOperation (100);
 HAL_FLASHEx_Erase (&EraseInitStruct, &PageError);
 if (PageError == 0xFFFFFFFF)
 {
 break;
 }
 }
 }
 HAL_FLASH_Lock ();

 

 

 

 
Replace "BANK" & "PAGE" with your own variables.
 

17 replies

Visitor II
Mar 7, 2026 6:07 PM UTC

I had this issue on STM32G070 and initially used solution from the topic. But since this is not reflected in errata I investigated it further. And... 

Make sure Your writes are aligned to 64bits / 2x 32bits. If You write odd number of 32bit words, CFGBSY stays on forever. After aligning writes to 8 bytes problem never came back.

waclawek.jan
Super User
Mar 8, 2026 8:55 PM UTC

Well, yes, but it's hardly surprising, as that's exactly what the manual says:

Clipboard01.png

JW