[学习笔记]

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

[复制链接]
16600|2
手机看帖
扫描二维码
随时随地手机跟帖
hello1030|  楼主 | 2021-9-16 15:41 | 显示全部楼层 |阅读模式
上一节我们发现无论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错误状态标记的变化,下一节在结合理论探讨一下。
————————————————
版权声明:本文为CSDN博主「大唐不夜城」的原创**,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DiQiZiYouDu/article/details/120328783

使用特权

评论回复

相关帖子

hello1030|  楼主 | 2021-9-16 16:06 | 显示全部楼层

使用特权

评论回复
hello1030|  楼主 | 2021-9-16 16:07 | 显示全部楼层

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

24

帖子

0

粉丝