跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. FlexCAN初始化注意事项

FlexCAN初始化注意事项

已定时 已固定 已锁定 已移动 YT SDK
9 帖子 5 发布者 1.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • yt0069Y 离线
    yt0069Y 离线
    yt0069 YunTu
    写于 最后由 编辑
    #1

    SDK中FlexCAN初始化注意事项:
    如果采用中断方式收发,注册回调函数FLEXCAN_DRV_InstallEventCallback和FLEXCAN_DRV_InstallErrorCallback,以及mailbox或fifo,滤波器的初始化需要放在启动接收函数之前
    2b6bee4a-9992-41bc-8e4d-7f507adf0637-image.png
    例如,以下为不太合理的邮箱初始化程序:

    /* Config rx messages mailbox */
            for (index = 0; index < Appl_Can_NodeRxMsgCount[canNodeIndex]; index++)
            {
                /* Config rx buffer */
                status = CAN_ConfigRxBuff(&can_pal_instance,
                                          index,
                                          &Appl_Can_StdIdBuffCfg,
                                          (uint32_t)Appl_Can_NodeRxMsgPtr[canNodeIndex][index].id);
                /* start to receive message */
                status = CAN_Receive(&can_pal_instance,
                                     index,
                                     (can_message_t *)&Appl_Can_NodeRxMsgPtr[canNodeIndex][index]);
            }
    

    应更改为:

    /* Config rx messages mailbox */
            for (index = 0; index < Appl_Can_NodeRxMsgCount[canNodeIndex]; index++)
            {
                /* Config rx buffer */
                status = CAN_ConfigRxBuff(&can_pal_instance,
                                          index,
                                          &Appl_Can_StdIdBuffCfg,
                                          (uint32_t)Appl_Can_NodeRxMsgPtr[canNodeIndex][index].id);
            }
            for (index = 0; index < Appl_Can_NodeRxMsgCount[canNodeIndex]; index++)
            {
                 /* start to receive message */
                status = CAN_Receive(&can_pal_instance,
                                     index,
                                     (can_message_t *)&Appl_Can_NodeRxMsgPtr[canNodeIndex][index]);
            }
    
    EkkoE 1 条回复 最后回复
    1
    • qinhongkuiQ 离线
      qinhongkuiQ 离线
      qinhongkui
      写于 最后由 编辑
      #2

      楼主有CAN中断接收的demo吗?

      YQHY 2 条回复 最后回复
      -1
      • YQHY 离线
        YQHY 离线
        YQH YunTu
        在 回复了 qinhongkui 最后由 编辑
        #3
        此主題已被删除!
        qinhongkuiQ 1 条回复 最后回复
        0
        • qinhongkuiQ 离线
          qinhongkuiQ 离线
          qinhongkui
          在 回复了 YQH 最后由 qinhongkui 编辑
          #4

          YQH 非常谢谢

          1 条回复 最后回复
          0
          • EkkoE 离线
            EkkoE 离线
            Ekko
            在 回复了 yt0069 最后由 编辑
            #5

            yt0069 如果注册回调函数放在接收函数之后,可能会出现什么情况,目前有客户这样做,会偶发出现固定接收不到某一个ID,我帮他修改初始化流程之后,目前还没复现,想确认一下原理。

            YQHY 1 条回复 最后回复
            0
            • YQHY 离线
              YQHY 离线
              YQH YunTu
              在 回复了 Ekko 最后由 编辑
              #6

              Ekko 客户是什么用法,是在总线已有其他节点发报文的情况下再接入自己的控制器时出现某个报文接收不到的情况吗

              EkkoE 1 条回复 最后回复
              0
              • EkkoE 离线
                EkkoE 离线
                Ekko
                在 回复了 YQH 最后由 编辑
                #7

                YQH 目前测试情况是通过CANOE一直在发报文,MCU重复上电,偶发出现

                1 条回复 最后回复
                0
                • YQHY 离线
                  YQHY 离线
                  YQH YunTu
                  在 回复了 qinhongkui 最后由 编辑
                  #8

                  qinhongkui
                  CAN_INT_Demo.zip

                  1 条回复 最后回复
                  0
                  • yt0069Y yt0069 在 中 引用了 这个主题
                  • ganyongchaoG ganyongchao 在 中 引用了 这个主题
                  • runR 离线
                    runR 离线
                    run YunTu
                    编写于 最后由 run 编辑
                    #9

                    配置顺序:

                    1. 先配置所有需要配置的邮箱的独立掩码(如果需要):
                      FLEXCAN_DRV_SetRxMaskType(instance, FLEXCAN_RX_MASK_INDIVIDUAL);
                      FLEXCAN_DRV_SetRxIndividualMask();

                    2. 再配置所有需要配置的邮箱Mailbox
                      FLEXCAN_DRV_ConfigRxMb();

                    3. 安装中断回调函数
                      FLEXCAN_DRV_InstallEventCallback();
                      FLEXCAN_DRV_InstallErrorCallback();

                    4. 最后启动接收(使能邮箱中断)
                      FLEXCAN_DRV_Receive();

                    示例:

                    /* Set the individual mask type */
                    FLEXCAN_DRV_SetRxMaskType(CAN_INST, FLEXCAN_RX_MASK_INDIVIDUAL);
                    
                    /* Set standard individual mask, bit 0-11 Optional, this example STD_ID 0x700U - 0x7FFU will be receive */
                    FLEXCAN_DRV_SetRxIndividualMask(CAN_INST, FLEXCAN_MSG_ID_STD, RX_STD_MAILBOX, 0xF00U);
                    /* Set extended individual mask, bit 0-28 Optional, this example EXD_ID 0x18C00100U - 0x18C001FFU will be receive */
                    FLEXCAN_DRV_SetRxIndividualMask(CAN_INST, FLEXCAN_MSG_ID_EXT, RX_EXT_MAILBOX, 0x1FFFFF00U);
                    
                    /* After configure all individual masks, then congigure rx mailbox */
                    status |= FLEXCAN_DRV_ConfigRxMb(CAN_INST, RX_STD_MAILBOX, &rxMbStdInfo, RX_STD_MSG_ID);
                    status |= FLEXCAN_DRV_ConfigRxMb(CAN_INST, RX_EXT_MAILBOX, &rxMbExtInfo, RX_EXTMSG_ID);
                    
                    /* Install rx callback */
                    FLEXCAN_DRV_InstallEventCallback(CAN_INST, DRV_CAN_RxEventCall, NULL);
                    FLEXCAN_DRV_InstallErrorCallback(CAN_INST, DRV_CAN_ErrorCall, NULL);
                    
                    /* Start receiving data in RX_STD/EXT_MAILBOX. */
                    status |= FLEXCAN_DRV_Receive(CAN_INST, RX_STD_MAILBOX, &rxStdMsg);
                    status |= FLEXCAN_DRV_Receive(CAN_INST, RX_EXT_MAILBOX, &rxExtMsg);
                    
                    1 条回复 最后回复
                    0

                  • 云途开发生态介绍

                    快速上手云途开发生态

                  • 云途论坛规则/Yuntu Forum Rules

                    发帖前请查看

                  • YT CONFIG TOOL调查问卷

                    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                  • demo
                    19
                    can
                    18
                    uds
                    11
                    lin stack
                    7
                    fbl
                    5
                    yt-link
                    5
                    md14
                    4
                    adc模块
                    3
                    Online Users
                    liguochuanL
                    liguochuan
                    liangji584521L
                    liangji584521
                    carpeC
                    carpe
                    知秋5403知
                    知秋5403
                    nrx11N
                    nrx11
                    yishui66Y
                    yishui66
                    WRW
                    WR
                    QQT-EthanQ
                    QQT-Ethan
                    • 登录

                    • 登录或注册以进行搜索。
                    • 第一个帖子
                      最后一个帖子
                    0
                    • 版块
                    • 最新
                    • 标签
                    • 热门