Files
AMI/firmware/README.md
T

3.8 KiB
Raw Blame History

AMI 主控固件

这是 AMI.HMI 配套的 STM32 HAL 固件。目标器件按 STM32G0B1CBT6(LQFP48,128 KB Flash) 生成;ST 的 G0B1 产品线没有 STM32G0B1C8T6,如果实物丝印为 STM32G0B1CCT6 或 STM32G0B1CET6,引脚及应用代码兼容,只需在 CubeMX 中切换具体料号后重新生成。

引脚与外设

封装脚 GPIO 功能
11 PA0 STATUS_LED1,500 ms 翻转一次(运行心跳)
12 PA1 STATUS_LED2,仪表/SDC 状态活动超时提示;两路择有效输入
13 PA2 USART2_TX → 屏幕 RX,9600 8N1
14 PA3 USART2_RX ← 屏幕 TX,9600 8N1
19 PB0 FDCAN2_RX,250 kbit/s,与 CAN1 解码功能相同
20 PB1 FDCAN2_TX,250 kbit/s,与 CAN1 任务发送功能相同
33 PA11 FDCAN1_RX,默认 500 kbit/s
34 PA12 FDCAN1_TX,默认 500 kbit/s

LED 默认按高电平点亮。如果硬件是低电平点亮,将 Core/Inc/ami_app.h 中 AMI_LED_ACTIVE_LEVEL 改为 GPIO_PIN_RESET。

CAN1 为 500 kbit/s、CAN2 为 250 kbit/s。FDCAN 时钟为 64 MHz,两路 ClockDivider=1,NominalPrescaler 分别为 8 / 16;TimeSeg1=13、TimeSeg2=2、SJW=1,采样点均为 87.5%。CAN1 使用根目录 AMI.dbc,CAN2 使用 AMI_CAN2_250k.dbc。MCU 不在两路之间转发原始 CAN 报文。

数据路径

  • FDCAN1、FDCAN2 使用相同的三条标准过滤器和一条扩展过滤器,接收 SDC 0x6A0..0x6A6 与 BMS 0x140 / 0x156 / 0x186040F3 / 0x186140F3。
  • SDC ADC 为低压电池电压;BMS 总压、偏置电流和最高有效实际温度按源协议解码。旧 0x180 / 0x181 / 0x280 不再接收。
  • 主循环通过 USART2 TX DMA 一次发送一条完整 TJC 指令,末尾为三个真实字节 FF FF FF。
  • 仅变化后的数值排队,字段轮转和 DMA 合并最新值,避免刷新饥饿;白色为有效数值,灰色为未知/失效,ADC 和 BMS 各自计时。
  • 每 5 秒重新同步全套显示状态,恢复晚启动或重连的屏幕;仍使用非阻塞 DMA 和最新值合并。
  • USART2 使用 Receive-to-Idle DMA;屏幕发来的 6 字节任务帧可拆包、粘包解析。
  • 合法任务帧进入 3 项有效容量的无锁小队列,再由主循环发到近期有通信的 CAN 口;两路都活跃时同时发送。

完整字节定义见 SDC_BMS协议.md。

构建

使用本机 STM32CubeCLT 1.19.0:

$env:PATH = 'D:\STM32CubeCLT_1.19.0\CMake\bin;D:\STM32CubeCLT_1.19.0\Ninja\bin;D:\STM32CubeCLT_1.19.0\GNU-tools-for-STM32\bin;' + $env:PATH
cmake --preset Release
cmake --build --preset Release --parallel

ELF 输出为 build/Release/AMI_Controller.elf。需要 BIN 时:

arm-none-eabi-objcopy -O binary build/Release/AMI_Controller.elf build/Release/AMI_Controller.bin

CubeMX 配置源为 AMI_Controller.ioc。重新生成时保留 USER CODE 区;ami_app.c/.h、ami_protocol.h 和根 CMakeLists.txt 为应用层文件,不要从工程中移除。

实物联调前确认

  1. 核对芯片完整丝印,确认是 CB/CC/CE 中的哪一个。
  2. 确认 CAN1/CAN2 收发器、终端电阻;CAN1 总线 500 kbit/s、CAN2 总线 250 kbit/s。
  3. 确认屏幕是 TTL 电平并与主控共地,主控 TX 接屏 RX、主控 RX 接屏 TX。
  4. 下载 AMI.HMI 后逐条验证仪表数值、16 路 debug 状态及 6 个任务按钮。
  5. 2026-10-03 已完成 v2.1 CAN1 500K 与 CAN2 250K 分别到 MCU / USART2 / COM4 / 官方 HMI 调试器的联调;物理屏幕、真实节点、两路同时接入和 LED 极性尚未实测。见 双 CAN 测试报告。

此前两路均为 500K 的 v2.0 历史证据仍保留。当前 v2.1 BIN 已烧录并完整回读比对通过,两路各六个任务确认和六个取消通过;CAN2 测试仅注入 BMS 数据,未将 SDC 改成 250K。