feat(canfd): 修复CAN发送问题。实现CANFD发送完成中断处理和通道健康检查

- 添加CANFD发送完成中断处理函数,确保只有MTFNERR置位时才计数发送成功
- 新增通道健康检查功能,防止病态通道被持续重发的测试帧反复推回BUS_OFF
- 重构CANFD配置结构体,添加TX中断配置项并修正GPIO映射设置
- 移除原有的软件发送队列机制,改为直接硬件发送模式
- 更新项目配置文件中的CANFD源文件路径命名

fix(canfd): 修复CANFD发送计数和错误处理逻辑

- 修正发送计数只在硬件MTFNERR确认后增加,而非请求进入邮箱时
- 改进错误日志输出,添加详细的错误类型和通道状态信息
- 优化总线恢复机制,通过收发器静默-唤醒协助硬件自动恢复
- 添加条件编译开关控制启动时自检和回环测试功能
This commit is contained in:
cbb
2026-07-11 17:52:05 +08:00
parent 3691cf2aba
commit 10989939e9
9 changed files with 361 additions and 265 deletions
+4 -3
View File
@@ -17,8 +17,7 @@ enum system_task_t {
TASK_ADC_PROCESS, /**< 对 ADC 原始值进行电压与温度计算任务。 */
TASK_CAN_RX_POLL, /**< 兼容保留的 CANFD 接收轮询任务。 */
TASK_CAN_RX_PARSE, /**< 解析并消费已接收 CANFD 帧任务。 */
TASK_CAN_TX_PREPARE, /**< 预留的 CANFD 发送准备任务,默认不主动置位。 */
TASK_CAN_TX_SEND, /**< 预留的 CANFD 发送执行任务,默认不主动置位。 */
TASK_CAN_TX_SEND, /**< CANFD 周期发送任务,每 1ms 每通道发送一帧。 */
TASK_STATUS_LED, /**< 状态灯维护任务。 */
TASK_HEARTBEAT, /**< 系统心跳维护任务。 */
TASK_DIAGNOSTIC_PRINT, /**< 诊断信息打印任务。 */
@@ -46,8 +45,10 @@ struct task_scheduler_t {
volatile uint16_t div_temp_sample;
/** @brief 调度分频计数:CAN 接收处理。 */
volatile uint16_t div_can_rx;
/** @brief 调度分频计数:状态灯。 */
/** @brief 调度分频计数:CAN 周期发送(1ms)。 */
volatile uint16_t div_can_tx;
/** @brief 调度分频计数:状态灯(100ms)。 */
volatile uint16_t div_status_led;
/** @brief 调度分频计数:心跳与诊断打印。 */
volatile uint16_t div_heartbeat;
};