打印
[技术问答]

NUC240 CAN bus遇到bus-off如何自动恢复

[复制链接]
617|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-3-24 10:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各位大大安安,我在BSP中CAN范例遇到CAN bus中断进到bus-off状态问题,导至message无法传送,想问除了重新上电复位之外,如何初始化让CAN bus自动恢复?
  • void CAN0_IRQHandler(void)
  • {
  •     uint32_t u8IIDRstatus;
  •     u8IIDRstatus = CAN0->IIDR;
  •     if(u8IIDRstatus == 0x00008000) {      /* Check Status Interrupt Flag (Error status Int and Status change Int) */
  •         /**************************/
  •         /* Status Change interrupt*/
  •         /**************************/
  •         if(CAN0->STATUS & CAN_STATUS_RXOK_Msk) {
  •             CAN0->STATUS &= ~CAN_STATUS_RXOK_Msk;   /* Clear RxOK status*/
  •             printf("RxOK INT\n") ;
  •         }
  •         if(CAN0->STATUS & CAN_STATUS_TXOK_Msk) {
  •             CAN0->STATUS &= ~CAN_STATUS_TXOK_Msk;    /* Clear TxOK status*/
  •             printf("TxOK INT\n") ;
  •         }
  •         /**************************/
  •         /* Error Status interrupt */
  •         /**************************/
  •         if(CAN0->STATUS & CAN_STATUS_EWARN_Msk) {
  •             printf("EWARN INT\n") ;
  •         }
  •         if(CAN0->STATUS & CAN_STATUS_BOFF_Msk) {
  •             printf("BOFF INT\n") ;
  •         }
  •     } else if(u8IIDRstatus != 0) {
  •         printf("=> Interrupt Pointer = %d\n", CAN0->IIDR - 1);
  •         CAN_MsgInterrupt(CAN0, u8IIDRstatus);
  •         CAN_CLR_INT_PENDING_BIT(CAN0, ((CAN0->IIDR) - 1)); /* Clear Interrupt Pending */
  •     } else if(CAN0->WU_STATUS == 1) {
  •         printf("Wake up\n");
  •         CAN0->WU_STATUS = 0;     /* Write '0' to clear */
  •     }
  • }

复制代码


使用特权

评论回复
沙发
sadicy| | 2022-3-24 15:15 | 只看该作者
什么是bus-off状态

使用特权

评论回复
板凳
jasontu| | 2022-3-25 14:20 | 只看该作者

使用特权

评论回复
地板
kiwis66| | 2022-4-8 14:47 | 只看该作者
怎么你们的can用的这么复杂
我就是简单的通信

使用特权

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

本版积分规则

1443

主题

4019

帖子

6

粉丝