STM32 G4 HAL库 POR/PDR/BOR、PVD;实现掉电保存数据和掉电复位
STM32 G4 HAL库 POR/PDR/BOR、PVD;实现掉电保存数据和掉电复位
没啥好说的直接上代码首先是BOR(欠压复位)
/* BOR欠压复位配置函数*/
void BOR_Config(void)
{FLASH_OBProgramInitTypeDef sConfigBOR = {0};/* 解锁FLAS,解锁OB */HAL_FLASH_Unlock();HAL_FLASH_OB_Unlock();/* 获取当前Option Byte配置 */HAL_FLASHEx_OBGetConfig(&sConfigBOR);if ((sConfigBOR.USERConfig & 0x700) != OB_BOR_LEVEL_4) //检查掉电复位电平是否正确{sConfigBOR.OptionType = OPTIONBYTE_USER;sConfigBOR.USERType = OB_USER_BOR_LEV;sConfigBOR.USERConfig = OB_BOR_LEVEL_4; //设置掉电复位电平HAL_FLASHEx_OBProgram(&sConfigBOR);/* 开始对选项字节进行编程 */HAL_FLASH_OB_Launch();}/* 锁定Flash,锁定OB */HAL_FLASH_OB_Lock();HAL_FLASH_Lock();}
如果只有一个芯片要改的话起始还可以使用STM32CubeProgrammer修改,因为BOR实际上是Option Bytes 选项字节;

PVD可编程电源检测器
/* PVD可编程电源检测器初始化配置函数*/
void PVD_Config(void)
{/* 配置PWR时钟 */__HAL_RCC_PWR_CLK_ENABLE();/* 配置中断优先级,使能PVD中断 */HAL_NVIC_SetPriority(PVD_PVM_IRQn, 0, 0);HAL_NVIC_EnableIRQ(PVD_PVM_IRQn);/* 设置PVD电平,设置中断类型:低于设置电平产生上升沿,高于设置电平产生下降沿 */PWR_PVDTypeDef sConfigPVD;sConfigPVD.PVDLevel = PWR_PVDLEVEL_6; // LEVEL_0 - 2.0VsConfigPVD.Mode = PWR_PVD_MODE_IT_RISING_FALLING; //电源欠压,恢复均产生中断if (HAL_PWR_ConfigPVD(&sConfigPVD) != HAL_OK){Error_Handler();}/* 使能PVD */HAL_PWR_EnablePVD();
}/* PVD可编程电源检测器中断回调函数*/
void HAL_PWR_PVDCallback(void)
{PWR_PVDTypeDef sConfigPVD;if(__HAL_PWR_GET_FLAG(PWR_FLAG_PVDO)) //判断是 欠压 OR 电压恢复{ /* 配置判断 电源恢复的参考电平 */sConfigPVD.PVDLevel = PWR_PVDLEVEL_6; //LEVEL_6 - 2.9VsConfigPVD.Mode = PWR_PVD_MODE_IT_RISING_FALLING;HAL_PWR_ConfigPVD(&sConfigPVD);/* 当VDD低于设定阈值(欠压) 时执行的代码, */}else{/* 配置 判断电源欠压的参考电平 */sConfigPVD.PVDLevel = PWR_PVDLEVEL_0; //LEVEL_0 - 2.0VsConfigPVD.Mode = PWR_PVD_MODE_IT_RISING_FALLING;HAL_PWR_ConfigPVD(&sConfigPVD);/* 当VDD高于设定阈值(电源恢复)时执行的代码 */}
}
查了资料好像PDR/POR对应的VPDR/VPOR不能修改,有知道的小伙伴可以评论交流一下。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
