diff --git a/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c b/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c index c3f1b8b..295e655 100644 --- a/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c +++ b/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c @@ -220,6 +220,15 @@ void hlw8032_save(void) } } +/*==== 累计电量清零(蓝牙 ENCLR 命令):清 RAM 与 EEPROM ====*/ +void hlw8032_clear(void) +{ + s_total_pulses = 0; + s_saved_pulses = 0; + uint64_t v = 0; + eepromWriteData(HLW_EEP_ADDR, &v, sizeof(v)); +} + /*==== 1s 周期:每攒够约 0.1 kWh 写一次 EEPROM,限制擦写频率 ====*/ void hlw8032_tick(void) { diff --git a/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.h b/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.h index 65c504c..983e042 100644 --- a/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.h +++ b/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.h @@ -13,6 +13,7 @@ void hlw8032_init(void); /* UART5 void hlw8032_rx_byte(uint8_t b); /* UART5 中断逐字节喂入(uart.c 接收回调调用) */ void hlw8032_tick(void); /* 1s 周期:到阈值就把累计脉冲写 EEPROM */ void hlw8032_save(void); /* 立即写 EEPROM(断电预警/计划复位前调用) */ +void hlw8032_clear(void); /* 累计电量清零并落盘(蓝牙 ENCLR 命令) */ float hlw8032_get_energy_kwh(void); /* 累计电量 kWh(未收到帧前为 0) */ float hlw8032_get_voltage_v(void); /* 电压有效值 V(调试显示用) */ float hlw8032_get_current_a(void); /* 电流有效值 A */ diff --git a/V1.5/STM32F103_App1/HardWare/USER_CMD/user_cmd.c b/V1.5/STM32F103_App1/HardWare/USER_CMD/user_cmd.c index c1497fb..c3208d3 100644 --- a/V1.5/STM32F103_App1/HardWare/USER_CMD/user_cmd.c +++ b/V1.5/STM32F103_App1/HardWare/USER_CMD/user_cmd.c @@ -23,6 +23,7 @@ #include "reset_log.h" #include "feed_scale.h" #include "air780e.h" +#include "hlw8032.h" /* 本地命令字符串不区分大小写比较 */ static int cmd_is(const char *a, const char *b) @@ -97,6 +98,13 @@ void process_usart1_command(void) return; } + /* 累计电能清零(EEPROM 同步落盘,无需重启) */ + if (cmd_is(cmd, "ENCLR")) { + hlw8032_clear(); + log_warn("> BT: 累计电能已清零"); + return; + } + if (cmd_is(cmd, "RESET")) { log_warn("> USART1: 收到 RESET 命令,正在重启..."); reset_log_mark(RSN_CMD_RESET); @@ -163,7 +171,7 @@ void process_usart1_command(void) log_info("> BT: 当前日志等级 %s", lvs[(int)log_get_level()]); } else if (cmd_is(cmd, "HELP")) { - log_info("BT CMD: RESET, INFO, STATUS, R1ON/R1OFF~R4ON/R4OFF, ALLON, ALLOFF, OTA, RECOVERY, BLESET, SCALE, SCALE0, SCALE1, GPS, GPS0, GPS1, LOG, LOGTRACE, LOGDEBUG, LOGINFO, LOGWARN, LOGERROR, LOGFATAL, HELP"); + log_info("BT CMD: RESET, INFO, STATUS, R1ON/R1OFF~R4ON/R4OFF, ALLON, ALLOFF, OTA, RECOVERY, BLESET, SCALE, SCALE0, SCALE1, GPS, GPS0, GPS1, ENCLR, LOG, LOGTRACE, LOGDEBUG, LOGINFO, LOGWARN, LOGERROR, LOGFATAL, HELP"); } else { log_warn("> BT: 未知命令 %s", cmd); diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index 347dbfb..b445ad3 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -175,3 +175,4 @@ - 鏂數娑堟伅鍙戦佸姞鍥猴細pow:0 鏀圭瓑妯$粍鍥 OK锛垀1.5s/娆★紝鏈澶 3 娆★級+ OK 鍚庣暀 800ms 绌哄彛鏃堕棿锛 3 娆¢兘澶辫触涔熺収甯稿啓璁板綍澶嶄綅锛堜笉鍥犲彂閫佸け璐ヤ涪鏂數璁板綍锛 - 鍘绘帀鐢佃兘搴曟暟 1kWh 鏈哄埗锛堢敤鎴风‘璁ゅ钩鍙板彲姝e父鏄剧ず灏忔暟鍊硷級 +- 鏂板钃濈墮 ENCLR 鍛戒护锛氱疮璁$數鑳芥竻闆讹紙RAM+EEPROM 鍚屾锛屾棤闇閲嶅惎锛