【沁恒蓝牙开发】电压监控

文章目录

电压监控 可以独立的监控电压的功能,常用于

①电压过低导致内核等运行不正常

③电压过低导致Flash 擦写异常

等等

电压监控功能介绍

下图节选与CH59x的规格,除了基本的配置外,需要注意的是开启电压监控会增加功耗。

功耗是根据精度决定的,低精度的功耗低,高精度功耗高。

如果特别在意功耗可以分段配置,比如2.5v时使用低精度的,触发后,配置1.8V高精度的。

注:每个系列的功耗不一样,具体参考对应系列的规格书

代码配置

高精度

初始化:

c 复制代码
PowerMonitor(ENABLE,HALevel_2V5); //设置高精度触发
PFIC_EnableIRQ(NMI_IRQn);         //使能NMI中断
PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE|RB_SLP_BAT_WAKE, Long_Delay);

中断:

c 复制代码
__INTERRUPT
__HIGH_CODE
void NMI_Handler(void)
{
  DelayMs(5);
  PRINT("R8_BAT_STATUS=%x. \n",R8_BAT_STATUS);
  while(R8_BAT_STATUS&RB_BAT_STAT_LOWER) //等电压恢复
  {
    PRINT("wait...\n");
  }
  PRINT("recover...\n");
}

中断的效果是不断的在中断内等待电压恢复,因为电压不正常出中断也是没有意义的。

低精度

初始化:

c 复制代码
PowerMonitor(ENABLE,LPLevel_2V5); //使能低精度电压监控
PFIC_EnableIRQ(WDOG_BAT_IRQn);    //低精度使用此中断
PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE|RB_SLP_BAT_WAKE, Long_Delay);

中断:

c 复制代码
__INTERRUPT
__HIGH_CODE
void WDOG_BAT_IRQHandler(void)
{
  DelayMs(5);
  
  PRINT("R8_BAT_STATUS=%x. \n",R8_BAT_STATUS);
  while(R8_BAT_STATUS&RB_BAT_STAT_LOWER) //等电压恢复
  {
    PRINT("wait...\n");
  }
  PRINT("recover...\n");
}

常见问题

打印问题:

如果开启低功耗的时候无法打印,大概率是因为降低功耗配置为IO了,所以要再次初始化串口才可以,代码如下:

c 复制代码
__INTERRUPT
__HIGH_CODE
void NMI_Handler(void)  //或 void WDOG_BAT_IRQHandler(void)
{
  DelayMs(5);
  DebugInit();
  
  PRINT("R8_BAT_STATUS=%x. \n",R8_BAT_STATUS);
  while(R8_BAT_STATUS&RB_BAT_STAT_LOWER) //等电压恢复
  {
    PRINT("wait...\n");
  }
  PRINT("recover...\n");
}

蓝牙工程中配置后未生效

为了低功耗,使用的低功耗函数会默认关闭 电压监控,需要手动注释后才能正常开启电压监控功能,下图是注释后的。

相关推荐
梁朝辉1 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者2 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间3 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious3 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng7 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计8 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
KaifuZeng1 天前
通信与接口协议面试一、基本概念
嵌入式硬件·通信与接口协议
wuyk5551 天前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机
☆cwlulu1 天前
调试排查工具介绍(gdb、strace、Valgrind等)
开发语言·c++·嵌入式硬件·ubuntu
lzqrzpt1 天前
LED驱动电源选型标准与工程应用技术要点解析
python·单片机·嵌入式硬件·物联网