You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32L496基于STM32Cube IDE及HAL API实现欠压复位的技术问询

STM32L496 欠压复位(Brown-Out Reset)实现指南

首先明确:**欠压复位(BOR)是芯片内部硬件触发的自动复位机制,你提到的HAL_PWR_ConfigPVD等API属于电源电压检测(PVD)**功能——PVD通过中断/事件通知软件,由软件决定是否触发复位,二者是不同的实现路径。下面分点解答你的问题:

一、使用HAL API实现硬件欠压复位(BOR)

BOR通过配置芯片的**选项字节(Option Bytes)**生效,属于一次性配置(配置后重启永久生效,除非重新修改),不需要运行时持续调用API。

1. 所需API

  • HAL_FLASH_OB_Unlock():解锁选项字节区域
  • HAL_FLASH_Unlock():解锁FLASH编程权限
  • HAL_FLASHEx_OBProgram():编程选项字节配置BOR级别
  • HAL_FLASH_OB_Lock()/HAL_FLASH_Lock():重新锁定选项字节和FLASH
  • HAL_NVIC_SystemReset():重启芯片使配置生效

2. 代码示例

// 解锁选项字节与FLASH
HAL_FLASH_OB_Unlock();
HAL_FLASH_Unlock();

// 初始化选项字节配置结构体
FLASH_OBProgramInitTypeDef ob_config = {0};
ob_config.OptionType = OPTIONBYTE_USER;
ob_config.BORLevel = OB_BOR_LEVEL_2; // 选择2.2V阈值,可替换为其他LEVEL_x

// 编程选项字节
if (HAL_FLASHEx_OBProgram(&ob_config) != HAL_OK) {
    // 处理编程失败
    Error_Handler();
}

// 重新锁定
HAL_FLASH_Lock();
HAL_FLASH_OB_Lock();

// 重启芯片使BOR配置生效
HAL_NVIC_SystemReset();

二、你疑惑的PVD API说明

你提到的HAL_PWR_ConfigPVD等是PVD功能的API,PVD不是自动复位,而是通过中断/事件通知软件,由软件决定后续动作(比如触发软件复位):

  • HAL_PWR_ConfigPVD(&pvd_config):配置PVD的电压阈值和触发模式(上升沿/下降沿/电平触发)
  • HAL_PWR_EnablePVD():启用PVD检测
  • HAL_PWR_EnterSTOPMode(...):进入停止模式时,PVD可作为唤醒源,和复位无直接关联

PVD实现软件触发复位的示例

// 1. 配置PVD参数
PWR_PVDTypeDef pvd_config = {0};
pvd_config.PVDLevel = PWR_PVDLEVEL_1; // 对应约2.0V阈值
pvd_config.Mode = PWR_PVD_MODE_IT_RISING_FALLING; // 电压低于/恢复阈值时触发中断
HAL_PWR_ConfigPVD(&pvd_config);

// 2. 配置并启用PVD中断
HAL_NVIC_SetPriority(PVD_PVM_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(PVD_PVM_IRQn);

// 3. 启用PVD
HAL_PWR_EnablePVD();

然后在中断回调中触发复位:

// PVD中断服务函数
void PVD_PVM_IRQHandler(void)
{
    HAL_PWR_PVD_IRQHandler();
}

// PVD中断回调函数
void HAL_PWR_PVDCallback(void)
{
    // 检测到欠压,触发软件复位
    HAL_NVIC_SystemReset();
}

三、关键问题解答

1. 配置BOR需要用到哪个引脚?

BOR是芯片内部硬件电路直接监控VDD电源电压,不需要任何外部引脚,完全由内部逻辑实现。

2. 如何查看输入阈值?

  • BOR阈值:你提供的宏定义已明确对应关系:
    • OB_BOR_LEVEL_0 → ~1.7V
    • OB_BOR_LEVEL_1 → ~2.0V
    • OB_BOR_LEVEL_2 → ~2.2V
    • OB_BOR_LEVEL_3 → ~2.5V
    • OB_BOR_LEVEL_4 → ~2.8V
      具体数值以STM32L496官方 datasheet 为准。
  • PVD阈值:参考STM32L4参考手册,PWR_PVDLEVEL_x对应的电压和BOR级别大致对应,但需以手册参数为准。

3. 输入阈值与欠压复位模式对比

模式类型触发逻辑阈值配置方式核心动作
硬件BOR复位内部硬件自动检测VDD选项字节(OB_BOR_LEVEL_x)电压低于阈值时自动触发系统复位,无需软件参与
PVD软件复位触发中断通知软件PWR_PVDLEVEL_x软件在中断回调中主动触发复位,可先执行数据保存等操作

四、STM32Cube IDE图形化配置方法

如果不想写代码,可通过Cube IDE可视化配置:

  1. 打开STM32CubeMX工程,进入System Core -> Power,可配置PVD的级别和触发模式(用于软件复位场景)。
  2. 配置BOR:进入System Core -> Flash -> Option Bytes,找到BOR Level下拉菜单,选择对应阈值级别,生成代码后下载到芯片,重启即可生效。

内容的提问来源于stack exchange,提问作者Anil kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:41:26