請問有ch582M低壓監(jiān)測例程么
提供一個579的低壓監(jiān)控程序,可以參考一下:
這樣子設(shè)置之后不行,我電壓低于2.5V了,但是到不了這個中斷,我開啟低功耗模式的,這個有影響嗎
我們的例程默認開啟了低電壓和超低電壓檢測,此時處于超低電壓檢測,需要使用NMI_Handler這個中斷,如果沒有只開啟其中那種則使用如上圖你的配置即可。
我在低功耗進入的時候會讀取電池狀態(tài)寄存器,在電壓2.3V時,發(fā)現(xiàn)也沒有置1,是不是代表沒有處于低電壓
試過取消HAL_SLEEP后,低于2.5V后可以在WDT_IRQHandler中斷。但是HAL_SLEEP=1后,HMI和WDT中斷都不進入。由于我設(shè)備安裝的電池,所以需要低功耗模式,也可以檢測低于2.5V后報警功能,請問應(yīng)該怎么操作
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());
????/*?選擇高精度電壓監(jiān)控?*/
????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);
????}
????/*?選擇低功耗電壓監(jiān)控?*/
????//?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以下后,沒有跳轉(zhuǎn),并且第二次上電程序都無法運行了。需要重寫程序。