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.

Hercules MCU CAN 总线多 messagebox通信实例(包含接收发送端源码)

Other Parts Discussed in Thread: HALCOGEN, TMS570LS0332, TMS570LS3137

大家好,

    在我们的论坛里面,经常看到关于CAN总线通信的问题。有很多人反应CAN总线通信有问题,或者是说我们的CAN messagebox太多,不太会配置。其实我们的CAN 模块功能非常的强大,它可以实现单节点多ID符的接收和发送操作。这个在实际应用过程中,使用起来非常更方便,下面我就简单介绍一下我设计的这个例程:

     a. 在HALCOGEN中使能 CAN模块。

     

     b. 在CAN的配置界面中,默认采用500kbps的通信速率,同时选择符合CAN2.0A的标准11位ID符(方便和其他常规的CAN 控制器通信)

     c. 分别配置发送和接收端的message box。 如果需要采用中断接收的话,记得使能中断。

     d. 使能CAN接收中断VIM channel

e. 生产代码

 在原工程代码中,为了方便我们测试,我加入了RTI定时中断来发送CAN 报文信息:

接收报文我采用了中断的方式:

具体的源代码可以参考附件。希望对大家有所帮助。

谢谢!

ken

  • ken,你好。

           我运行这里面的程序的时候,不能进入中断,通过使用断点发现运行到rtiStartCounter(rtiCOUNTER_BLOCK0);出错,程序就停了。这是什么原因?

  • weibin,

      你用的是什么硬件呢?关于RTI部分的设置有没有检查一下,有没有使能RTI,同时配置相关的RTI中断呢?

    谢谢

  • Ken,你好

     

           我用的是TMS570LS3137的开发板,我重配置了RTI,程序能够进入实时中断,但是没有进入接收中断,以下截图是CAN1寄存器的数据。发送中断的设置和你给的配置一样,这是什么原因导致没有产生接受中断?

  • weibin,

     你现在描述的是系统没有进入CAN的接收中断是吧。这是个常见的问题,首先你先确定一下,你在CAN通信时双方的ID设置。即接收方设置的ID过滤是不是允许你发送端的ID通过。很多情况下都是由于这个导致接收失败的。

    谢谢

  • Ken 你好!

             我查看了技术手册,只看到“The Arbitration bits ID[28:0], Xtd, and Dir are used to define the identifier and type of outgoing messages and (together with the Mask bits Msk[28:0], MXtd, and MDir) for acceptance filtering of incoming messages.”但是,我还是不明白具体怎么配置发送和接受方的ID匹配?

             就比如说你上传的这个例子。邮箱1配置为接受,ID为0x580,邮箱5为对应的发送方,ID为0x680,这样怎么能说明匹配??麻烦您给我解释下

     

    谢谢