打印
[其它]

FAQ0113 CAN数据错位问题说明

[复制链接]
876|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ArterySW|  楼主 | 2021-5-6 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ArterySW 于 2021-5-6 16:46 编辑

Questions:在使用CAN时,当在接收数据域期间CAN总线上出现异常(该异常通常可能由采样点漂移、或外部干扰等原因导致)时,可能会出现接收数据位填充错误导致整帧数据错位的现象, 且后续帧又自动恢复正常的现象。
Answer:
此问题可通过软件进行修正,处理方案如下:
开启CAN的上次错误中断号对应的错误中断,在CAN错误中断的中断函数内检测到出现位填充错误时,复位CAN,并重新调用CAN初始化函数。以CAN1为例,其典型示例代码如下:
        __IO uint32_t err_index = 0;
void CAN1_SCE_IRQHandler(void)
{
                  if (CAN_GetINTStatus (CANx,CAN_INT_LEC) == SET )
                  {
                           err_index = CAN1->ESTS;
                        CAN_ClearINTPendingBit (CANx, CAN_INT_LEC);
                            if(err_index & 0x00000010) ///<判定是否出现位填充错误
                            {
                              CAN_Reset(CAN1);
                              /*调用CAN初始化函数*/;
                            }
                  }
}


类型:MCU应用
适用型号:AT32F403、AT32F413、AT32F415、AT32F403A、AT32F407
主功能:CAN
次功能:


使用特权

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

本版积分规则

179

主题

275

帖子

11

粉丝