STM32 支持调整重启电压阈值,即 BOR。重启电压阈值指的是,如果电源电压低于此阈值,则 MCU 进入复位状态。有三个级别可以设置,level 1、level 2、level 3。以 STM32F412RE 为例,level 1 对应 2.13V、level 2 对应 2.44V、level 3 对应 2.75V。
此设置配置在 MCU 内部 FLASH 中的选项字中,地址为 0x1FFFC000:
我们可以通过 FLASH 选项字控制寄存器 FLASH_OPTCR 读取和设置 BOR 的值,STM32 库也提供了读取与设置的相关接口,代码如下:
FLASH_OBProgramInitTypeDef OBInit;
HAL_FLASHEx_OBGetConfig(&OBInit);
if (OBInit.BORLevel != OB_BOR_LEVEL3) {
OBInit.BORLevel = OB_BOR_LEVEL3;
HAL_FLASH_OB_Unlock();
HAL_FLASHEx_OBProgram(&OBInit);
HAL_FLASH_OB_Launch();
HAL_FLASH_OB_Lock();
}