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.

[参考译文] CCS:F28M36P63C2上的 CAN 协议

Guru**** 2756835 points

Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/849082/ccs-can-protocol-on-f28m36p63c2

工具/软件:Code Composer Studio

您好!

我第一次想在 M3上实施 CAN 协议,但它不起作用...也许我没有使用 CAN API

因此、代码是:

int main(){

 //设置 PLL、M3以75MHz 运行、C28以150MHz 运行
   SysCtlClockConfigSet (SYSCTL_USE_PLL |(SYSCTL_SPLLIMULT_M & 0xF)|
                        SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 |
                        SYSCTL_XCLKDIV_OFF);
  SysCtlPeripheralEnable (SYSCTL_Periph_CAN0);

  SysCtlGPIOAHBEnable (SYSCTL_PERIPH_GPIOD);

  GPIOPinConfigure (GPIO_PD0_CAN0RX);
   GPIOPinConfigure (GPIO_PD1_CAN0TX);
   GPIOPinTypeCAN (GPIO_PORTD_AHB_BASE、
         GPIO_PIN_0 | GPIO_PIN_1);//CAN0

//初始化 CAN 控制器
        CANInit (CAN0_BASE);

        //设置可以根据 M3/主子系统时钟计时
       CANClkSourceSelect (CAN0_BASE、CAN_CLK_M3);

      // CANBitRateSet (CAN0_BASE、8000000、1000000);

        CANBitRateSet (CAN0_BASE、80000、50000);
        CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
        //在 RAM 矢量表中注册中断处理程序

        CANIntRegister (CAN_INT_IE0、0、CANIntHandler);
        


        CANEnable (CAN0_BASE);

tCANMsgObject sTXCANMessage;

   unsigned char messagetosend[3];

   messagetosend[0]= 0x10;
   messagetosend[0]= 0x11;
   messagetosend[0]= 0x12;



      sTXCANMessage.ulMsgID = 0x100;                       // CAN 消息 ID -使用1
      sTXCANMessage.ulMsgIDMask = MSG_OBJ_NO_FLAGS;                   // TX 不需要掩码
      sTXCANMessage.ulFlags = 0;   //在 TX 上启用中断
      sTXCANMessage.ulMsgLen = sizeof (messagetosend);    //消息大小为4
      sTXCANMessage.pucMsgData = messagetosend;          // ptr 至消息内容

      CANMessageSet (CAN0_BASE、1、&sTXCANMessage、MSG_OBJ_TYPE_TX);



是否要帮助我找到解决方案?

我们将感谢您的每一个帮助。

听从你的意见…

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

    尊敬的 Salvatore Ercole:  

    您能不能更具体地告诉我们哪些不起作用。  您是否在 CANTX 引脚上看到任何活动?  您能否提供 CANTX 引脚活动的示波器捕获?

    请查看此应用手册中的调试提示。  http://www.ti.com/lit/an/sprace5/sprace5.pdf 在第3节中。 您几乎总是会在那里找到您的解决方案。  

    此外、请在 以下位置运行示例  :C:\ti\controlSUITE\device_support\f28m36x\v220\F28M36x_examples_Master\CAN_loopback\m3。此示例在自检模式下运行。  由于 EXL=1、您应该在 CANTX 引脚上看到一些活动。  

    请告知我们、如果您能够通过上述建议解决您的问题。

    谢谢!

    Krishna   

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

    您好、Krishna Allam、

    我终于找到了解决办法...为了解决这个问题,我首先定义了 CAN 消息,并使用了 CANEnable()和 CANTX 引脚开始改变的指令...

    但我对邮箱有疑问...如果他们只有32个邮箱,以便发送/接收 CAN 消息,那么如果我想使用32个以上的消息,会发生什么情况?

    再次感谢您的帮助、

    萨尔瓦托雷