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

[复制链接]
2329|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扩展帧都接收?这倒没有试过,因为以前总线上这种都是统一的。

 楼主| coslight 发表于 2014-9-11 10:44 | 显示全部楼层
jd972594 发表于 2014-9-11 09:06
可以标准帧and扩展帧都接收?这倒没有试过,因为以前总线上这种都是统一的。

...

ID的过滤如何去掉呢
 楼主| coslight 发表于 2014-9-11 10:45 | 显示全部楼层
jd972594 发表于 2014-9-11 09:06
可以标准帧and扩展帧都接收?这倒没有试过,因为以前总线上这种都是统一的。

...

标准帧和扩展帧我可以分别开两个缓冲区,这个应该没问题
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过滤机制

 楼主| coslight 发表于 2014-9-11 11:13 | 显示全部楼层
我刚才看了一眼,是不是要设置
                        CANx->RXFGMASK = 0;
                        CANx->RX14MASK = 0;
                        CANx->RX15MASK = 0;
来取消掩码过滤功能。
 楼主| coslight 发表于 2014-9-11 11:14 | 显示全部楼层
但是感觉标准帧和扩展帧应该是不能同时兼容的,cs的只有一位来表示
                cs = CAN_CS_IDE_MASK ;
你置上就是扩展帧,没商量啊
FSL_TICS_Robin 发表于 2014-9-11 11:21 | 显示全部楼层
coslight 发表于 2014-9-11 11:13
我刚才看了一眼,是不是要设置
                        CANx->RXFGMASK = 0;
                        CANx->RX14MASK = 0;

置1的位会去比较、如果全置0了就不会过滤ID了。
FSL_TICS_Robin 发表于 2014-9-11 11:48 | 显示全部楼层
给你个K系列的培训稿——FlexCAN
下载了看一下吧,应该比光看参考手册要清晰的多。

 楼主| coslight 发表于 2014-9-11 12:04 | 显示全部楼层
多谢解答,先下来学习
 楼主| coslight 发表于 2014-9-11 12:05 | 显示全部楼层
下不来啊,能不能上传到这里啊,谢谢
jd972594 发表于 2014-9-11 13:56 | 显示全部楼层
coslight 发表于 2014-9-11 12:05
下不来啊,能不能上传到这里啊,谢谢

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

jd972594 发表于 2014-9-11 13:57 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-9-11 11:48
给你个K系列的培训稿——FlexCAN
下载了看一下吧,应该比光看参考手册要清晰的多。

发现新大陆啊,居然那么多内部培训资料。
收藏了
 楼主| 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);

至此,所提问题均已得到解决。
此贴如无问题可以结贴了。
 楼主| coslight 发表于 2014-9-12 08:36 | 显示全部楼层
同时感谢版主和各位网友的帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

928

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部