打印
[其他]

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

[复制链接]
979|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nawu|  楼主 | 2023-3-15 08:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
上一节我们发现无论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,节点才会退出错误模式。
————————————————
版权声明:本文为CSDN博主「大唐不夜城」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DiQiZiYouDu/article/details/120328783

使用特权

评论回复

相关帖子

沙发
tpgf| | 2023-4-10 16:52 | 只看该作者
楼主说的这些解决办法是在调试的时候我们人工做的工作是吗

使用特权

评论回复
板凳
qcliu| | 2023-4-10 17:08 | 只看该作者
给的是各种错误下的报警信息吧

使用特权

评论回复
地板
drer| | 2023-4-11 10:19 | 只看该作者
节点在错误模式下回自动抛掉接收到的数据吗

使用特权

评论回复
5
coshi| | 2023-4-11 10:46 | 只看该作者
在can协议里边 有没有相关的返回的错误码表呢

使用特权

评论回复
6
kxsi| | 2023-4-11 11:22 | 只看该作者
CAN总线状态直接进入了BUS OFF状态,这意味着错误计数已经超限,查看CPU收发寄存器的收发错误计数显示发送错误计数TEC达到248, 接收错误计数为0;这很明显,数据压根没有发送到总线上

使用特权

评论回复
7
wiba| | 2023-4-11 11:55 | 只看该作者
kxsi 发表于 2023-4-11 11:22
CAN总线状态直接进入了BUS OFF状态,这意味着错误计数已经超限,查看CPU收发寄存器的收发错误计数显示发送 ...

请问CAN总线状态在什么情况下会直接进入BUS OFF状态呢

使用特权

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

本版积分规则

73

主题

3308

帖子

3

粉丝