feat(can): 反馈报文刷新率逐帧可配置并持久化

STATUS/CONFIG 反馈帧各自独立按 period_ms(1ms 节拍分频,0=停发)发送,
默认 STATUS 1kHz、CONFIG 250Hz,可运行时修改:

- 0x0400 扩展格式(DLC=4):[选择器 u16][值 u16],选择器 0x0000=节点 ID
  (仅单播),0x0100/0x0101=对应帧刷新周期;回 5B ACK,广播只应用不应答
- 0x0401 扩展格式(DLC=2):查询选择器对应值,回 [sel][val](4B);
  DLC<=1 及 SET DLC 1~2 保持旧格式行为完全不变
- 刷新率经 FlashEEPROM 独立 u16 记录(虚拟地址 0x08/0x09)持久化,
  不并入 6 参数 CRC 组,避免老设备升级后整组参数回退默认值
- save_system_config 追加从 RAM 副本回写两条记录,页满 format()
  重建后配置不丢失;read() 增加保留字节校验防 CRC 头部字误匹配
- CANFD_all_Send 拆分为 send_status_frame/send_config_frame,
  初始化失败上报路径直调 STATUS 帧不受分频影响

GATE_DRIVER_DRV8323 0/1 两种板型均编译通过
This commit is contained in:
cbb
2026-09-12 19:00:06 +08:00
parent 0d3bd9cbc6
commit 40fea328b0
6 changed files with 283 additions and 49 deletions
+1 -1
View File
@@ -56,7 +56,7 @@ int main(void) {
// 初始化失败:持续通过 CAN STATUS 帧上报 InitStatus 错误码
// (含电流检测配平超限/无采样帧),上位机无需调试串口即可识别故障模块
printf("初始化失败 InitStatus=0x%08X\r\n", init_error_flags);
CAN0_transmiter.CANFD_all_Send(); // STATUS 帧字节 32~35 携带错误位图
CAN0_transmiter.send_status_frame(); // STATUS 帧字节 32~35 携带错误位图
delay_1ms(100);
}
OTA_initial(); // OTA 初始化,A/B 分区处理