TI中文支持网
TI专业的中文技术问题搜集分享网站

CAN例程使用问题

Other Parts Discussed in Thread:C2000WARE

can_ex5_transmit_receive.c  这个例程,由发送转成接收功能,接收的数据,只能有28388D发出,才能接收到吗?

我这边,尝试通过STM32给28388D发送数据,但是接收不到任何数据。

对例程can_ex5_transmit_receive.c,只是将transmit的宏定义注释了,其他的没有动

特来请教

谢谢

Green Deng:

你好,根据例程的描述,只要把定义的TRANSMIT注释掉就可以将这个例程由收发功能转换为仅接收功能,并接收来自外部的can收发器信号。能否确定下来是硬件问题还是软件问题?即,你的接收端和发送端是否都有信号?发送端can邮箱的设置是否正确?

,

@vince:

发送端是由STM32F407发出的,我用示波器测试了一下CANH和CANL,是有差分图形的。接收端的话,如何测试是否有信号呢?

发送端can邮箱的设置,STM32F407是我们系统CAN通信的发送数据端。该如何设置他的CAN邮箱,使得STM32发的消息,28388D的CANA能接收到呢?

现在数据传输,使用的是C:\ti\c2000\C2000Ware_3_03_00_00\driverlib\f2838x\examples\c28x\can中的例程can_ex5_transmit_receive.c,目前我只把例程中的transmit的宏定义注释了(如下图)。程序中的其他地方,改动后尝试没效果,又用原例程替换了。

特来请教

谢谢

,

@vince:

我想的是,STM32那边,也就是发送数据端不进行任何改动。然后,28388D这边,我将ID掩码设置为0x1FFFFFF0或者设置成0x00000000,即接收数据端,忽视过滤,这样的话,28388D的CANA应该可以接收到任意ID的数据吧

,

@vince:

还有个想法是,STM32那边,也就是发送数据端不进行任何改动。然后,28388D这边,我将ID掩码设置为0x1FFFFFF0或者设置成0x00000000,即接收数据端,忽视过滤,这样的话,28388D的CANA应该可以接收到任意ID的数据吧

,

@vince:

您好,STM32发送,28388D接收数据的过程,已实现,谢谢,辛苦您了

,

@vince:

多谢您的帮助

,

Green Deng:

客气了,没帮到多少忙。我还正在分析你的问题既然你这边已经解决,那就恭喜了。
方便的话可以分享一下你的解决经验,供后续其他工程师参考。

,

@vince:

研究例程的过程中,看到上图这个地方,修改了下图中的flag位置(4),就能够接收任意ID的数据。

3的位置,是需要与发送端(我的是STM32F407)的模式配置一致(都为STD或者都为EXT)

2的位置,本身是0x00000001,我修改为0x00000000,这样改是为了将过滤器忽略(这也是一直接收不到STM32数据的原因)

2、3、4按照上述,修改完毕后,1的位置,无论如何改msgID(当然,这个地方的ID长度要注意一下,它是与3的位置配置的STD和EXT模式相关,STD模式不能超过11位,EXT不能超过29位),都不影响数据的接收。

STM32F407发送数据,F28388D接收数据的过程,按照上述修改,可以实现调通。

,

Green Deng:

Tips:中文论坛的图片需要在回复框右下角的“使用高级编辑器编辑文本”中点击“图片上传”按钮进行上传,不能直接复制粘贴。

,

@vince:

对的,我就是按照您说的上传的,您那边是看不到图片吗?要不重新传一下?

,

Green Deng:

确实看不到,有时间的话还烦请重新上传一下。

,

@vince:

好的

,

@vince:

研究例程的过程中,看到上图这个地方,修改了下图中的flag位置(4),就能够接收任意ID的数据。

3的位置,是需要与发送端(我的是STM32F407)的模式配置一致(都为STD或者都为EXT)

2的位置,本身是0x00000001,我修改为0x00000000,这样改是为了将过滤器忽略(这也是一直接收不到STM32数据的原因)

2、3、4按照下图,修改完毕后,1的位置,无论如何改msgID(当然,这个地方的ID长度要注意一下,它是与3的位置配置的STD和EXT模式相关,STD模式不能超过11位,EXT不能超过29位),都不影响数据的接收。

STM32F407发送数据,F28388D接收数据的过程,按照上述修改,可以实现调通。

,

@vince:

现在可以了?

,

Green Deng:

可以了,非常感谢你的分享!

,

@vince:

多亏您的提点

,

@vince:

CAN通讯,接收数据的长度上,例程中,一次最多能接收8个字符,查找了资料,CAN一次好像只能发送或者接收8个字节。现在想接收一条128个字节的数据。

我的想法是,将128个字节,分成16次发送,每次8个字节。
接收端,主要是对CAN_readMessage(CANA_BASE, RX_MSG_OBJ_ID, rxMsgData)这一句,加上for循环(这个循环,加在了CAN_readMessage(CANA_BASE, RX_MSG_OBJ_ID, rxMsgData)的位置)

这样的话,循环里,就出现一个问题,第一次接收的8个字节,会被后面接收的8个字节覆盖了,以至于最后显示的数据,不是想要的数据。我是尝试,将每一次接收的数据,填充到 rxMsgData中新的位置。主要是我没太理解CAN_readMessage(CANA_BASE, RX_MSG_OBJ_ID, rxMsgData)这个语句的正确用法,以至于,最后还是被覆盖了。
要想实现上述的功能,该如何添加语句,使得功能能够正常实现呢

特来请教

多谢

,

@vince:

已解决

赞(0)
未经允许不得转载:TI中文支持网 » CAN例程使用问题
分享到: 更多 (0)