有ch582M低压监测例程么

请问有ch582M低压监测例程么

提供一个579的低压监控程序,可以参考一下:

3.png


image.png

这样子设置之后不行,我电压低于2.5V了,但是到不了这个中断,我开启低功耗模式的,这个有影响吗


我们的例程默认开启了低电压和超低电压检测,此时处于超低电压检测,需要使用NMI_Handler这个中断,如果没有只开启其中那种则使用如上图你的配置即可。


我在低功耗进入的时候会读取电池状态寄存器,在电压2.3V时,发现也没有置1,是不是代表没有处于低电压

image.png


试过取消HAL_SLEEP后,低于2.5V后可以在WDT_IRQHandler中断。但是HAL_SLEEP=1后,HMI和WDT中断都不进入。由于我设备安装的电池,所以需要低功耗模式,也可以检测低于2.5V后报警功能,请问应该怎么操作


HAL_SLEEP=1  无法识别低电压哦



在main一开始加     PowerMonitor(ENABLE, HALevel_2V5);然后写两个中断

__attribute__((section(".highcode")))
void HardFault_Handler( void )
{

  LOG_INFO("hardfault");

  LOG_INFO("MCAUSE:%#x",__get_MCAUSE());
  LOG_INFO("MEPC:%#x",__get_MEPC());
  LOG_INFO("MTVAL:%#x",__get_MTVAL());
  SYS_ResetExecute();
  CODE_UNREACHABLE;
}

__INTERRUPT
__HIGH_CODE
void NMI_Handler(void)
{
    FLASH_ROM_SW_RESET();

    PRINT("NMI\n");
    PRINT("MEPC: %#lx\n", __get_MEPC());
    PRINT("MCAUSE:%#lx\n", __get_MCAUSE());
    PRINT("MTVAL:%#lx\n", __get_MTVAL());

    /* 选择高精度电压监控 */
    while (1) {
        static uint32_t i = 0;
        if(R8_BAT_STATUS & RB_BAT_STAT_LOWER){
            i = 0;
        } else {
            i++;
            if(i > 100){
                break;
            }
        }
        DelayMs(1);
    }

    /* 选择低功耗电压监控 */
    // while (1){
    //     static uint32_t i = 0;
    //     if(R8_BAT_STATUS & RB_BAT_STAT_LOW){
    //         i = 0;
    //     } else {
    //         i++;
    //         if(i > 100){
    //             break;
    //         }
    //     }
    //     DelayMs(1);
    // }

    SYS_ResetExecute();
    __builtin_unreachable();
}


image.png新建了个工程,单独测试了下低电压检测。电压到2.5以下后,没有跳转,并且第二次上电程序都无法运行了。需要重写程序。


只有登录才能回复,可以选择微信账号登录