This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28035:C2000 CAN 总线位时序

Guru**** 2552050 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/808953/tms320f28035-c2000-can-bus-bit-timing

器件型号:TMS320F28035
主题中讨论的其他器件:C2000WARE

CAN 位时序配置  

我在500kHz 时使用28379并使用   CANBitRateSet (CANB_BASE、200000000、50000)设置速率。

那么、为了为28035设置相同的波特率、我应该为 Setup 准备寄存器。

我觉得波特率设置不正确、因为我 在邮箱25上从28035发送了8个字节到28379、但在 Rx 中断的28379代码中、我总是得到错误位设置。 我认为我可能没有正确设置波特率。 您能验证一下 吗? 谢谢

ECanaShady.CANBTC.bit.BRPREG = 6;
ECANaShady.CANBTC.bit.TSEG2REG = 1;
ECANaShady.CANBTC.bit.TSEG1REG = 6;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    假设您在60MHz SYSCLKOUT 频率下运行28035、CAN 模块的 I/p 时钟为30MHz。 这意味着[bit-time x (BRPreg+1)]必须等于60、对于500kbps。 将 BRPreg 更改为5应使其正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //包含的文件
    //
    #include "F28x_Project.h"
    #include 
    #include 
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_ca.h"
    #include "driverlib/ca.h"
    
    //
    全局
    //
    volatile unsigned long g_ulTxMsgCount = 0;//跟踪的计数器
    // TX 中断的次数
    //已发生,应与之匹配
    //发送的 TX 消息数
    //已发送。
    volatile unsigned long g_ulRxMsgCount = 0;
    unsigned long u32CANBErrorStatus;
    volatile unsigned long g_BErrFlag = 0; //指示某些标志
    //发生传输错误。
    tCANMsgObject sTXCANMessage;
    tCANMsgObject sRXCANMessage、sRXCANMessage2;
    unsigned char ucTXMsgData[8]={0x00、0x00、0x00、0x00、0x00、0x00、 0x00、0x00、
    0x00};
    unsigned char ucRXMsgData[8];
    unsigned char ucRXMsgData2[8];
    unsigned long u32CntTXMsgData = 0x12345678;
    unsigned long errorTxERROR = 0;
    int flagRecv = 0;
    
    //
    CANIntHandler -此函数是 CAN
    //的中断处理程序 外设。 它会检查中断的原因、和
    // 保留已为
    //的所有消息的计数 传输。
    //
    中断 void
    CANIntHandler (void)
    {
    unsigned long ulStatus;
    
    //
    //读取 CAN 中断状态以查找中断原因
    //
    ulStatus = CANIntStatus (CANB_BASE、CAN_INT_STS_CAUST);
    
    //
    //如果原因是控制器状态中断,则获取状态
    //
    if (ulStatus = CAN_INT_INT0ID_STATUS)
    {
    //
    //读取控制器状态。 这将返回状态字段
    //可以指示各种错误的错误位。 错误处理
    //本示例中不是为了简单起见。 请参阅
    // API 文档,了解有关错误状态位的详细信息。
    //读取此状态的操作将清除中断。 如果
    // CAN 外设未与其它 CAN 器件连接到 CAN 总线
    //存在,则会发生错误,并在中指示
    //控制器状态。
    //
    ulStatus = CANStatusGet (CANB_BASE、CAN_STS_CONTROL);
    
    //
    //检查是否发生错误。
    //
    if (((ulStatus &~(CAN_ES_TXOK | CAN_ES_RXOK))!= 7)&&
    ((ulStatus &~(CAN_ES_TXOK | CAN_ES_RXOK))!= 0))
    {
    //
    //设置一个标志来指示可能发生的某些错误。
    //
    G_bErrFlag = 1;
    }
    }
    
    //
    //检查原因是否是我们正在使用的消息对象1
    //发送消息。
    //
    否则、如果(ulStatus = 1)
    {
    //
    //到达这一点意味着 TX 中断发生在上
    //消息对象1、消息 TX 完成。 清除
    //消息目标中断。
    //
    CANIntClear (CANB_BASE、1);
    
    //
    //递增计数器以跟踪已有多少消息
    //已发送。 在实际应用中、这可用于将标志设置为
    //指示何时发送消息。
    //
    G_ulTxMsgCount++;
    
    //
    //由于消息已发送,请清除所有错误标志。
    //
    G_bErrFlag = 0;
    }
    
    //
    //检查原因是否是我们正在使用的消息对象1
    //接收消息。
    //
    否则、如果(ulStatus = 2)
    {
    //
    //获取收到的消息
    
    CANMessageGet (CANB_BASE、1、&sRXCANMessage、TRUE);//接收到邮箱
    
    //
    //到达这一点意味着 TX 中断发生在上
    //消息对象1、消息 TX 完成。 清除
    //消息目标中断。
    //
    CANIntClear (CANB_BASE、2);
    
    //
    //递增计数器以跟踪已有多少消息
    //已发送。 在实际应用中、这可用于将标志设置为
    //指示何时发送消息。
    //
    G_ulRxMsgCount++;
    
    //
    //由于消息已发送,请清除所有错误标志。
    //
    G_bErrFlag = 0;
    }
    
    //
    //否则,发生意外导致中断的情况。 这应该是
    //永远不会发生。
    //
    其他
    {
    //
    //可以在此处执行伪中断处理。
    //
    }
    
    CANGLALIntClear (CANB_BASE、CAN_GLB_INT_CANINT0);
    PieCtrlRegs.PIEACK.all = PIEACK_group9;
    }
    
    //
    主
    //
    int main (void)
    {
    //
    //步骤1. 初始化系统控制:
    // PLL、安全装置、启用外设时钟
    //此示例函数位于 F2837xD_SYSCTRL.c 文件中。
    //
    InitSysCtrl();
    
    //
    //步骤2. 初始化 GPIO:
    //此示例函数位于 F2837xD_GPIO.c 文件和中
    //说明了如何将 GPIO 设置为其默认状态。
    //
    InitGpio();
    /* GPIO_SetupPinMux (73、GPIO_MUX_CPU1、3);// GPIO 73 - XCLKOUT
    GPIO_SetupPinOptions (73、GPIO_OUTPUT、GPIO_PushPull);// SYSCLOCK/8 = 25MHz
    GPIO_SetupPinMux (30、GPIO_MUX_CPU1、1);// GPIO30 - CANRXA
    GPIO_SetupPinMux (31、GPIO_MUX_CPU1、1);// GPIO31 - CANTXA
    GPIO_SetupPinOptions (30、GPIO_INPUT、GPIO_异 步);
    GPIO_SetupPinOptions (31、GPIO_output、GPIO_PushPull);*/
    
    GPIO_SetupPinMux (17、GPIO_MUX_CPU1、2);//GPIO12 - CANRXB
    GPIO_SetupPinOptions (17、GPIO_INPUT、GPIO_异 步);
    GPIO_SetupPinMux (12、GPIO_MUX_CPU1、2);//GPIO17 - CANTXB
    GPIO_SetupPinOptions (12、GPIO_OUTPUT、GPIO_PushPull);
    
    //
    //初始化 CAN 控制器
    //
    CANInit (CANB_BASE);
    
    //
    //设置可根据 PLL 输出时钟计时(500kHz CAN 时钟)
    //
    CANClkSourceSelect (CANB_BASE、0);
    
    //
    //设置 CAN 总线的比特率。 此函数设置 CAN
    针对标称配置的//总线时序。 您可以实现更多控制
    //使用函数 CANBitTimingSet()代替 CAN 总线时序
    //如果需要。
    //在此示例中、CAN 总线设置为500kHz。 在以下函数中、
    //对 SysCtlClockGet ()的调用用于确定该时钟速率
    //用于为 CAN 外设计时。 可将其替换为
    //固定值如果您知道系统时钟的值,则节省额外的值
    //函数调用。 对于某些器件、CAN 外设采用固定计时
    // 8MHz,无论在哪种情况下调用的系统时钟如何
    // SysCtlClockGet ()应替换为80000。 请查阅数据
    //表以了解有关 CAN 外设计时的更多信息。
    //
    CANBitRateSet (CANB_BASE、200000000、500000);//500000*1 //在此将波特率设置为与28035相同
    
    //
    //在 CAN 外设上启用中断。 此示例使用静态
    //分配中断处理程序,表示处理程序的名称
    //位于启动代码的矢量表中。 如果您想使用动态的
    //分配矢量表,然后还必须调用 CANIntRegister()
    //此处。
    //
    CANIntEnable (CANB_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
    
    //
    //步骤3. 清除所有中断并初始化 PIE 矢量表:
    //禁用 CPU 中断
    //
    Dint;
    
    //
    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE 中断和标志
    //被清除。
    //此函数位于 F2837xD_PIECTRL.c 文件中。
    //
    InitPieCtrl();
    
    //
    //禁用 CPU 中断并清除所有 CPU 中断标志:
    //
    IER = 0x0000;
    IFR = 0x0000;
    
    //
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //这将填充整个表,即使是中断也是如此
    //在本例中未使用。 这对于调试很有用。
    //可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
    //此函数可在 F2837xD_PieVect.c 中找到
    //
    InitPieVectTable();
    
    //
    //此示例中使用的中断被重新映射到
    //此文件中的 ISR 函数。
    //在 RAM 矢量表中注册中断处理程序
    //
    EALLOW;
    PieVectTable.CANB0_INT = CANIntHandler;
    EDIS;
    
    //
    //在处理器(PIE)上启用 CAN 中断。
    //
    PieCtrlRegs.PIEIER9.bit.INTx7=1;
    IER |= 0x0100;// M_INT9
    EINT;
    
    //
    //启用测试模式并选择外部环回
    //
    
    
    //HWREG (CANB_BASE + CAN_O_CTL)|= CAN_CTL_IE0;
    //HWREG (CANB_BASE + CAN_O_CTL)|= CAN_CTL_TEST;
    // HWREG (CANB_BASE + CAN_O_TEST)= CAN_TEST_EXL;
    
    
    //
    //启用 CAN 以进行操作。
    //
    CANEnable (CANB_BASE);
    
    //
    //启用 CAN 全局中断线路0
    //
    CANGLALIntEnable (CANB_BASE、CAN_GLB_INT_CANINT0);
    
    //
    //初始化将用于发送 CAN 的消息对象
    //消息。 消息将是包含一个递增的4个字节
    //值。 最初它将设置为0x12345678。
    //
    //初始化将用于接收 CAN 的消息对象
    //消息。
    //
    *(unsigned long *) ucRXMsgData = 0;
    sRXCANMessage.ui32MsgID = 1; // CAN 消息 ID -使用1.
    sRXCANMessage.ui32MsgIDMask = 0; // TX 不需要掩码
    sRXCANMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE;//启用 RX 上的中断
    sRXCANMessage.ui32MsgLen = 8;//sizeof (ucRXMsgData);//消息大小为8
    sRXCANMessage.pucMsgData = ucRXMsgData; // ptr 至消息内容
    
    
    
    //
    //设置用于接收消息的消息对象
    //
    //CANMessageSet (CANB_BASE、2、&sRXCANMessage、MSG_OBJ_TYPE_RX);// 2是邮箱编号
    
    //
    //使用对象1发送 CAN 消息(与不一样
    // CAN ID、在本例中也是1)。 此函数将导致
    //要立即传输的消息。
    //
    
    
    
    while (1){
    CANMessageGet (CANB_BASE、1、&sRXCANMessage、TRUE);
    DELAY_US (1000*100);
    }
    
    }
    
    //EOF 
    /28035代码测试
    
    #include "DSP28x_Project.h" //设备头文件和示例包括文件
    
    #define TXCOUNT 100000 //传输将发生(TXCOUNT)次。
    
    长 I;
    long loopcount = 0;
    
    main()
    {
    
    //为 CAN 控制寄存器创建影子寄存器结构。
    
    由于只允许对这些寄存器进行32位访问、因此需要执行此操作。 对
    这些寄存器的16位访问可能会破坏寄存器内容。
    当写入位16 - 31 */
    
    struct ECAN_REGS ECanaShadow;
    
    // kill Watchdog、Init PLL、Enable peripheral Clocks 之间的位(或位组)时尤其如此
    
    InitSysCtrl();
    
    //初始化 CAN 模块*/
    
    InitECANa();
    InitECanGpio();
    
    EALLOW;
    
    /*写入 MSGID 字段*/
    
    ECANaMboxs.MBOX1.MSGID.ALL = 0x99999999;//扩展标识符
    
    //将被测邮箱配置为发送邮箱*/
    
    ECanaShady.CANMD.all = ECanaRegs.CANMD.all;
    ECanaShady.CANMD.bit.MD1 = 0;
    ECANaRegs.CANMD.ALL = ECANaShadure.CANMD.ALL;
    
    //启用待测邮箱*/
    
    ECanaShady.CANME.ALL = ECanaRegs.CANME.ALL;
    ECanaShading.CANME.bit.ME1 = 1;
    ECANaRegs.CANME.ALL = ECANaShadure.CANME.ALL;
    
    //写入消息控制寄存器中的 DLC 字段
    
    ECANaMboxs.MBOX1.MSGCTRL.bit.DLC = 8;
    
    //写入邮箱 RAM 字段
    
    ECANaMboxs.MBOX1.MDL.ALL = 0x55555555;
    ECANaMboxs.MBOX1.MDH.ALL = 0x55555555;
    
    //开始传输*/
    
    while (1) //取消注释此行以进行无限传输
    //for (I=0;I < TXCOUNT;I++) //取消对有限传输的此行的注释
    {
    ECanaShady.CANTRS.ALL = 0;
    ECanaShady.CANTRS.bit.TRS1=1; //为待测试的邮箱设置 TRS
    ECANaRegs.CANTRS.ALL = ECANaShady.CANTRS.ALL;
    
    ECanaShady.Canta.all = ECanaRegs.Canta.all;
    执行{ECanaShady.Canta.all = ECanaRegs.Canta.all;
    
    } //等待 TA1位被置位。
    while (ECanaShading.Canta.bit.TA1 = 0);
    
    ECanaShading.Canta.all = 0;
    ECanaShading.Canta.bit.TA1 = 1; //清除 TA5
    ECanaRegs.Canta.all = ECanaShady.Canta.all;
    
    循环计数++;
    }
    asm (" ESTOP0");
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不确定您为什么发布了您的代码。 一般而言、我们不会查看或调试用户代码、但我们会就与我们的器件和开发工具相关的特定问题向您提供帮助。 这包括在使用我们的器件进行设计时阐明任何位、寄存器或功能的行为。 请注意 、C2000Ware 中的所有外设都有示例代码。 我们建议将您的代码与示例代码进行比较、以确定问题可能存在的位置。 建议遵循标准和逻辑调试技术。 请继续调试您的代码、并随时使用此论坛提出具体问题。 问题越具体、我们就能越好地帮助您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想我发布了一个与此相关的问题、但未发布。 我的问题是在上面的示例代码中、我从 C2000ware 中使用了这些代码。 我没有收到28035代码上设置的确认位、但每次28035发送 Tx 消息时都会调用28379中的中断。

    另请参阅28035中的以下内容、在获取 Ack 之前、它重试发送数据的次数(作为测试、我从28379移除了 CAN H 和 CAN L 电缆、但28035仍继续发送数据。  

    ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
            do{ ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
            }   // Wait for TA1 bit to be set..
             while(ECanaShadow.CANTA.bit.TA1 == 0 );

    我能够在两个 LaunchPad 28379之间进行通信、但在28035和28379之间没有成功。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否已查看 SPRA876中的调试提示?

    [报价]同样在28035中、在获取 Ack 之前、它重试发送数据的次数是多少次、[/报价]

    永远。

    请捕获28035上 CANTX 引脚上的波形并发送。 波形必须非常清晰、就像在 SPRACE5中一样。 具体而言、我有兴趣查看28035末尾的位周期 当28035未连接至28379时、请进行此实验。 节点之间的比特率不匹配会导致大量总线错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是28035的 CANTX 引脚上的输出吗? 看起来不错、但您能否提供示波器捕获。 希望查看位宽。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这来自28035的 TX 引脚。

    下面是当我在 TX 模式中有28035并且我的蓝色引脚连接到28035的 TX 时的屏幕截图。

    红色表示从28379 Launchpad 上的收发器接收信号的 Rx。 看起来所有硬件配置都是正确的。

    在28035侧、我放置了  

    ECanaShady.CANBTC.bit.BRPREG = 5;
    ECANaShady.CANBTC.bit.TSEG2REG = 1;
    ECANaShady.CANBTC.bit.TSEG1REG = 6;

    而在  CANBitRateSet (CANB_BASE、200000000、(500*1000)上);

    因此、如果我在28379的 RX ISR 上放置断点、它将停止并设置错误位。  该 CANStatusGet (CANB_BASE、CAN_STS_CONTROL)的值 不等于2。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    4.614/2 = 2.307us、转换为433.463kbps。 我认为28379的运行速率为500kbps。 您似乎没有根据我的建议更改 CANBTC 值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为我执行的值与您提到的完全相同、并且我已使用寄存器值更新了我的上一篇文章。

    我认为我以前测量的不正确。 当前检查计时。  

    此外 、28035的 Tseg1和 Tseg2必须与28379相同(我没有在28379中修改任何内容?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现在比特率看起来正确(500kbps)。 TSEG1和 TSEG2调整该位的采样点。 应根据总线长度、收发器的传播延迟、位速率等选择 SP 这取决于网络。 您是否了解了 SPRACE5中的调试提示并尝试了这些建议? 如果没有、请先尝试这些。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我检查了 SPRACE5。 我首先使用长度约为15mm 的跳线对其进行测试。 我的问题是、由于我没有在28379上设置 TSEG1和 TSEG2、这是否会成为问题? 我在28035上执行它、这会使它不完全匹配。

    28379的收发器上的 RX 具有正确的数据、但不会存储在邮箱中。 即使我手动尝试从该邮箱获取数据、它也不起作用。

    我尝试使用另一个邮箱、但仍然遇到了这个问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述]由于我没有在28379上设置 TSEG1和 TSEG2、这会是个问题吗? 我在28035上执行它、这会使它不完全匹配。

    您可能不会意识到它、但您使用的 Driverlib 函数确实会设置这些值。 检查 CCS 中的 CANBTR 寄存器值以对值进行解密。 (我已在 SPRACE5的第13和14页中对此进行了清楚说明)。

     

    [引用] 28379的收发器上的 RX 具有正确的数据、但它没有存储在邮箱中。 即使我手动尝试从该邮箱获取数据、它也不起作用。 [/报价]

    因此、您会说在一直到28379的 CANRX 引脚(因为收发器上的 RX 连接到28379的 CANRX)之间可以看到正确的数据、但在28379中未接收到数据。 您是否在 CCS 存储器窗口中直接看到邮箱 RAM 区域?

     

    [报价]我尝试使用另一个邮箱、但仍然遇到了这个问题。 [/报价]

    我看到28035端的 MSGID 是0x19999999、而28379端的 MSGID 是1。 在这种情况下、接收将不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、你的第一点是有道理的、但是我担心与28035相比、驱动程序库 func 是否设置了其他东西。 我将在 CCS 中检查 CANBTR 以再次确认。

    2.我在范围内见过。 我已经发布了28035和 Rx 引脚28379的 TX 引脚的屏幕截图、并在这里再次发布。 我是否可以通过任何方式在 CCS 上查看邮箱 RAM 区域?

    3)是的、我使 msg ID 在两端都保持为0x01。

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     

     

    [引用]您的第一点很有意义、但我担心与28035相比、驱动程序库 func 是否设置了其他内容。 我将在 CCS 中检查 CANBTR 以再次确认。 [/报价]

    您可以手动写入任一器件上的计时寄存器、并使 TSEG 值相同。

     

    [引述]我在范围中看到过。 我已经发布了28035和 Rx 引脚28379的 TX 引脚的屏幕截图、并在这里再次发布。 我是否可以通过任何方式在 CCS 上查看邮箱 RAM 区域? [/报价]

    示波器波形必须非常清晰。 一个通道应显示28035的 CANTX 引脚、另一个通道应显示28035的 CANRX 引脚。 除了 ACK 位外、两个通道上的波形必须相同。 请参阅 SPRACE5的图4。 这就是波形的清晰程度。 您的波形看起来不像在示波器上捕获的波形。 您使用什么工具?

     

    [引用]是的、我使 msg ID 在两端都保持为0x01。 [/报价]

    代码段中的以下内容:

     

    28379侧面:

    sRXCANMessage.ui32MsgID = 1;                    // CAN 消息 ID -使用1

    28035侧:

    ECANaMboxs.MBOX1.MSGID.ALL = 0x99999999;//扩展标识符

     

    除此之外、我没有任何想法可以帮助您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1)我正在使用 PicoScope 示波器捕获信号。

    2)那么、我共享的波形不代表正确的通信形式? 它看起来是相同的信号、但我在28035 Tx 收发器和28379 RX 转换器处进行捕获、并且我使用 VP234作为收发器。  

    3)是的、我已经在28035上更新了 ECANaMboxs.MBOX1.MSGID.ALL = 0x00040000。  

    tCANMsgObject sRXCANMessage;  

    sRXCANMessage.ui32MsgID = 0x00040000;是否应将其设为0x01,就在28379D 中?

    我是否可以通过某种方式直接查看邮箱 RAM?

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用]2)那么我共享的波形并不代表正确的通信形式? 它看起来是相同的信号、但我在28035 Tx 收发器和28379 RX 转换器处进行捕获、并且我使用 VP234作为收发器。 [/报价]  

    否 我在上一个帖子中明确提到以下内容:

    '一个通道应显示28035的 CANTX 引脚、另一个通道应显示28035的 CANRX 引脚。 两个通道上的波形必须相同、但 ACK 位除外"。

    Space5解释了为什么、甚至还有一个示波器快照可以清楚地识别 ACK 信号。  

    我建议您下载最新版本的 C2000ware、并尝试 SPRACE5中包含的示例。  

    [引用]我是否可以直接查看邮箱 RAM? [/报价]

    是的、您只需在 CCS 的"Memory"窗口中显示邮箱 RAM 区域。 下图显示了从邮箱1开始的 RAM 区域:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于不活动而关闭线程。