CAN错误记录

2 篇文章 0 订阅

CAN错误记录

  1. HAL库生成代码与芯片引脚不相同

原因:初始化的引脚不正确,导致晶振错误而卡住了程序。

事情起因是,我用VI型芯片生成的代码与II型芯片生成的代码都不行,我跑去问czj和jz问用CubeMX生成的代码CAN能用吗?他们说他们都能。

我就疑惑了,通过一步步仿真最后终于找到了问题。

第一天我寻找到了第一个原因,在CAN的最后初始化中有一个这样的判断函数。

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
Error_Handler();//错误句柄
}

仿真发现,一直在他的while中不断的跑;我以为是HAL库本身的问题,而且去查阅资料,也发现有人卡在这一句,所有将它注释掉了,发现CAN初始化了,但发现不能收发,原因是

HAL_CAN_STATE_ERROR  //can错误状态

所以不解决这个问题无法使用can。

第二天,再去往深一步中断看的时候发现它的错误来源于

  while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U)
{
if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
{
/* Update error code */
hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
/* Change CAN state */
  hcan->State = HAL_CAN_STATE_ERROR;

  return HAL_ERROR;
}
}

看代码就能发现,返回错误值的地方。仔细查看这个就发现是超时产生的错误。但错误的方法就是将PD0、PD1更换CubeMX自己生成的PA11、PA12。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值