打印
[Kinetis]

[以解决]请问K20的CAN总线如何设置为可以接收任意信息

[复制链接]
1921|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
coslight|  楼主 | 2014-9-10 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 coslight 于 2014-9-12 08:38 编辑

根据官方提供的例程,现在CAN总线的收发没有问题了,已经测试了,然后想设置如何让K20可以接收到任意ID,无论标准帧还是扩展帧。不知道有没有人研究过的给个提示。

通过版主和网友帮助,问题以解决,在例程基础上的解决方法:

通过设置:
                        CANx->RX14MASK = 0;
                        CANx->RX15MASK = 0;
                        CANx->RXFGMASK = 0;
同时必须注释掉:
                CANx->MCR   |=  CAN_MCR_SRXDIS_MASK |       /* SRXDIS = 1 (Self Reception Disable)*/
//                                            CAN_MCR_IRMQ_MASK |         /* IRQM = 1 (Individual Rx Msk and Q) */
                                 CAN_MCR_MAXMB(15) ;         /* Number of Mailboxes is 16          */
共同配合,已经成功的实现了在RXMB14接收任意ID的信息。
另外,将RXMB初始化为接收扩展帧,可以成功的接收到标准帧和扩展帧。
        CAN_RxObject (CAN0, 14, 0, 1);

相关帖子

沙发
coslight|  楼主 | 2014-9-11 07:54 | 只看该作者
自己顶一下,这个英文手册没有找到怎么去掉这种掩码设置

使用特权

评论回复
板凳
coslight|  楼主 | 2014-9-11 07:55 | 只看该作者
用PE也无法生成这种代码,以前用过别的微控制器都是具有这种功能的。

使用特权

评论回复
地板
jd972594| | 2014-9-11 09:06 | 只看该作者
可以标准帧and扩展帧都接收?这倒没有试过,因为以前总线上这种都是统一的。

使用特权

评论回复
5
coslight|  楼主 | 2014-9-11 10:44 | 只看该作者
jd972594 发表于 2014-9-11 09:06
可以标准帧and扩展帧都接收?这倒没有试过,因为以前总线上这种都是统一的。

...

ID的过滤如何去掉呢

使用特权

评论回复
6
coslight|  楼主 | 2014-9-11 10:45 | 只看该作者
jd972594 发表于 2014-9-11 09:06
可以标准帧and扩展帧都接收?这倒没有试过,因为以前总线上这种都是统一的。

...

标准帧和扩展帧我可以分别开两个缓冲区,这个应该没问题

使用特权

评论回复
7
FSL_TICS_Robin| | 2014-9-11 11:00 | 只看该作者
本帖最后由 FSL_TICS_Robin 于 2014-9-11 11:12 编辑
coslight 发表于 2014-9-11 10:44
ID的过滤如何去掉呢

楼主稍等
我去看一下MK20DX256VLL7芯片CAN的ID过滤机制

使用特权

评论回复
8
coslight|  楼主 | 2014-9-11 11:13 | 只看该作者
我刚才看了一眼,是不是要设置
                        CANx->RXFGMASK = 0;
                        CANx->RX14MASK = 0;
                        CANx->RX15MASK = 0;
来取消掩码过滤功能。

使用特权

评论回复
9
coslight|  楼主 | 2014-9-11 11:14 | 只看该作者
但是感觉标准帧和扩展帧应该是不能同时兼容的,cs的只有一位来表示
                cs = CAN_CS_IDE_MASK ;
你置上就是扩展帧,没商量啊

使用特权

评论回复
10
FSL_TICS_Robin| | 2014-9-11 11:21 | 只看该作者
coslight 发表于 2014-9-11 11:13
我刚才看了一眼,是不是要设置
                        CANx->RXFGMASK = 0;
                        CANx->RX14MASK = 0;

置1的位会去比较、如果全置0了就不会过滤ID了。

使用特权

评论回复
11
FSL_TICS_Robin| | 2014-9-11 11:48 | 只看该作者
给你个K系列的培训稿——FlexCAN
下载了看一下吧,应该比光看参考手册要清晰的多。

使用特权

评论回复
12
coslight|  楼主 | 2014-9-11 12:04 | 只看该作者
多谢解答,先下来学习

使用特权

评论回复
13
coslight|  楼主 | 2014-9-11 12:05 | 只看该作者
下不来啊,能不能上传到这里啊,谢谢

使用特权

评论回复
14
jd972594| | 2014-9-11 13:56 | 只看该作者
coslight 发表于 2014-9-11 12:05
下不来啊,能不能上传到这里啊,谢谢

需要注册后才能下载的,建议你注册一下吧。
那些培训材料非常好

使用特权

评论回复
15
jd972594| | 2014-9-11 13:57 | 只看该作者
FSL_TICS_Robin 发表于 2014-9-11 11:48
给你个K系列的培训稿——FlexCAN
下载了看一下吧,应该比光看参考手册要清晰的多。

发现新大陆啊,居然那么多内部培训资料。
收藏了

使用特权

评论回复
16
coslight|  楼主 | 2014-9-12 08:35 | 只看该作者
晚上回去对这些进行了测试,得到如下结论。
通过设置:
                        CANx->RX14MASK = 0;
                        CANx->RX15MASK = 0;
                        CANx->RXFGMASK = 0;
同时必须注释掉:
                CANx->MCR   |=  CAN_MCR_SRXDIS_MASK |       /* SRXDIS = 1 (Self Reception Disable)*/
//                                            CAN_MCR_IRMQ_MASK |         /* IRQM = 1 (Individual Rx Msk and Q) */
                                 CAN_MCR_MAXMB(15) ;         /* Number of Mailboxes is 16          */
共同配合,已经成功的实现了在RXMB14接收任意ID的信息。
另外,将RXMB初始化为接收扩展帧,可以成功的接收到标准帧和扩展帧。
        CAN_RxObject (CAN0, 14, 0, 1);

至此,所提问题均已得到解决。
此贴如无问题可以结贴了。

使用特权

评论回复
17
coslight|  楼主 | 2014-9-12 08:36 | 只看该作者
同时感谢版主和各位网友的帮助

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

928

帖子

5

粉丝