Skip to main content
Dthum.1
Associate II
May 4, 2023
Solved

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

  • May 4, 2023
  • 11 replies
  • 7270 views

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.

 

 

 

 

 

 

Best answer by Goutham R

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.
 

11 replies

Visitor II
March 7, 2026

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
March 8, 2026

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

Clipboard01.png

JW