2026-07-20 02:36:56 +08:00
|
|
|
|
/**
|
2026-05-10 17:28:14 +08:00
|
|
|
|
* @file config.h
|
|
|
|
|
|
* @brief 应用级集中配置项定义。
|
|
|
|
|
|
* @note 用于统一管理当前项目中可调的外设、时序、通信与算法常量。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef SYS_CONFIG_H
|
|
|
|
|
|
#define SYS_CONFIG_H
|
|
|
|
|
|
|
2026-07-06 19:13:56 +08:00
|
|
|
|
#include <stdint.h>
|
2026-07-16 23:00:52 +08:00
|
|
|
|
#include <stddef.h>
|
2026-07-06 19:13:56 +08:00
|
|
|
|
#include "gd32e50x.h"
|
|
|
|
|
|
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/* ============================================================
|
|
|
|
|
|
* 功能开关(调试/特性总闸 — 改这里即可开关,改完重编)
|
|
|
|
|
|
* 0/false=关,1/true=开。需要 #if 的保留 #define。
|
|
|
|
|
|
* ============================================================ */
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 5s 诊断任务是否输出全量 UART 摘要(task_runner)。
|
|
|
|
|
|
* @note 任务本身始终 5s 调度:0=默认仅状态变化/错误增量;1=周期打印 ADC/CAN/ECAT 全量行。
|
|
|
|
|
|
* 现场抓吞吐/温度时改回 1 后重编即可。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define CONFIG_UART_TEMP_PERIODIC_PRINT 0
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 全量摘要详细级别(仅 PERIODIC_PRINT=1 时生效;0=ADC 精简 1=含 CAN 统计)。
|
|
|
|
|
|
* @note 默认 0;需要 can_tx/rx/drop 等列时与 PERIODIC_PRINT 一并打开。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define CONFIG_UART_DIAG_LEVEL 0
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief SPI 调试反馈 0xC4:GD32 ADC 温度/VDDA/VIN 1Hz 主动推送。
|
|
|
|
|
|
* @note 调试用;0=不注册 handler、不推送。与 ESP32 GD32_ADC_FEEDBACK_ENABLE 配对。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define CONFIG_SPI_ADC_FEEDBACK_ENABLE 1
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 多电机状态表 0xC5:CAN STATUS 帧缓存 + 250ms 主动推送。
|
|
|
|
|
|
* @note 0=不注册 handler、不推送、不解析 STATUS 帧。与 ESP32 端 motor_state_task 配对。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define CONFIG_MOTOR_STATE_ENABLE 1
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 多电机版本 0xC6:CAN 版本应答帧(0x00FF)缓存 + 事件驱动推送。
|
|
|
|
|
|
* @note 0=不识别版本帧、不推送。与 ESP32 端 motor_version 缓存配对。
|
|
|
|
|
|
* 版本为按需查询的低频数据,独立于 0xC5 周期推送。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define CONFIG_MOTOR_VERSION_ENABLE 1
|
|
|
|
|
|
/** @brief 最大电机节点数 (node ID 1-9)。 */
|
|
|
|
|
|
constexpr uint8_t CONFIG_MOTOR_MAX_NODES = 9U;
|
|
|
|
|
|
/** @brief 电机离线判定超时 (ms)。超过此时间未收到 STATUS 帧则标记 offline。 */
|
|
|
|
|
|
constexpr uint16_t CONFIG_MOTOR_OFFLINE_MS = 3000U;
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/** @brief SPI 命令逐帧日志(#if)。 */
|
|
|
|
|
|
#define CONFIG_SPI_APP_LOG_ENABLE 0
|
|
|
|
|
|
/** @brief CAN_SEND 成功帧详细日志(#if)。 */
|
|
|
|
|
|
#define CONFIG_SPI_CAN_SEND_VERBOSE_LOG 0
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/** @brief CAN-FD BRS 使能(canfd.cpp #if)。
|
|
|
|
|
|
* 关闭 BRS: 数据段用仲裁段同速率,牢牢性更高。
|
|
|
|
|
|
* 电机 BOOT 无法正确接收 BRS 高速段→nonce(16B FD+BRS)被拒绝→握手失败。 */
|
|
|
|
|
|
#define CONFIG_CAN_FD_BRS_ENABLE 0U
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/** @brief 启动时总线探测帧;正常固件关。 */
|
|
|
|
|
|
#define CONFIG_CAN_STARTUP_BUS_TEST_ENABLE 0
|
|
|
|
|
|
/** @brief 启动时内部回环自检;正常固件关。 */
|
|
|
|
|
|
#define CONFIG_CAN_STARTUP_LOOPBACK_TEST_ENABLE 0
|
|
|
|
|
|
/** @brief CAN 启动详细诊断 dump;默认关。 */
|
|
|
|
|
|
#define CONFIG_CAN_STARTUP_DIAG_VERBOSE 0
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 周期测试发送任务(taskCanTxSend,发 0x18FF5000 64B FD 帧)。
|
|
|
|
|
|
* @note 调试用:该 PGN 无业务接收节点 ACK。auto_retrans=ENABLE 时无 ACK 被
|
|
|
|
|
|
* 无限重发吞进 TEC(TEC 一直涨);DISABLE 时单发失败即 MTEn→error_count++。
|
|
|
|
|
|
* 电机拓扑下无对端应答,默认关以消除持续错误帧。需要回放测试波形时打开。
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define CONFIG_CAN_PERIODIC_TEST_TX_ENABLE 0
|
|
|
|
|
|
/** @brief CAN0/1/2 通道使能。CH1/CH2 未接设备,关闭避免持续 CAN 错误 + 占 SPI 带宽。 */
|
2026-07-20 02:36:56 +08:00
|
|
|
|
constexpr bool CONFIG_CAN_CH0_ENABLE = true;
|
2026-07-30 02:11:49 +08:00
|
|
|
|
constexpr bool CONFIG_CAN_CH1_ENABLE = true;
|
|
|
|
|
|
constexpr bool CONFIG_CAN_CH2_ENABLE = true;
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/** @brief 主循环 WFI(main.cpp #if)。 */
|
|
|
|
|
|
#define CONFIG_MAIN_LOOP_WFI_ENABLE 0
|
|
|
|
|
|
/** @brief EtherCAT SYNC0 同步模式(#if)。 */
|
|
|
|
|
|
#define CONFIG_ETHERCAT_SYNC_MODE 0
|
2026-07-27 01:49:18 +08:00
|
|
|
|
/** @brief MOTOR-OTA INFO 级日志(握手/进度/流控 chatter);错误与关键事件恒保留。 */
|
|
|
|
|
|
#define CONFIG_OTA_RELAY_LOG_ENABLE 1
|
|
|
|
|
|
/** @brief CAN 初始化/自检 INFO 级日志;初始化失败与硬件错误恒保留。 */
|
|
|
|
|
|
#define CONFIG_CAN_INIT_LOG_ENABLE 1
|
|
|
|
|
|
/** @brief EtherCAT/EXMC 初始化 INFO 级日志;FAIL 恒保留。 */
|
|
|
|
|
|
#define CONFIG_ECAT_INIT_LOG_ENABLE 1
|
|
|
|
|
|
/** @brief 启动横幅与 main 进度打印。 */
|
|
|
|
|
|
#define CONFIG_APP_BANNER_LOG_ENABLE 1
|
|
|
|
|
|
|
|
|
|
|
|
/* ============================================================
|
|
|
|
|
|
* 日志分级宏:*_LOGI=INFO 级,由上方模块开关编译期裁剪,
|
|
|
|
|
|
* 格式串随之被链接器回收;LOG_ERR=错误/关键事件,恒保留。
|
|
|
|
|
|
* 使用文件需自行可见 printf 声明(<cstdio>)。
|
|
|
|
|
|
* ============================================================ */
|
|
|
|
|
|
#define LOG_ERR(...) printf(__VA_ARGS__)
|
|
|
|
|
|
#if CONFIG_OTA_RELAY_LOG_ENABLE
|
|
|
|
|
|
#define OTA_LOGI(...) printf(__VA_ARGS__)
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define OTA_LOGI(...) ((void)0)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if CONFIG_CAN_INIT_LOG_ENABLE
|
|
|
|
|
|
#define CAN_LOGI(...) printf(__VA_ARGS__)
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define CAN_LOGI(...) ((void)0)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if CONFIG_ECAT_INIT_LOG_ENABLE
|
|
|
|
|
|
#define ECAT_LOGI(...) printf(__VA_ARGS__)
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define ECAT_LOGI(...) ((void)0)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if CONFIG_APP_BANNER_LOG_ENABLE
|
|
|
|
|
|
#define APP_LOGI(...) printf(__VA_ARGS__)
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define APP_LOGI(...) ((void)0)
|
|
|
|
|
|
#endif
|
2026-07-20 02:36:56 +08:00
|
|
|
|
|
2026-07-06 19:13:56 +08:00
|
|
|
|
/* ============================================================
|
|
|
|
|
|
* APP 固件版本号
|
|
|
|
|
|
* ============================================================ */
|
|
|
|
|
|
constexpr uint32_t APP_FW_VERSION_MAJOR = 1U;
|
2026-07-27 01:49:18 +08:00
|
|
|
|
constexpr uint32_t APP_FW_VERSION_MINOR = 5U;
|
2026-08-01 04:15:10 +08:00
|
|
|
|
constexpr uint32_t APP_FW_VERSION_PATCH = 5U; /* 1.5.5:电机 OTA relay SPI 断流超时(0x26) + 0x103 心跳不再为无包在途的 kTransfer 续命 */
|
2026-07-15 02:49:37 +08:00
|
|
|
|
constexpr uint32_t APP_FW_VERSION_BUILD = 0U;
|
2026-07-06 19:13:56 +08:00
|
|
|
|
|
2026-05-10 17:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief USART0 默认波特率。 */
|
2026-07-26 20:39:59 +08:00
|
|
|
|
constexpr uint32_t CONFIG_USART0_BAUDRATE = 3000000U; /* 3M:诊断打印高速输出,printf 阻塞极小、不拖慢 relay */
|
2026-05-10 17:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief ADC 外设实例。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ADC_INSTANCE = ADC0;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief ADC 外部 VIN 检测通道号(原理图:PA6 -> VIN_ADC)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ADC_VIN_CHANNEL = ADC_CHANNEL_6;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief ADC 内部温度通道号。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ADC_TEMP_CHANNEL = ADC_CHANNEL_16;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief ADC 内部参考电压通道号。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ADC_VREFINT_CHANNEL = ADC_CHANNEL_17;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief ADC 满量程计数值。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr float CONFIG_ADC_MAX_VALUE = 4095.0f;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 内部参考电压典型值,单位 V。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr float CONFIG_ADC_VREFINT_TYPICAL_VOLTAGE = 1.20f;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 温度传感器 25℃ 对应电压,单位 V。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr float CONFIG_ADC_TEMP_V25 = 1.43f;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 温度传感器平均斜率,单位 V/℃。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr float CONFIG_ADC_TEMP_AVG_SLOPE = 0.0043f;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief ADC 上电后稳定等待时间,单位 ms。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ADC_STABILIZE_DELAY_MS = 2U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief ADC 中值滤波窗口长度(最终样本数为该值 + 1)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ADC_FILTER_SIZE = 6U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief CAN 状态报文标准帧 ID。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_STATUS_ID = 0x321U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief ESP32 请求 DCU_APP 进入 Bootloader OTA 窗口的扩展帧 ID(备用 CAN 入口)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_OTA_BOOT_REQ_ID = 0x00000320U;
|
|
|
|
|
|
/** @brief 进入 Bootloader OTA 请求魔术字节 0~3。 */
|
|
|
|
|
|
constexpr uint8_t CONFIG_CAN_OTA_BOOT_MAGIC0 = 0x4FU;
|
|
|
|
|
|
constexpr uint8_t CONFIG_CAN_OTA_BOOT_MAGIC1 = 0x54U;
|
|
|
|
|
|
constexpr uint8_t CONFIG_CAN_OTA_BOOT_MAGIC2 = 0x41U;
|
|
|
|
|
|
constexpr uint8_t CONFIG_CAN_OTA_BOOT_MAGIC3 = 0x21U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief ESP32 在 APP 运行期通过 SPI 发送的进入 Bootloader OTA 命令。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint8_t CONFIG_SPI_APP_OTA_BOOT_CMD = 0xB0U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief SPI 进入 Bootloader OTA 命令确认状态:成功。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint8_t CONFIG_SPI_APP_OTA_BOOT_ACK_OK = 0xB5U;
|
2026-07-16 23:00:52 +08:00
|
|
|
|
/** @brief SPI DATA_READY 输出端口(PB6 → ESP32;v2:低=有待读,高=空闲)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SPI_READY_PORT = GPIOB;
|
2026-07-16 23:00:52 +08:00
|
|
|
|
/** @brief SPI DATA_READY 输出引脚。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SPI_READY_PIN = GPIO_PIN_6;
|
2026-07-16 23:00:52 +08:00
|
|
|
|
/** @brief APP SPI DMA/软件缓冲(字节)。业务 payload 上限 = 本值 − V2_OVERHEAD(20)。 */
|
|
|
|
|
|
constexpr uint16_t CONFIG_SPI_TX_BUF_SIZE = 256U;
|
|
|
|
|
|
constexpr uint16_t CONFIG_SPI_RX_BUF_SIZE = 256U;
|
|
|
|
|
|
constexpr uint16_t CONFIG_SPI_LOG_BUF_SIZE = 256U;
|
|
|
|
|
|
/** @brief 主动按铃超时:ESP32 未在该时间内来读则 cancelRing(ms)。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_SPI_RING_TIMEOUT_MS = 50U;
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/** @brief SPI 命令 handler 注册表容量。
|
|
|
|
|
|
*
|
|
|
|
|
|
* 当前 init 注册 9 个:boot_request / ota_wait / ping / can_bridge /
|
|
|
|
|
|
* can_feedback / id_snapshot / adc_feedback / motor_state / motor_ota。
|
|
|
|
|
|
* registerHandler 表满时静默丢弃,motor_ota 曾因容量=8 被丢弃(0xD0 回 0xEE)。
|
|
|
|
|
|
* 取 12 留余量;新增 handler 时须确认本容量足够。 */
|
|
|
|
|
|
constexpr uint8_t CONFIG_SPI_MAX_COMMANDS = 12U;
|
2026-07-16 23:00:52 +08:00
|
|
|
|
/** @brief 每通道不重复 ID 快照表最大条目数(与 ESP32 CANFD_ID_SNAPSHOT_MAX 对齐)。 */
|
|
|
|
|
|
constexpr uint8_t CONFIG_CANFD_ID_SNAPSHOT_MAX = 16U;
|
|
|
|
|
|
/** @brief 快照条目最大数据字节数(CAN FD DLC 上限)。 */
|
|
|
|
|
|
constexpr uint8_t CONFIG_CANFD_ID_SNAPSHOT_DATA_MAX = 64U;
|
2026-07-11 17:52:05 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief ESP32 硬件复位控制端口(PC9 接 ESP32 EN/RESET)。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESP32_RESET_PORT = GPIOC;
|
|
|
|
|
|
/** @brief ESP32 硬件复位控制引脚。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESP32_RESET_PIN = GPIO_PIN_9;
|
|
|
|
|
|
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/* ============================================================
|
|
|
|
|
|
* CAN-FD 位时序配置(三路 CAN0/CAN1/CAN2 共用)
|
|
|
|
|
|
* 时钟链: SYSCLK=180MHz → AHB=/1=180MHz(RCU_MODIFY_UP 强制)
|
|
|
|
|
|
* → APB1=/2=90MHz (CAN_CLK)
|
|
|
|
|
|
*
|
|
|
|
|
|
* 仲裁段目标: 1.0 Mbps = 90MHz / (9 × 10 TQ)
|
|
|
|
|
|
* 数据段目标: 2.0 Mbps = 90MHz / (9 × 5 TQ)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @note RCU_MODIFY_UP 宏在 system_clock_180m_hxtal() 末尾将 AHB 从 /4
|
|
|
|
|
|
* 临时切到 /1,这是 GigaDevice 官方行为,不可删除。
|
|
|
|
|
|
* 最终 AHB=180MHz, APB1=90MHz, APB2=180MHz, TIMER2_CLK=180MHz。
|
|
|
|
|
|
* ============================================================ */
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 仲裁段预分频值。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_NOMINAL_PRESCALER = 9U;
|
2026-07-27 00:02:14 +08:00
|
|
|
|
/** @brief 仲裁段再同步跳跃宽度。
|
|
|
|
|
|
* 1TQ→2TQ:总线空闲期即持续 STUFF 接收错误(REC 冲 120+),OTA 数据帧被错误帧
|
|
|
|
|
|
* 击落触发应用层重发;放宽接收再同步容差(不改波特率/采样点,上限受 BS2=2TQ 限制)。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_CAN_NOMINAL_SJW = CAN_BT_SJW_2TQ;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/** @brief 仲裁段时间段 1(PHSEG1)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_NOMINAL_BS1 = CAN_BT_BS1_7TQ;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/** @brief 仲裁段时间段 2(PHSEG2)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_NOMINAL_BS2 = CAN_BT_BS2_2TQ;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief 数据段预分频值。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_DATA_PRESCALER = 9U;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/** @brief 数据段再同步跳跃宽度。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_DATA_SJW = CAN_BT_SJW_1TQ;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/** @brief 数据段时间段 1。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_DATA_BS1 = CAN_BT_BS1_3TQ;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/** @brief 数据段时间段 2。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_DATA_BS2 = CAN_BT_BS2_1TQ;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/* BRS / 启动探测 / 通道使能:见文件顶部「功能开关」 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief CAN 接收过滤器目标标准帧 ID。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_CAN_RX_FILTER_ID = CONFIG_CAN_STATUS_ID;
|
|
|
|
|
|
/** @brief CAN 接收过滤器标准帧掩码;0x7FF 表示精确匹配 11-bit ID。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_CAN_RX_FILTER_MASK = 0x7FFU;
|
|
|
|
|
|
/** @brief 单次 CAN 接收解析任务最多消费的软件队列帧数。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_CAN_RX_PARSE_BUDGET = 48U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief 用户调度定时器实例。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SCHED_TIMER_INSTANCE = TIMER2;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 用户调度定时器中断号。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr IRQn_Type CONFIG_SCHED_TIMER_IRQn = TIMER2_IRQn;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 用户调度定时器时钟使能宏参数。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr rcu_periph_enum CONFIG_SCHED_TIMER_RCU = RCU_TIMER2;
|
2026-07-02 02:02:41 +08:00
|
|
|
|
/** @brief 用户调度定时器预分频值。
|
|
|
|
|
|
* 时钟链: SYSCLK=180MHz → AHB=/1=180MHz(RCU_MODIFY_UP 强制) → APB1=/2=90MHz → TIMER2_CLK=APB1×2=180MHz。
|
|
|
|
|
|
* 保持 100us tick: (PSC+1)×(PER+1)=18000 → 180×100 → PSC=179, PER=99。
|
|
|
|
|
|
*/
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SCHED_TIMER_PRESCALER = 179U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 用户调度定时器周期重装值。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SCHED_TIMER_PERIOD = 99U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 用户调度定时器 NVIC 抢占优先级。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SCHED_TIMER_IRQ_PREEMPT_PRIO = 1U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 用户调度定时器 NVIC 子优先级。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_SCHED_TIMER_IRQ_SUB_PRIO = 0U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief 调度基准节拍:ADC VREF 采样周期,单位 100us tick。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_VREF_SAMPLE_TICKS = 5U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
/** @brief 调度基准节拍:ADC 温度采样/处理周期,单位 100us tick。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_TEMP_SAMPLE_TICKS = 10U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief 调度基准节拍:10ms 计数周期,单位 100us tick。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_CAN_RX_TICKS = 100U;
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/** @brief 调度基准节拍:CAN 周期发送任务周期,100 tick = 10ms。
|
|
|
|
|
|
* @note 原 1ms/帧过密,改为 10ms/帧以降低 CAN 总线负载与 GD32 邮箱压力。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_CAN_TX_TICKS = 100U;
|
2026-07-15 00:34:56 +08:00
|
|
|
|
/** @brief 调度基准节拍:心跳周期,单位 100us tick。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_HEARTBEAT_TICKS = 10000U;
|
2026-07-26 20:39:59 +08:00
|
|
|
|
/** @brief 调度基准节拍:多电机状态 0xC5 主动推送启动周期,2500 tick = 250ms。
|
|
|
|
|
|
* @note 独立于 1Hz heartbeat,避免连带加速 OTA Boot 轮询 / CAN 反馈快照刷新 /
|
|
|
|
|
|
* ADC 推送 / checkOffline 离线判定(3s 阈值)。前端 age 应稳定在 ~120ms。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_MOTOR_STATE_TICKS = 2500U;
|
2026-07-15 00:34:56 +08:00
|
|
|
|
/** @brief 调度基准节拍:APP 状态/诊断打印周期,50000 tick = 5s。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_TASK_PERIOD_DIAG_PRINT_TICKS = 50000U;
|
2026-05-10 17:28:14 +08:00
|
|
|
|
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/* UART/SPI 调试开关:见文件顶部「功能开关」 */
|
2026-05-30 00:24:31 +08:00
|
|
|
|
|
|
|
|
|
|
/** @brief FWDGT 独立看门狗预分频值。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_FWDGT_PSC = FWDGT_PSC_DIV64;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief FWDGT 独立看门狗重载值。
|
|
|
|
|
|
* 超时 = (64 / 40000) * (RLD + 1) = 1.6ms * (RLD+1)
|
|
|
|
|
|
* RLD=1874 → 1.6ms * 1875 ≈ 3.0s
|
|
|
|
|
|
*/
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_FWDGT_RLD = 1874U;
|
2026-05-30 00:24:31 +08:00
|
|
|
|
/** @brief FWDGT 超时近似值(毫秒),仅供文档参考。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_FWDGT_TIMEOUT_MS = 3000U;
|
2026-06-03 03:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
/* ============================================================
|
|
|
|
|
|
* BOOT 版本在 OTA 配置页中的 Flash 存储地址
|
|
|
|
|
|
* 与 BOOT 工程 sys/config.h 保持一致
|
|
|
|
|
|
* ============================================================ */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_OTA_CONFIG_PAGE_ADDR = 0x0807E000U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_BOOT_VERSION_ADDR0 = CONFIG_OTA_CONFIG_PAGE_ADDR + 0x18U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_BOOT_VERSION_ADDR1 = CONFIG_OTA_CONFIG_PAGE_ADDR + 0x1CU;
|
|
|
|
|
|
constexpr uint32_t CONFIG_OTA_CONFIG_WORD_COUNT = 8U;
|
2026-06-03 03:13:49 +08:00
|
|
|
|
|
2026-06-26 00:57:59 +08:00
|
|
|
|
/* ============================================================
|
|
|
|
|
|
* NVIC 优先级分组与中断优先级分层
|
|
|
|
|
|
* (EtherCAT 实时架构改造:PRE4_SUB0,4 位抢占优先级)
|
|
|
|
|
|
* ============================================================ */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_NVIC_PRIORITY_GROUP = NVIC_PRIGROUP_PRE4_SUB0;
|
|
|
|
|
|
constexpr uint32_t CONFIG_IRQ_PREEMPT_ETHERCAT_SYNC = 0U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_IRQ_PREEMPT_SCHED = 1U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_IRQ_PREEMPT_CAN = 2U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_IRQ_PREEMPT_ETHERCAT_ESC = 1U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_IRQ_PREEMPT_ETHERCAT_SYNC1 = 1U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_IRQ_PREEMPT_SPI_USART = 3U;
|
2026-06-26 00:57:59 +08:00
|
|
|
|
/* ============================================================
|
2026-07-20 02:36:56 +08:00
|
|
|
|
* EtherCAT LAN9252 配置(开关见顶部 CONFIG_MAIN_LOOP_WFI / ETHERCAT_SYNC_MODE)
|
2026-06-26 00:57:59 +08:00
|
|
|
|
* ============================================================ */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ETHERCAT_ISR_MAX_US_THRESHOLD = 5U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_PDI_INPUT_OFFSET = 0x1000U;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_PDI_OUTPUT_OFFSET = 0x1200U;
|
2026-07-16 23:00:52 +08:00
|
|
|
|
/** @brief 默认 PDO 缓冲大小(字节),应用/ISR 三缓冲共用。 */
|
|
|
|
|
|
constexpr size_t CONFIG_ETHERCAT_PDO_SIZE = 32U;
|
2026-06-29 01:51:02 +08:00
|
|
|
|
|
2026-06-26 00:57:59 +08:00
|
|
|
|
/* ---------- EXMC 引脚配置(GD32E508 EXMC 标准映射) ---------- */
|
2026-07-26 20:39:59 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ESC_EXMC_BASE_ADDR = 0x64000000U;
|
|
|
|
|
|
/* Region1 = NE1 @ 0x64000000(GD32E50x 用户手册 Rev2.2 图25-3: Bank0 四 Region 各 64MB,
|
|
|
|
|
|
* HADDR[27:26]=01 选中 NE1)。LAN9252 CS 接 PD7=EXMC_NE1,故基址为 0x64000000。 */
|
2026-07-16 23:00:52 +08:00
|
|
|
|
#ifndef EXMC_BANK0_NORSRAM_REGION1
|
|
|
|
|
|
#define EXMC_BANK0_NORSRAM_REGION1 ((uint32_t)0x00000001U)
|
2026-06-26 00:57:59 +08:00
|
|
|
|
#endif
|
2026-07-16 23:00:52 +08:00
|
|
|
|
#define CONFIG_ESC_EXMC_BANK_NOR_SRAM_REGION1 EXMC_BANK0_NORSRAM_REGION1
|
2026-06-26 00:57:59 +08:00
|
|
|
|
|
|
|
|
|
|
/* ---------- ESC 中断引脚(PB0/PB1/PB2,三个独立 EXTI 向量) ---------- */
|
|
|
|
|
|
/** @note 保留 PA0 给未来 STANDBY 模式唤醒(WKUP_PIN0)。 */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC0_PORT = GPIOB;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC0_PIN = GPIO_PIN_0;
|
|
|
|
|
|
constexpr exti_line_enum CONFIG_ESC_SYNC0_EXTI = EXTI_0;
|
|
|
|
|
|
constexpr IRQn_Type CONFIG_ESC_SYNC0_IRQn = EXTI0_IRQn;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC0_EXTI_SOURCE_PORT = GPIO_PORT_SOURCE_GPIOB;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC0_EXTI_SOURCE_PIN = GPIO_PIN_SOURCE_0;
|
2026-06-26 00:57:59 +08:00
|
|
|
|
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ESC_IRQ_PORT = GPIOB;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_IRQ_PIN = GPIO_PIN_1;
|
|
|
|
|
|
constexpr exti_line_enum CONFIG_ESC_IRQ_EXTI = EXTI_1;
|
|
|
|
|
|
constexpr IRQn_Type CONFIG_ESC_IRQ_IRQn = EXTI1_IRQn;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_IRQ_EXTI_SOURCE_PORT = GPIO_PORT_SOURCE_GPIOB;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_IRQ_EXTI_SOURCE_PIN = GPIO_PIN_SOURCE_1;
|
2026-06-26 00:57:59 +08:00
|
|
|
|
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC1_PORT = GPIOB;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC1_PIN = GPIO_PIN_2;
|
|
|
|
|
|
constexpr exti_line_enum CONFIG_ESC_SYNC1_EXTI = EXTI_2;
|
|
|
|
|
|
constexpr IRQn_Type CONFIG_ESC_SYNC1_IRQn = EXTI2_IRQn;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC1_EXTI_SOURCE_PORT = GPIO_PORT_SOURCE_GPIOB;
|
|
|
|
|
|
constexpr uint32_t CONFIG_ESC_SYNC1_EXTI_SOURCE_PIN = GPIO_PIN_SOURCE_2;
|
2026-06-26 00:57:59 +08:00
|
|
|
|
|
|
|
|
|
|
/* ---------- EXMC 数据/控制线引脚(GD32E508 标准映射) ---------- */
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D0_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D0_PIN = GPIO_PIN_14;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D1_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D1_PIN = GPIO_PIN_15;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D2_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D2_PIN = GPIO_PIN_0;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D3_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D3_PIN = GPIO_PIN_1;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D4_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D4_PIN = GPIO_PIN_7;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D5_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D5_PIN = GPIO_PIN_8;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D6_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D6_PIN = GPIO_PIN_9;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D7_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D7_PIN = GPIO_PIN_10;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D8_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D8_PIN = GPIO_PIN_11;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D9_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D9_PIN = GPIO_PIN_12;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D10_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D10_PIN = GPIO_PIN_13;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D11_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D11_PIN = GPIO_PIN_14;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D12_PORT = GPIOE; constexpr uint32_t CONFIG_EXMC_D12_PIN = GPIO_PIN_15;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D13_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D13_PIN = GPIO_PIN_8;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D14_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D14_PIN = GPIO_PIN_9;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_D15_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_D15_PIN = GPIO_PIN_10;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_A16_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_A16_PIN = GPIO_PIN_11;
|
2026-07-20 02:36:56 +08:00
|
|
|
|
/* A17 (PD12) 用于 HBI Indexed Mode 访问 HBI_DATA_0 寄存器,已将 LAN9252 A2 (Pin 29) 接到 PD12。
|
|
|
|
|
|
* 注意 LAN9252 引脚顺序:Pin25=A1, Pin26=A3, Pin27=A4, Pin28=CS, Pin29=A2。
|
|
|
|
|
|
* A2 是 IDX/DATA 选择位,必须接到 PD12 才能访问 DATA 寄存器,EEPROM 烧录功能可用。 */
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_A17_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_A17_PIN = GPIO_PIN_12;
|
2026-07-06 19:13:56 +08:00
|
|
|
|
constexpr uint32_t CONFIG_EXMC_NOE_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_NOE_PIN = GPIO_PIN_4;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_NWE_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_NWE_PIN = GPIO_PIN_5;
|
|
|
|
|
|
constexpr uint32_t CONFIG_EXMC_NE1_PORT = GPIOD; constexpr uint32_t CONFIG_EXMC_NE1_PIN = GPIO_PIN_7;
|
2026-06-26 00:57:59 +08:00
|
|
|
|
|
2026-05-10 17:28:14 +08:00
|
|
|
|
#endif /* SYS_CONFIG_H */
|