请选择 进入手机版 | 继续访问电脑版
查看: 2928|回复: 3

[求助] LPC54618 CAN0 收发不成功 ,CAN1收发正常,不知错在那里了?

[复制链接]
  • TA的每日心情
    开心
    2021-5-17 17:00
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    13

    主题

    33

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    277
    最后登录
    2022-1-4
    发表于 2020-7-1 17:10:41 | 显示全部楼层 |阅读模式
    我从官网上修改引脚过来的程序初始化如下:
          mcan_config_t mcanConfig;
        mcan_frame_filter_config_t rxFilter;
            mcan_ext_filter_element_config_t extFilter;
        mcan_rx_fifo_config_t rxFifo0;
        mcan_tx_buffer_config_t txBuffer;
        uint8_t node_type;
        uint8_t numMessage = 0;
        uint8_t cnt        = 0;



       // Set MCAN clock 180/6=30MHz. /



       // 引脚配置:
                 IOCON->PIO[1][2] = ((IOCON->PIO[1][2] &
                                                     // Mask bits to zero which are setting //
                                                     (~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
           
                                                    // Selects pin function.
                                                    // * : PORT12 (pin 117) is configured as CAN0_TD. //
                                                    | IOCON_PIO_FUNC(PIO12_FUNC_ALT1)
           
                                                    // Select Analog/Digital mode.
                                                    // : Digital mode. /
                                                    | IOCON_PIO_DIGIMODE(PIO12_DIGIMODE_DIGITAL));

            IOCON->PIO[1][3] = ((IOCON->PIO[1][3] &
                                                     // Mask bits to zero which are setting //
                                                     (~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
           
                                                    // Selects pin function.
                                                    // * : PORT13 (pin 120) is configured as CAN0_RD. //
                                                    | IOCON_PIO_FUNC(PIO13_FUNC_ALT1)
           
                                                    // Select Analog/Digital mode.
                                                    // * : Digital mode. //
                                                    | IOCON_PIO_DIGIMODE(PIO13_DIGIMODE_DIGITAL));
      // 时钟源配置  
       CLOCK_SetClkDiv(kCLOCK_DivCan0Clk, 6U, true);





        MCAN_GetDefaultConfig(&mcanConfig);

    #if (defined(USE_IMPROVED_TIMING_CONFIG) && USE_IMPROVED_TIMING_CONFIG)
                    mcan_timing_config_t timing_config;
                    memset(&timing_config, 0, sizeof(timing_config));

                    if (MCAN_CalculateImprovedTimingValues(mcanConfig.baudRateA, MCAN_CLK_FREQ, &timing_config))
                    {
                            /* Update the improved timing configuration*/
                            memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));
                    }
                    else
                    {
                       //        PRINTF("No found Improved Timing Configuration. Just used default configuration\r\n\r\n");
                    }

    #endif
       // 基础配置  
        MCAN_Init(EXAMPLE_MCAN, &mcanConfig, MCAN_CLK_FREQ);

       // Create MCAN handle structure and set call back function. //

        MCAN_TransferCreateHandle(EXAMPLE_MCAN, &mcanHandle, mcan_callback, NULL);
       // Set Message RAM base address and clear to avoid BEU/BEC error. //
        MCAN_SetMsgRAMBase(EXAMPLE_MCAN, MSG_RAM_BASE);
        uint32_t *p = (uint32_t *)(MSG_RAM_BASE);
        memset(p, 0, (8U + CAN_DATASIZE) * sizeof(uint8_t));



           

        /* STD filter config. */
        rxFilter.address  = STD_FILTER_OFS;
        rxFilter.idFormat = kMCAN_FrameIDExtend;
        rxFilter.listSize = 0U;
        rxFilter.nmFrame  = kMCAN_acceptinFifo0;
        rxFilter.remFrame = kMCAN_filterFrame;
        MCAN_SetFilterConfig(EXAMPLE_MCAN, &rxFilter);

        extFilter.efec=kMCAN_disable;
        extFilter.eft=kMCAN_range;
            extFilter.efid1=0; //  : 29; /*!< Extended Filter ID 1. */
        extFilter.efid2=0x1fffffff;//  : 29; /*!< Extended Filter ID 2. */
            MCAN_SetEXTFilterElement(EXAMPLE_MCAN, &rxFilter,&extFilter,0);

        /* RX fifo0 config. */
        rxFifo0.address       = RX_FIFO0_OFS;
        rxFifo0.elementSize   = 1U;
        rxFifo0.watermark     = 0;
        rxFifo0.opmode        = kMCAN_FifoBlocking;
        rxFifo0.datafieldSize = kMCAN_8ByteDatafield;
        MCAN_SetRxFifo0Config(EXAMPLE_MCAN, &rxFifo0);

        /* TX buffer config. */
        memset(&txBuffer, 0, sizeof(txBuffer));
        txBuffer.address       = TX_BUFFER_OFS;
        txBuffer.dedicatedSize = 1U;
        txBuffer.fqSize        = 0;
        txBuffer.datafieldSize = kMCAN_8ByteDatafield;

        MCAN_SetTxBufferConfig(EXAMPLE_MCAN, &txBuffer);

        /* Finish software initialization and enter normal mode, synchronizes to
           CAN bus, ready for communication */
        MCAN_EnterNormalMode(EXAMPLE_MCAN);


    // -------------------------------------------------------------------------------------------------------------------------------------------------------------
    // 以下为发送 部分:

        // ----------- 1秒计时 --------------
         if(uiCAN0RunT<1000) return;
              uiCAN0RunT=0;


            //   Test_LED_TOGGLE();


              // Config TX frame data. //

                          txIdentifier=0x1826f456U;   
                            tx_data[0] =0x01;
                            tx_data[1] =0x01;
                            tx_data[2] =0x00;
                            tx_data[3] =0xff;
                            tx_data[4] =0xff;
                            tx_data[5] =0xff;
                            tx_data[6] =0xff;
                            tx_data[7] =0xff;
                      
                txFrame.xtd  = kMCAN_FrameIDExtend;     //  kMCAN_FrameIDStandard;
                txFrame.rtr  = kMCAN_FrameTypeData;     // kMCAN_FrameTypeRemote;   //   kMCAN_FrameTypeData;
                txFrame.fdf  = 0;
                txFrame.brs  = 0;

                txFrame.id   =txIdentifier;// txIdentifier << STDID_OFFSET;
                txFrame.data = tx_data;
                txFrame.size = CAN_DATASIZE;

                txFrame.fdf = 0; // 1;
                txFrame.brs = 1;
                txFrame.dlc = 6;

                txXfer.frame     = &txFrame;
                txXfer.bufferIdx = 0;
                MCAN_TransferSendNonBlocking(EXAMPLE_MCAN, &mcanHandle, &txXfer);  

      // ------------------------------------------------------------------------------------------------------------------------------------------------------









    最佳答案

    本帖最后由 zmh169 于 2020-7-2 10:21 编辑 问题描述不具体:是代码卡死在哪了?还是代码正常跑,但CAN总线收发不到数据?先确保CAN收发硬件没问题。排除硬件问题那估计是初始化问题,试试增加GPIO时钟使能看看。 ...
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-7-8 09:06
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    18

    主题

    444

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    2273
    最后登录
    2025-1-15
    发表于 2020-7-2 09:34:29 | 显示全部楼层
    本帖最后由 zmh169 于 2020-7-2 10:21 编辑

    问题描述不具体:是代码卡死在哪了?还是代码正常跑,但CAN总线收发不到数据?先确保CAN收发硬件没问题。排除硬件问题那估计是初始化问题,试试增加GPIO时钟使能看看。
    1.     /* Enables the clock for the GPIO module */
    2.     CLOCK_EnableClock(kCLOCK_Gpio0);
    3.     CLOCK_EnableClock(kCLOCK_Gpio1);
    复制代码
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    3

    帖子

    0

    高级会员

    Rank: 4

    积分
    649
    最后登录
    2022-9-9
    发表于 2021-3-19 09:16:54 | 显示全部楼层
    楼主我也遇到这个问题了,CAN0和CAN1配置一样,请问一下这个问题出在哪里呀
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-5-17 17:00
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    13

    主题

    33

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    277
    最后登录
    2022-1-4
     楼主| 发表于 2021-4-14 18:01:23 | 显示全部楼层
    CAN0和CAN1配置是不一样的,尤其是接收RAM绶存配置、时钟配置。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-1-19 10:49 , Processed in 0.120266 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表