完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Hi Toby,
在我们的M4芯片的TIVA-ware里面有一个example文件夹,在里面的peripheral文件下面有关于CAN总线通信的两个例程。你可以参考一下那里面相关的代码。接收端和发送端都有的。 如果你没装tiva-ware,我上传了一下几个源文件,你可以下载看一下。 希望对你有所帮助。 谢谢 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-6-7 04:50 Hi Ken, 谢谢你的回复! TI的库文件我都有,包括example,并且我使用过里面的RX和TX例程,单独使用RX或TX都正常。 我现在将它们融合到一起 想用一块板子同时实现RX和TX,不知道有没有这样的例程。谢谢。 |
|
|
|
Hi Toby, 我们现在M4的板子上面基本没带CAN的收发芯片,所以就没有现成的关于CAN通信的例程。 在我们早期的M3的板子LM3S8962的例程里面有关于CAN通信的几个实例,你可以参考一下。 另外,你在设计同时使用RX和TX的过程中,具体遇到了什么样的问题呢,我觉得这两个联合起来操作应该不会有太多的问题。 谢谢 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-6-7 05:20 Ken, 了解,我现在用的LM3S2965的板子。因为对CAN不熟,所以想找找看有没有参考程序。 如果没有的话,我自己再搞搞看。 谢谢你。 |
|
|
|
Hi Toby, Ok, 没问题,你可以先自己搞搞看,到时候有什么具体的问题,可以再提出来,我们可以再讨论。 谢谢 ken BR, KEN |
|
|
|
Hi Ken, 以下CAN部分初始化代码是我根据LM3S2965的example中的例程修改而来。 当我屏蔽掉TX或RX其中一个,另一个都能正常工作。 现在同时使能TX和RX时,可以正常往外发送数据,RX与TX 都能正常进入中断程序, 并且将接收到的数据用UART发送到电脑,结果发送出来的ID是结构体sCANMessage_TX中的ID信息。 tCANMsgObject sCANMessage_TX; tCANMsgObject sCANMessage_RX; // 以下是配置CAN TX部分报文初始化。 *(unsigned long *)ucMsgData_TX = 0; sCANMessage_TX.ulMsgID = 0x000007DF; // CAN message ID - use ECU's ID:0x000007DF sCANMessage_TX.ulMsgIDMask = 0; // no mask needed for TX sCANMessage_TX.ulFlags = MSG_OBJ_TX_INT_ENABLE; // enable interrupt on TX sCANMessage_TX.ulMsgLen = sizeof(ucMsgData_TX); // size of message is 8 sCANMessage_TX.pucMsgData = ucMsgData_TX; // ptr to message content // 以下代码是配置CAN RX部分报文初始化。 // // Initialize a message object to be used for receiving CAN messages with // any CAN ID. In order to receive any CAN ID, the ID and mask must both // be set to 0, and the ID filter enabled. // sCANMessage_RX.ulMsgID = 0; // CAN msg ID - 0 for any sCANMessage_RX.ulMsgIDMask = 0; // mask is 0 for any ID sCANMessage_RX.ulFlags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER; sCANMessage_RX.ulMsgLen = 8; // allow up to 8 bytes // 以下是CAN RX 数据由UART发送至PC。 // // Print out the contents of the message that was received. // UARTprintf("Received Msg:ID=0x%08X len=%u data = 0x", sCANMessage_RX.ulMsgID, sCANMessage_RX.ulMsgLen); for(uIdx = 0; uIdx < sCANMessage_RX.ulMsgLen; uIdx++) [ UARTprintf("%02X ", ucMsgData_RX[uIdx]); ] UARTprintf(" total count = %un", g_ulMsgCount_RX); 不知道还有什么地方没有注意到,才出现这个问题。 |
|
|
|
kangt 发表于 2018-6-7 05:53 Hi Toby, 你是指打印出来的ID是发送报文的ID符是吧,那接收到的报文数据都是正确的吗? 由于我现在没有板子在手上做测试,我觉得你可以先这样测试一下,首先设定一个端点到接收中断那边,通过单步调试,并通过查询接收数据的寄存器里面是否真正的收到了数据,具体的ID是多少,这个应该再系统寄存器里面可以看得到。 只有真正确定接收端收到了正确的数据,才好判断问题出在哪。 明天有空,我会用我手上的板子跑一下CAN的程序,然后再进一步回答你的问题。 谢谢 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-6-7 06:12 Hi Ken, 按照你的方法测试过,接收数组ucMsgData_RX里面确实没有数据。 因为MCU同时在向外发送数据,并且有发送中断。我将如下发送数据的语句屏蔽掉之后,接收数组ucMsgData_RX就可以正常收到数据。 CANMessageSet(CAN0_BASE, 1, &sCANMessage_TX, MSG_OBJ_TYPE_TX); 怀疑是不是buffer没处理好的问题,导致在发送的同时 接收到的数据处理没处理成功。 |
|
|
|
kangt 发表于 2018-6-7 06:29 Hi Toby, 很高兴看到你的进展。你屏蔽的那句话的作用是设置发送数据到具体的Message OBJ 里面,如果你是把它去掉然后能收到正确的数据的话,那说明你接收数据和发送数据的buffer应该是有冲突了。 你可以改改接收端或是发送端的buffer定义看看。 谢谢 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-6-7 06:47 Hi Ken, 确实是buffer定义的问题,现在已经解决了。 谢谢你耐心的指导。 |
|
|
|
Hi Toby, 不客气,后续有任何关于TI MCU的问题,随时欢迎到我们的论坛里交流。 谢谢 ken BR, KEN |
|
|
|
朋友是怎么解决CAN里面bufer的问题的,601245579,请帮忙,谢谢 |
|
|
|
只有小组成员才能发言,加入小组>>
351 浏览 1 评论
546 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
790 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
660 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
87浏览 29评论
320浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
262浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
210浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
69浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 01:07 , Processed in 0.913217 second(s), Total 69, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号