AC78013CAN模块测试(二)CAN错误寄存器

上一节我们发现无论CANH、CANL接地或者断开,调用函数CAN_TransmitMessage(CAN_Type *CANx, const CAN_MsgInfoType *info, CAN_TransmitBufferType type)发送的数据返回值永远是0,查看原函数发现这里只管数据能正常丢入缓冲区。对于发送错误并没有相关判断。库函数中int32_t CAN_GetError(CAN_Type *CANx)可以用于获知CANCTRL当前的状态。

在代码中增加这么一段话,然后再进行相关测试。

 仍然让CAN每隔1S发送一次数据。

1.断开CANL

正常情况下打印 0x400       查表得知是已完成STB发送任务

断开CANL之后打印0x810600(TEC开始累加)

0x810400

KEER 显示最后的错误是应答错误

查看寄存器发现TEC寄存器开始自动累加,直到0x80

CAN err sts C10400(TEC达到0x80)

最终节点进入被动错误。

CANL重新接好之后TEC开始递减,减为0之后节点退出错误状态

2.断开CANH,也得到类似的效果

3.CANH、CANL短接

CAN err sts D00000

CAN err sts C10400

KOER显示的错误是 Bit error

TEC寄存器每次递增0x08,达到255之后重新开始计数

也是进入被动错误

4.CANH接地

KOER  Bit err

CAN err sts D00000
CAN err sts C10400

TEC寄存器每次递增0x08,达到255之后重新开始计数

5.CANL接地

KOER Stuff error 填充错误

RECNT计数器累加

CAN err sts 810200(达到错误警告限制,总线错误中断标志,错误中断,)

CAN err sts D10000(错误被动中断)

CAN err sts C10000(错误被动模式激活,达到错误警告限制)

解除异常之后RECNT不会自动清零,只有每成功接收一帧RECNT减1.直到为0,节点才会退出错误模式。

上面我们整理了,在各种异常情况下CAN错误状态标记的变化,下一节在结合理论探讨一下。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值