diff --git a/BLE/DLD154Pro_Peripheral_28K/APP/rs485_700bs.c b/BLE/DLD154Pro_Peripheral_28K/APP/rs485_700bs.c index 4368dd6..e6638c6 100644 --- a/BLE/DLD154Pro_Peripheral_28K/APP/rs485_700bs.c +++ b/BLE/DLD154Pro_Peripheral_28K/APP/rs485_700bs.c @@ -13,6 +13,7 @@ #include "cmcng.h" #include "rs485_700bs.h" #include "storage.h" +#include "dbn_ble_srv.h" #include /*=========================================================================== @@ -86,6 +87,15 @@ static void rs485_send(const uint8_t *data, uint8_t len) * 命令处理 *===========================================================================*/ +/* 直接从原始测量值计算线圈频率 (Hz),不依赖 BLE 报告通道 */ +static uint32_t rs485_get_freq(void) +{ + uint32_t capvd = g_loop_acs_info.loop_capvd; // TMR0 捕获累加值 + if (capvd == 0 || loop1_LPCNT == 0) return 0; + /* freq = FREQ_SYS / (capvd / LPCNT) + 360 (补偿值) */ + return (uint32_t)((uint64_t)FREQ_SYS * loop1_LPCNT / capvd) + 360; +} + /* 0xFA — 查询有车状态 + 线圈好坏 */ static void handle_query_status(uint8_t addr) { @@ -100,7 +110,7 @@ static void handle_query_status(uint8_t addr) /* 0x1B — 查询线圈频率 */ static void handle_query_freq(uint8_t addr) { - uint32_t freq = g_loop_acs_info.frequent; // Hz + uint32_t freq = rs485_get_freq(); // Hz uint8_t buf[6]; buf[0] = RSP_FREQ; buf[1] = (uint8_t)((freq >> 16) & 0xFF); // Fre_1 (MSB) @@ -166,7 +176,7 @@ static uint8_t calc_freq_err(uint32_t freq) static void rs485_send_heartbeat(void) { extern uint8_t loop1_LOOP_OK; - uint32_t freq = g_loop_acs_info.frequent; + uint32_t freq = rs485_get_freq(); uint8_t st = g_rs485_id & 0x1F; if (g_loop_acs_info.car_state) st |= 0x80; // bit7=有车