请问有ch582M低压监测例程么
提供一个579的低压监控程序,可以参考一下:
这样子设置之后不行,我电压低于2.5V了,但是到不了这个中断,我开启低功耗模式的,这个有影响吗
我们的例程默认开启了低电压和超低电压检测,此时处于超低电压检测,需要使用NMI_Handler这个中断,如果没有只开启其中那种则使用如上图你的配置即可。
我在低功耗进入的时候会读取电池状态寄存器,在电压2.3V时,发现也没有置1,是不是代表没有处于低电压
试过取消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();
}
新建了个工程,单独测试了下低电压检测。电压到2.5以下后,没有跳转,并且第二次上电程序都无法运行了。需要重写程序。