举报
举报
对于STM32F743的CAN FD模块中的TEC和REC错误计数器复位问题,以下是逐步解决方案:
CAN_MCR寄存器的INRQ位为1,使CAN进入初始化模式:CANx->MCR |= CAN_MCR_INRQ; // 请求初始化模式CAN_MSR寄存器的INAK位变为1,确认进入初始化模式:while (!(CANx->MSR & CAN_MSR_INAK)) {} // 等待直到进入初始化模式TEC和REC清零。此时可验证:uint32_t tec = (CANx->ESR & CAN_ESR_TEC) >> CAN_ESR_TEC_Pos;
uint32_t rec = (CANx->ESR & CAN_ESR_REC) >> CAN_ESR_REC_Pos;CANx->MCR &= ~CAN_MCR_INRQ; // 退出初始化模式
while (CANx->MSR & CAN_MSR_INAK) {} // 等待退出完成若初始化模式未生效,可通过RCC寄存器强制复位CAN外设:
// 假设使用CAN1
RCC->APB1RSTR |= RCC_APB1RSTR_CAN1RST; // 复位CAN1
RCC->APB1RSTR &= ~RCC_APB1RSTR_CAN1RST; // 清除复位位TEC和REC将被重置为0。若CAN处于总线关闭状态(CAN_ESR的BOFF位为1),需执行恢复操作:
CANx->MCR |= CAN_MCR_ABOM; // 启用自动总线关闭管理CANx->MCR &= ~CAN_MCR_INRQ; // 确保退出初始化模式CAN_ESR寄存器,确认TEC和REC是否被清零。通过上述方法,可有效复位CAN FD的错误计数器。若问题依旧,建议检查硬件连接或潜在的总线错误源。
举报
更多回帖