Skip to main content
LeventF16
Associate II
September 6, 2024
Solved

STM32L431 brown out.

  • September 6, 2024
  • 2 replies
  • 1064 views

Hello.

How can we enable brown out for this processor and the brown out voltage?

Thank you.

Best answer by Tesla DeLorean

Some mechanics along the lines of..

 // Read the option byte
 FLASH_OBProgramInitTypeDef OBInit;
 HAL_FLASHEx_OBGetConfig(&OBInit);

 // Check bitwise if the brownout level is not 3
 if ((OBInit.USERConfig & OB_BOR_LEVEL_3) != OB_BOR_LEVEL_3)
 {
 // Set the brownout level to 3
 OBInit.OptionType = OPTIONBYTE_USER;
 OBInit.USERType = OB_USER_BOR_LEV;
 OBInit.USERConfig |= OB_BOR_LEVEL_3;

 HAL_FLASH_Unlock();
 HAL_FLASH_OB_Unlock();
 HAL_FLASHEx_OBProgram(&OBInit);
 // This function needs to be called Unlocked Flash and OB state.
 HAL_FLASH_OB_Launch();
 HAL_FLASH_OB_Lock();
 HAL_FLASH_Lock();
 HAL_FLASH_OB_Launch();
 }

2 replies

Tesla DeLorean
Guru
September 6, 2024

Perhaps it's covered in the Reference Manual, or there are examples in the code trees of CubeL4 ?

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
Tesla DeLorean
Tesla DeLoreanBest answer
Guru
September 6, 2024

Some mechanics along the lines of..

 // Read the option byte
 FLASH_OBProgramInitTypeDef OBInit;
 HAL_FLASHEx_OBGetConfig(&OBInit);

 // Check bitwise if the brownout level is not 3
 if ((OBInit.USERConfig & OB_BOR_LEVEL_3) != OB_BOR_LEVEL_3)
 {
 // Set the brownout level to 3
 OBInit.OptionType = OPTIONBYTE_USER;
 OBInit.USERType = OB_USER_BOR_LEV;
 OBInit.USERConfig |= OB_BOR_LEVEL_3;

 HAL_FLASH_Unlock();
 HAL_FLASH_OB_Unlock();
 HAL_FLASHEx_OBProgram(&OBInit);
 // This function needs to be called Unlocked Flash and OB state.
 HAL_FLASH_OB_Launch();
 HAL_FLASH_OB_Lock();
 HAL_FLASH_Lock();
 HAL_FLASH_OB_Launch();
 }
Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
CGadg
Associate III
January 26, 2026

Is the option byte available in Cube IDE? I can't see it.

I've used the above code after initialisation and think it should be before initialisation, or better still in the option byte without a routine to change it.

TDK
Super User
September 6, 2024

You can adjust it in STM32CubeProgrammer along with other option bytes.

TDK_0-1725644023758.png

 

"If you feel a post has answered your question, please click ""Accept as Solution""."