一般情况下CAN总线是不允许出现短接的情况的,总线会立刻抛出CANOFF,导致CAN模块无法再运行。该关闭与错误计数到255次无关,而是由硬件直接确定的。
如果CAN模块进入CANOFF状态后CAN模块不能够获得有效的恢复条件,可以使用如下代码重新初始化CAN模块后再次进行通信。一般情况下的CAN通信错误会在一定条件后自动恢复。
am_can_reset(can_handle);
am_can_baudrate_set (can_handle, can_btr_baud);
/* 启动can */
ret = am_can_start (can_handle);