CAN 读取ACK知对方是否接收成功

您所在的位置:网站首页 发送成功对方接不到验证信息 CAN 读取ACK知对方是否接收成功

CAN 读取ACK知对方是否接收成功

2024-07-11 11:53| 来源: 网络整理| 查看: 265

首先,了解一下CAN的ACK段

上图是一个数据帧,其ACK段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。

当发送单元发送到CRC段后,会在ACK段发送2个隐性位。

而接收单元正确接收到数据后,会在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发送 ACK”或者“返回 ACK”。

发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、 CRC 错误的消息。

代码修改

在CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox)函数添加代码

if((CANx->ESR & (CAN_ESR_LEC_0 | CAN_ESR_LEC_1)) == (CAN_ESR_LEC_0 | CAN_ESR_LEC_1))state = CAN_TxStatus_Failed;//ACK错

 

这样就能实时的知道对方是否接收成功  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3