在线时间382 小时
UID251816
注册时间2010-12-3
NXP金币0
TA的每日心情 | 开心 2024-4-5 11:15 |
---|
签到天数: 1061 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 4979
- 最后登录
- 2024-5-31
|
本帖最后由 FSL_TICS_ZJJ 于 2014-9-12 10:07 编辑
最近在研究K20的CAN,发现不知道怎么设置FlexCAN可以让接受缓冲区可以接受任意CAN消息,包括任意ID,标准帧或扩展帧。请帮助解决一下。
用了PE 也看了一下别人的程序,都是利用函数直接设置固定ID的方式。
发送没有问题,程序可以直接发送任意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);
基本上可以说是完美解决了。
|
|