diff --git a/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h b/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h index 9f2b1af..c8018f1 100644 --- a/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h +++ b/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h @@ -12,17 +12,21 @@ #include -#define PRODUCT_MODEL "DLD110S" -#define FIRMWARE_VER "4.30" -#define HARDWARE_VER "4.01" -#define FIRMWARE_VER_MAIN 4 -#define FIRMWARE_VER_SUB 30 -#define HARDWARE_VER_MAIN 4 -#define HARDWARE_VER_SUB 1 +/********************************************************************* + * GLOBAL TYPEDEFS + */ -/* 功能模式? (direction_mode ?4?, 协议保留; 新算法不再消?) */ -#define FUNCTION_A 0x01 // 二次判断 (已废?) -#define FUNCTION_B 0x02 // 二次判断增强条件判断 (已废?) +#define PRODUCT_MODEL "DLD154Pro" +#define FIRMWARE_VER "4.01" +#define HARDWARE_VER "1.00" +#define FIRMWARE_VER_MAIN 4 +#define FIRMWARE_VER_SUB 1 +#define HARDWARE_VER_MAIN 1 +#define HARDWARE_VER_SUB 0 + +/* 功能模式�? (direction_mode �?4�?, 协议保留; 新算法不再消�?) */ +#define FUNCTION_A 0x01 // 二次判断 (已废�?) +#define FUNCTION_B 0x02 // 二次判断增强条件判断 (已废�?) #define FUNCTION_C 0x04 // #define FUNCTION_D 0x08 // @@ -38,9 +42,9 @@ extern uint8_t g_loop_power_up_state; extern uint8_t g_function_mode; -/* 新算法状? (DLD154V4B 移植) */ -extern uint8_t g_loop_stable; // 稳定期结束标? (0=收敛?, 1=稳定) -extern uint8_t g_env_activity; // 环境活跃? (BLE condition 字段来源) +/* 新算法状�? (DLD154V4B 移植) */ +extern uint8_t g_loop_stable; // 稳定期结束标�? (0=收敛�?, 1=稳定) +extern uint8_t g_env_activity; // 环境活跃�? (BLE condition 字段来源) uint32_t mstick(void); diff --git a/BLE/DLD154Pro_Peripheral_28K/APP/peripheral.c b/BLE/DLD154Pro_Peripheral_28K/APP/peripheral.c index a2171be..d30440f 100644 --- a/BLE/DLD154Pro_Peripheral_28K/APP/peripheral.c +++ b/BLE/DLD154Pro_Peripheral_28K/APP/peripheral.c @@ -102,7 +102,7 @@ static uint8_t scanRspData[] = { // 'r', // 'a', // 'l', - 'D','L','D','1','1','0','S', + 'D','L','D','1','5','4','P', // connection interval range 0x05, // length of this data GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE, @@ -136,7 +136,7 @@ static uint8_t advertData[] = { }; // GAP GATT Attributes -static uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "DLD110S";// "Simple Peripheral"; +static uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "DLD154Pro";// "Simple Peripheral"; // Connection item list static peripheralConnItem_t peripheralConnList; diff --git a/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c b/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c index fcd2ae3..d1bf174 100644 --- a/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c +++ b/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c @@ -3,7 +3,7 @@ * Author : WCH / wangfq * Version : V2.0 (algorithm ported from DLD154V4B) * Date : 2026/07/18 - * Description : DLD110SV4 单线圈蓝牙车检器 主函数 + * Description : DLD154Pro 单线圈蓝牙车检器 主函数 * * 算法说明 (移植自 DLD154V4B TaskLoop V2.0, M1H 精简系): * - 自适应测量窗: LPCNT = MEASUREMENT_BASE / Xn, 测量窗时长与线圈频率无关 @@ -31,25 +31,43 @@ uint8_t g_flag_bt_state = 0; // 0 蓝牙没有连接,1 有蓝牙连接 -uint8_t g_flag_output = 0; -uint32_t g_xn_counter = 0; uint8_t g_function_mode = 0; uint32_t g_sys_freq = 0; +/*=========================================================================== + * IO 宏定义 -- DLD154Pro 硬件资源 + * + * PA8 : RLY1 存在继电器 (单刀双掷, 低电平有效) + * PB22 : LEDA 绿色指示灯 (有车亮/无车灭, 低电平有效) + * PB23 : LEDB 红色指示灯 (呼吸灯, 低电平有效) + * PA12 : FLEVEL 线圈调频 (一级, 0=33nF, 1=0nF) + * PA14 : UART0_Tx RS485发送 (协议待定) + * PA15 : UART0_Rx RS485接收 (协议待定) + * PA13 : UART0_RE RS485方向控制 (协议待定) + * PB10 : IN_1 光耦输入 (逻辑待定) + *===========================================================================*/ #define RLY1_ON (R32_PA_OUT |= BV(8)) #define RLY1_OFF (R32_PA_OUT &= ~BV(8)) -#define RLY2_ON (R32_PB_OUT |= BV(23)) -#define RLY2_OFF (R32_PB_OUT &= ~BV(23)) + #define LEDA_ON (R32_PB_OUT &= ~BV(22)) #define LEDA_OFF (R32_PB_OUT |= BV(22)) #define LEDA_ON_OFF() (GPIOB_ReadPortPin(GPIO_Pin_22) ? GPIOB_ResetBits(GPIO_Pin_22) : GPIOB_SetBits(GPIO_Pin_22)) -#define FLEVEL_H_LOW (R32_PA_OUT &= ~BV(12)) -#define FLEVEL_H_HIGH (R32_PA_OUT |= BV(12)) -#define FLEVEL_L_LOW (R32_PA_OUT &= ~BV(13)) -#define FLEVEL_L_HIGH (R32_PA_OUT |= BV(13)) -#define KEY_SA1 (GPIOA_ReadPortPin(GPIO_Pin_14)) -#define KEY_SA2 (GPIOA_ReadPortPin(GPIO_Pin_15)) +#define LEDB_ON (R32_PB_OUT &= ~BV(23)) +#define LEDB_OFF (R32_PB_OUT |= BV(23)) + +#define FLEVEL_LOW (R32_PA_OUT &= ~BV(12)) +#define FLEVEL_HIGH (R32_PA_OUT |= BV(12)) + +/* RS485 预留 (协议待定) */ +#define RS485_TX_PIN GPIO_Pin_14 +#define RS485_RX_PIN GPIO_Pin_15 +#define RS485_RE_PIN GPIO_Pin_13 +#define RS485_RE_TX (GPIOA_SetBits(RS485_RE_PIN)) // RE=1 发送模式 +#define RS485_RE_RX (GPIOA_ResetBits(RS485_RE_PIN)) // RE=0 接收模式 + +/* 光耦输入预留 (逻辑待定) */ +#define OPT_IN1 (GPIOB_ReadPortPin(GPIO_Pin_10)) const uint8_t MAX_Store_Size = 80; uint8_t g_loop_power_up_state = 0; // 开机启动时线圈是否连接 @@ -260,40 +278,6 @@ void factory_dev(void){ } -void poll_sens_key(void) -{ - static uint8_t _last_sens = 3; - - #if DEBUG - g_freq_sens = 2; // 默认最高灵敏度 - #else - if(KEY_SA1){ - if(KEY_SA2){ - g_freq_sens = 0; - } - else { - g_freq_sens = 2; - } - } - else{ - if (KEY_SA2) { - g_freq_sens = 1; - } - } - #endif - - if(_last_sens == 3){ - _last_sens = g_freq_sens; - } - - if(_last_sens != g_freq_sens){ - /* 灵敏度阈值每周期由 g_loop_sens_list 实时计算, 无需重载 */ - _last_sens = g_freq_sens; - } - -} - - void para_store_init(void) { uint8_t *rBuf = (uint8_t *)malloc(MAX_Store_Size); @@ -309,8 +293,6 @@ void para_store_init(void) memcpy(&g_loop_cng_unit, &rBuf[4], sizeof(g_loop_cng_unit)); memcpy(&g_loop_sens_list, &rBuf[Addr_Loop_Sens_List_Offset], sizeof(g_loop_sens_list)); - poll_sens_key(); - g_loop_out_delay = g_loop_cng_unit.delay_time * 2; // 定时器以 50ms 为单位, 延时以100ms为单位 g_hold_time = g_loop_cng_unit.exist_mode * 20 * 5; //50ms/per, period: 5s g_safe_max_cnt = g_loop_cng_unit.loopSafe_Timeout * 10 * (1000 / 50); @@ -321,29 +303,11 @@ void para_store_init(void) g_freq_level = 0; #endif - switch(g_freq_level) - { - case 0: { - // 高频 - FLEVEL_H_LOW; FLEVEL_L_LOW; - } break; - case 1: { - // 中高 - FLEVEL_H_LOW; FLEVEL_L_HIGH; - } break; - case 2: { - // 中低 - FLEVEL_H_HIGH; FLEVEL_L_LOW; - } break; - case 3: { - // 低频 - FLEVEL_H_HIGH; FLEVEL_L_HIGH; - } break; - default:{ - // 默认低频 - g_freq_level = 3; - FLEVEL_H_HIGH; FLEVEL_L_HIGH; - } break; + // DLD154Pro: 一级调频, 0=33nF(低频), 1=0nF(高频) + if (g_freq_level == 0) { + FLEVEL_LOW; + } else { + FLEVEL_HIGH; } free(rBuf); } @@ -381,36 +345,33 @@ void tm_init(void){ void gpio_uart_init(void) { - /* 配置串口0:先配置IO口模式,再配置串口 */ - #ifdef DEBUG - GPIOPinRemap(ENABLE, RB_PIN_UART0); + /*--- RS485 通信 (PA14=TX, PA15=RX, PA13=RE) ---*/ + /* 协议待定, 仅初始化引脚, 暂不配置 UART0 */ GPIOA_SetBits(GPIO_Pin_14); - GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平 + GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // RS485 TX + GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU); // RS485 RX + GPIOA_SetBits(GPIO_Pin_13); + GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // RS485 RE (默认接收模式) - UART0_BaudRateCfg(230400); //115200 - R8_UART0_FCR = (2 << 6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节 - R8_UART0_LCR = RB_LCR_WORD_SZ; - R8_UART0_IER = RB_IER_TXD_EN; - R8_UART0_DIV = 1; + /*--- 光耦输入 (PB10=IN_1) ---*/ + /* 逻辑待定, 仅初始化引脚为输入上拉 */ + GPIOB_ModeCfg(GPIO_Pin_10, GPIO_ModeIN_PU); - GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU); // 拨动开关,调节灵敏度 - #else - - GPIOA_ModeCfg(GPIO_Pin_15|GPIO_Pin_14, GPIO_ModeIN_PU); // 拨动开关,调节灵敏度 - - #endif - - - GPIOA_SetBits(GPIO_Pin_12|GPIO_Pin_13); - GPIOA_ModeCfg(GPIO_Pin_12|GPIO_Pin_13, GPIO_ModeOut_PP_5mA); - FLEVEL_H_LOW; FLEVEL_L_LOW; + /*--- 线圈调频 (PA12=FLEVEL, 一级) ---*/ + GPIOA_SetBits(GPIO_Pin_12); + GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); + FLEVEL_LOW; // 默认接入 33nF + /*--- 继电器 (PA8=RLY1) ---*/ GPIOA_SetBits(GPIO_Pin_8); GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA); - GPIOB_SetBits(GPIO_Pin_22|GPIO_Pin_23); - GPIOB_ModeCfg(GPIO_Pin_22|GPIO_Pin_23, GPIO_ModeOut_PP_5mA); - RLY1_OFF; RLY2_OFF; LEDA_OFF; + RLY1_OFF; + /*--- 指示灯 (PB22=LEDA绿, PB23=LEDB红, 低电平有效) ---*/ + GPIOB_SetBits(GPIO_Pin_22 | GPIO_Pin_23); + GPIOB_ModeCfg(GPIO_Pin_22 | GPIO_Pin_23, GPIO_ModeOut_PP_5mA); + LEDA_OFF; + LEDB_OFF; } @@ -478,6 +439,8 @@ void INIT_VD(void) loop1_SensLevel = 2; Flt_Reg = ALFA_CAP1; //79 + g_freq_sens = 2; // DLD154Pro: 灵敏度默认最高, 小程序可调 + loop1_ORG_CNT = 0; loop1_ORG_SUM = 0; @@ -797,7 +760,6 @@ void cjq_srv(void){ g_loop_power_up_state = 1; // 表示连接了线圈 } vd1_task(); - poll_sens_key(); } }// end if loop1_LOOP_OK else{ @@ -811,9 +773,8 @@ void cjq_srv(void){ loop1_FLAG_PLUSE_IN = 0; // 线圈断开: 继电器释放 - RLY1_OFF; RLY2_OFF; + RLY1_OFF; g_loop_acs_info.relay1_state = 0; - g_loop_acs_info.relay2_state = 0; g_loop_acs_info.car_state = 0; if(g_loop_cut_last != loop1_FLAG_CUT){ @@ -847,9 +808,7 @@ void Main_Circulation() while(1) { TMOS_SystemProcess(); - #ifndef DEBUG poll_dbn_ble(); - #endif cjq_srv(); @@ -859,18 +818,6 @@ void Main_Circulation() g_dbn_ble_state_acs_enable.enable = 0; } } - - #ifdef DEBUG - if(g_flag_output){ - uint32_t tmp; - g_flag_output = 0; - tmp = (loop1_Xn) ? (g_sys_freq / loop1_Xn) : 0; - PRINT("Xn:%d, LPCNT:%d, edges:%d, CAPVD:%d, Origin:%d, VD:%d, freq:%d\n", - loop1_Xn, loop1_LPCNT, g_xn_counter, loop1_CAPVD, loop1_Origin, loop1_VD_FLAG, tmp); - - g_xn_counter = 0; - } - #endif } } @@ -931,10 +878,6 @@ void TMR0_IRQHandler(void) // TMR0 捕获中断 if(TMR0_GetITFlag(TMR0_3_IT_DATA_ACT)){ loop1_Xn = (uint16_t)TMR0_CAPGetData(); - #ifdef DEBUG - g_xn_counter++; - #endif - if(loop1_Xn == 0){ R8_TMR0_INT_FLAG |= 0xff; return; @@ -1010,20 +953,9 @@ __HIGH_CODE void TMR1_IRQHandler(void) { static uint16_t _counter1_init = 0; -#ifdef DEBUG - static uint16_t _cnt = 0; -#endif if(TMR1_GetITFlag(TMR0_3_IT_CYC_END)) { - #ifdef DEBUG - _cnt++; - if(_cnt >= 400){ - g_flag_output = 1; - _cnt = 0; - } - #endif - if(g_dbn_ble_state_acs_enable.enable && g_flag_bt_state){ g_loop_acs_info.report_counter++; } @@ -1126,9 +1058,8 @@ void TMR1_IRQHandler(void) { /* 有限存在超时: 释放继电器, 主循环全复位重建基线 */ loop1_FLAG_HOLD_TIMEOUT = 1; - RLY1_OFF; RLY2_OFF; + RLY1_OFF; g_loop_acs_info.relay1_state = 0; - g_loop_acs_info.relay2_state = 0; } } } @@ -1174,30 +1105,15 @@ void TMR1_IRQHandler(void) { RLY1_ON; g_loop_acs_info.relay1_state = 1; - RLY2_ON; - g_loop_acs_info.relay2_state = 1; } else { - RLY1_OFF; - g_loop_acs_info.relay1_state = 0; - RLY2_OFF; - g_loop_acs_info.relay2_state = 0; + RLY1_OFF; + g_loop_acs_info.relay1_state = 0; } } break; case 1: // 进入脉冲 { - if(loop1_VD_FLAG) // 继电器2存在信号 - { - RLY2_ON; - g_loop_acs_info.relay2_state = 1; - } - else - { - RLY2_OFF; - g_loop_acs_info.relay2_state = 0; - } - if(loop1_FLAG_PLUSE_IN) { RLY1_ON; @@ -1211,17 +1127,6 @@ void TMR1_IRQHandler(void) } break; case 2: // 离开脉冲 { - if(loop1_VD_FLAG) // 继电器2存在信号 - { - RLY2_ON; - g_loop_acs_info.relay2_state = 1; - } - else - { - RLY2_OFF; - g_loop_acs_info.relay2_state = 0; - } - if(loop1_FLAG_PLUSE) // 输出离开脉冲 { RLY1_ON; @@ -1234,15 +1139,16 @@ void TMR1_IRQHandler(void) } } break; default: { - if(loop1_VD_FLAG) // 继电器2存在信号 + // DLD154Pro 单继电器, 默认存在模式 + if(loop1_VD_FLAG) { - RLY2_ON; - g_loop_acs_info.relay2_state = 1; + RLY1_ON; + g_loop_acs_info.relay1_state = 1; } else { - RLY2_OFF; - g_loop_acs_info.relay2_state = 0; + RLY1_OFF; + g_loop_acs_info.relay1_state = 0; } } break; } diff --git a/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.launch b/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.launch index d72e15a..c2d7e5a 100644 --- a/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.launch +++ b/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.launch @@ -40,8 +40,8 @@ - - + + @@ -54,7 +54,7 @@ - + diff --git a/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.wvproj b/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.wvproj index 369b375..aeefa19 100644 --- a/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.wvproj +++ b/BLE/DLD154Pro_Peripheral_28K/DLD154Pro_Peripheral_28K.wvproj @@ -42,7 +42,7 @@ "name": "*.wvproj" } ], - "projectName": "DLD110S_Peripheral_28K", + "projectName": "DLD154Pro_Peripheral_28K", "architecture": "RISC-V", "projectType": "c" }, @@ -448,8 +448,8 @@ "showDebugOutputTimestamps": true }, "reserve": { - "PROGRAM_NAME": "obj/DLD110S_Peripheral_28K.elf", - "PROJECT_ATTR": "DLD110S_Peripheral_28K", + "PROGRAM_NAME": "obj/DLD154Pro_Peripheral_28K.elf", + "PROJECT_ATTR": "DLD154Pro_Peripheral_28K", "PROJECT_BUILD_CONFIG_AUTO_ATTR": true, "PROJECT_BUILD_CONFIG_ID_ATTR": "", "ATTR_BUILD_BEFORE_LAUNCH_ATTR": 2, diff --git a/BLE/HAL/include/LED.h b/BLE/HAL/include/LED.h index 78c2034..3df72e6 100644 --- a/BLE/HAL/include/LED.h +++ b/BLE/HAL/include/LED.h @@ -46,29 +46,34 @@ extern "C" { * TYPEDEFS */ -/* һLEDڼʾĽ,͵ƽLED */ +/* ����һ��LED���ڼ����ʾ����Ľ���,�͵�ƽLED�� */ -/* 1 - LED */ -#define LED1_BV BV(15) -#define LED2_BV +/* DLD154Pro 指示灯 + * LED1 = LEDA (PB22, 绿色, 有车亮/无车灭, 低电平有效) + * LED2 = LEDB (PB23, 红色, 呼吸灯, 低电平有效) + */ +#define LED1_BV BV(22) +#define LED2_BV BV(23) #define LED3_BV +#define LED4_BV #define LED1_OUT (R32_PB_OUT) -#define LED2_OUT 0 +#define LED2_OUT (R32_PB_OUT) #define LED3_OUT 0 #define LED4_OUT 0 #define LED1_DDR (R32_PB_DIR |= LED1_BV) -#define LED2_DDR 0 +#define LED2_DDR (R32_PB_DIR |= LED2_BV) #define LED3_DDR 0 +#define LED4_DDR 0 #define HAL_TURN_OFF_LED1() (LED1_OUT |= LED1_BV) -#define HAL_TURN_OFF_LED2() +#define HAL_TURN_OFF_LED2() (LED2_OUT |= LED2_BV) #define HAL_TURN_OFF_LED3() #define HAL_TURN_OFF_LED4() #define HAL_TURN_ON_LED1() (LED1_OUT &= (~LED1_BV)) -#define HAL_TURN_ON_LED2() +#define HAL_TURN_ON_LED2() (LED2_OUT &= (~LED2_BV)) #define HAL_TURN_ON_LED3() #define HAL_TURN_ON_LED4()