Files
DLD154Pro/DEVELOPMENT_LOG.md
T

2.5 KiB
Raw Blame History

DLD154Pro 开发日志

2026-07-24 — RS485 700BS 协议 & 四级灵敏度

RS485 700BS 从机协议 (Commit: ab469312d7a5d7)

协议概述

项目 说明
物理层 RS485 半双工, 9600 8N1, PA14=TX PA15=RX PA13=RE
帧格式 主机 3 字节 (STX ADDR XOR), 从机 3~9 字节变长
心跳 空闲 5s / 故障(线圈断开) 1s / 事件(car_state翻转)立即
命令 0xFA 查询状态, 0x1B 查询频率, 0x2C 复位线圈, 0x3D 查询DIP

踩坑记录

  1. UART0 API 不兼容 — CH592 SDK 中 UART0_GetITFlag() 是无参宏,UART0_ClearITFlag() 不存在。改用 switch(UART0_GetITFlag()) 标准模式。
  2. while(R8_UART0_TFC == 0) 死循环 — TX FIFO 空时 TFC==0 条件永真,主循环卡死,地感不工作。改为 != 0(等 FIFO 空)。
  3. rs485_init() 从未被调用gpio_uart_init() 只写了注释没调用,UART0/GPIO 未初始化。
  4. 频率为 0g_loop_acs_info.frequent 只在 BLE 报告路径 usart_packet_processing_acs_loop 中更新,BLE 断开时永不更新。
  5. 频率非实时 — 改用 g_loop_acs_info.loop_capvd 仍有问题:该值被 flag_change 门控冻结(上电/车辆进出时 flag_change=1→capvd 不更新)。最终改用 loop1_CAPVDvd1_task() 每次实时 IIR 滤波值)。

最终频率计算

freq = (uint64_t)FREQ_SYS * loop1_LPCNT / loop1_CAPVD + 360

直接从 TMR0 捕获值 + IIR 滤波值实时计算,不经过 BLE 通道,不受 flag_change 冻结影响。

四级灵敏度 (Commit: 4964e0d)

MAX_LOOP_SENS_AMOUNT: 3 → 4

档位 进入阈值 (sens_in) 离开阈值 (sens_out)
1 108 81
2 54 32
3 28 16
4 14 12

阈值 = Origin * sens_in / 65536(进入)、Origin * sens_out / 65536(离开)。


历史记录

BLE RS485 配置 (Commit: 441a3e6)

  • BLE 新增 RS485 地址/波特率读写特征值
  • 空闲关蓝牙超时机制
  • 功能码细分(区分读写操作)

呼吸灯 (Commit: f89457c)

  • PB23 PWM11 呼吸灯从 ~3.8s 加速至 ~1.9s 周期
  • ISP 烧录时需关闭外部复位 RB_CFG_RESET_EN=0(运行时 RO 不可改)

算法移植 (基线)

  • 移植 DLD154V4B V2.0 检测算法:IIR τ≈32ms, WINDOW_ORIGIN=5s, 斜率限幅 5%
  • TMR0 输入捕获测频, TMR1 5ms 定时状态机