接触DSP不久,在学习官方CAN通讯的DEMO中遇到问题
设置好MsgID,设置好RX的邮箱和TX的邮箱后,使用CANMessageGet这个函数的时候。如果在线调试的时候进行逐步调试Step Into 的话,会发现函数将tCANMsgObject中的数字都清零,但是如果设置好断点直接跳到下一行,会发现通讯正常。
上面这个是使用直接跳到断点通讯正常的情况,下面是在第一个GET中进行逐步运行的时候无法正常通讯的情况,而且可以看到把sRXCANMessage中全部清零了。
在我尝试将这个CPU1的CAN通讯的DEMO移植到CPU2中并且加上GSRAM和CPU1进行核间通讯的时候,也出现了类似的问题,sRXMessage中被清零而且传输失败。
Susan Yang:can_loopback测试主要功能是将数据从CANTX引脚传输到CANRX引脚,并检查发送的数据是否等于接收的数据。初始传输的数据为0,每次递增1,这实际上是在CANTX引脚上以ASCII字符传输所有组合。这实际上是一项内部测试,检查CAN模块和引脚的基本功能。
如果要从外部接收或发送消息,请使用can_external_transmit。路径为 C:\ti\c2000\C2000Ware_2_00_00_02\driverlib\f2837xd\examples\cpu1\can
在can_external_transmit示例中,您需要将CANTX和RX引脚连接到收发器(例如SN65HVD233或类似产品),以便将CAN模块连接到CAN网络。
因为将CAN连接到网络的CAN总线依赖于差分信号,所以即使在嘈杂的环境中也能可靠地运行。收发器将CANTX和RX信号从CAN模块转换为差分信号。建立与CAN网络的连接后,节点之间才能完全通信。在示例can_external_transmit.c中,CAN模块A发送数据,而CAN模块B从同一28377D芯片接收数据。只要模块连接到CAN网络,就可以扩展测试,以便可以使用CAN模块从其他设备发送/接收数据。
接触DSP不久,在学习官方CAN通讯的DEMO中遇到问题
设置好MsgID,设置好RX的邮箱和TX的邮箱后,使用CANMessageGet这个函数的时候。如果在线调试的时候进行逐步调试Step Into 的话,会发现函数将tCANMsgObject中的数字都清零,但是如果设置好断点直接跳到下一行,会发现通讯正常。
上面这个是使用直接跳到断点通讯正常的情况,下面是在第一个GET中进行逐步运行的时候无法正常通讯的情况,而且可以看到把sRXCANMessage中全部清零了。
在我尝试将这个CPU1的CAN通讯的DEMO移植到CPU2中并且加上GSRAM和CPU1进行核间通讯的时候,也出现了类似的问题,sRXMessage中被清零而且传输失败。
user6025097:
回复 Susan Yang:
谢谢您的回复!是我没有说清楚,其实我现在还没有连接外部设备,只是用Loopback来测试一下通讯是否正常。测试时发现,使用demo里面的CANMessageGet函数的时候,如果在仿真的时候进行步进仿真(step in),会导致回环通讯失败(且不应该被清零的地方被清零)。但是如果通过设置断点直接让程序运行到下一行,则通讯正常。
这个问题困扰了我很久,同时,在我另一个工程中,我试图将demo中的程序进行一定的改写并和cpu2的GSRAM程序进行合并(此时我用于合并的CAN程序也是loopback),合并后也会出现同样的错误现象。