查看: 4896|回复: 7

[已解决] 请教KEA CAN模块设置为四个16位过滤器的问题

[复制链接]

该用户从未签到

1

主题

30

帖子

0

中级会员

Rank: 3Rank: 3

积分
279
最后登录
2020-12-20
发表于 2017-2-5 10:28:59 | 显示全部楼层 |阅读模式
将KEA的CAN过滤器设置为四个16位, 用的是官方KE06的库, 具体设置如下:

/* 定义四个接收ID */
#define Rx_ID1                        0x201   
#define Rx_ID2                        0x301
#define Rx_ID3                        0x401
#define Rx_ID4                        0x501

#define CAN_IDAR0                ((Rx_ID1<<21) + (Rx_ID2<<5)) /* 四个16位ID接收寄存器 */
#define CAN_IDAR1                ((Rx_ID3<<21) + (Rx_ID4<<5)) /* 格式: ID10_ID03:ID02_ID00 RTR IDE Reserved2_0 */

#define CAN_IDMR0                (uint32_t)(0x1F<<16) + 0x1F  /* 四个16位ID屏蔽寄存器, 1-忽略, 0-关心 */
#define CAN_IDMR1                (uint32_t)(0x1F<<16) + 0x1F  /* 格式: 0000 0000 0001 1111, 0000 0000 0001 1111 */

/* CAN模块初始化 */
void CAN_module_init(void)
{
        MSCAN_ConfigType sMSCANConfig = {0};

        sMSCANConfig.sBaudRateSetting.SJW  = BAUD_RATE_SJW;
        sMSCANConfig.sBaudRateSetting.BRP  = BAUD_RATE_BRP;
        sMSCANConfig.sBaudRateSetting.SAMP = BAUD_RATE_SAMP;
        sMSCANConfig.sBaudRateSetting.TSEG1= BAUD_RATE_TSEG1;
        sMSCANConfig.sBaudRateSetting.TSEG2= BAUD_RATE_TSEG2;

        sMSCANConfig.u32IDAR0 = (CAN_IDAR0);
        sMSCANConfig.u32IDAR1 = (CAN_IDAR1);
        sMSCANConfig.u32IDMR0 = (CAN_IDMR0);
        sMSCANConfig.u32IDMR1 = (CAN_IDMR1);
        sMSCANConfig.u8IDARMode = ID_ACCEPT_MODE_FOUR16; /* 四个16位ID模式 */

        sMSCANConfig.sSetting.bCanEn = 1;               //MSCAN模块使能
        sMSCANConfig.sSetting.bCLKSRC = 0;              //1-总线时钟
        // sMSCANConfig.sSetting.bLoopModeEn = 1;
        sMSCANConfig.sSetting.bRxFullIEn=0;             //接收满中断
        sMSCANConfig.sSetting.bTimerEn=0;               //MSCAN内部计时器
        sMSCANConfig.sSetting.bOverRunIEn=0;            //数据溢出中断
        sMSCANConfig.sSetting.bStatusChangeIEn=0;       //CAN状态改变中断
        //sMSCANConfig.sSetting.bTxEmptyIEn=1;
        CAN_Init(MSCAN, &sMSCANConfig);
}

问题: 这样设置后, ID为Rx_ID2和Rx_ID4的CAN帧接收不到.

请问: CAN_IDAR0/CAN_IDAR1及CAN_IDMR0/CAN_IDMR1, 应该如何设置? 请各位大拿帮忙啦

最佳答案

whgtsq 发表于 2017-3-3 15:45 谢谢, 我试试看 如果还有问题,欢迎继续交流。 如果问题解决了,还请帮忙结贴。
回复

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25449
最后登录
2025-9-4
发表于 2017-2-6 09:45:34 | 显示全部楼层
楼主你好!
关于MSCAN过滤器的问题,请先查看下我之前写的一篇经验分享:
【经验分享】KE06 MSCAN标识符接收滤波器配置讲解 ...
如果看完,查看对应寄存器之后还是有问题,欢迎继续讨论。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

30

帖子

0

中级会员

Rank: 3Rank: 3

积分
279
最后登录
2020-12-20
 楼主| 发表于 2017-2-6 13:46:06 | 显示全部楼层
这批文章看了, 但只是设置了两个id过滤, 我需要设置四个标准id过滤, 文章没提及
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25449
最后登录
2025-9-4
发表于 2017-3-1 16:28:25 | 显示全部楼层
whgtsq 发表于 2017-2-6 13:46
这批文章看了, 但只是设置了两个id过滤, 我需要设置四个标准id过滤, 文章没提及 ...

楼主你好!
16位模式,的确可以接受4个不同的标准ID的。
不过,代码有些bug,楼主需要修改下。
1. mscan.h中
//#define ID_ACCEPT_MODE_TWO32     0<<4  /*!<Two 32-bit acceptance filters*/
//#define ID_ACCEPT_MODE_FOUR16     1<<4  /*!<Four 16-bit acceptance filters*/
//#define ID_ACCEPT_MODE_EIGHT8     2<<4  /*!<Eight 8-bit acceptance filters*/
//#define ID_ACCEPT_MODE_FILTER_CLOSE 3<<4  /*!<Filter closed*/
  
#define ID_ACCEPT_MODE_TWO32     0  /*!<Two 32-bit acceptance filters*/
#define ID_ACCEPT_MODE_FOUR16     1  /*!<Four 16-bit acceptance filters*/
#define ID_ACCEPT_MODE_EIGHT8     2  /*!<Eight 8-bit acceptance filters*/
#define ID_ACCEPT_MODE_FILTER_CLOSE     3  /*!<Filter closed*/

2. 举例可以接受0x01,0x02,0x03,0x04 4个标准帧。
CAN_Node1_demo.c修改:
//标准帧CAN_IDAR0 :0x0002, CAN_IDAR0 :0x0001,0x0004,0x0008,
#define CAN_IDAR0   0X00200040   //0x01,0x02
#define CAN_IDAR1   0X00800100  //0x04,0x08
#define CAN_IDMR0   0X001f001f
#define CAN_IDMR1                       0X001f001f

sMSCANConfig.u8IDARMode = ID_ACCEPT_MODE_FOUR16;
成功测试数据.jpg





回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25449
最后登录
2025-9-4
发表于 2017-3-1 16:52:27 | 显示全部楼层
楼主你好!
2楼的经验分享文档以及代码我都更新过了,你可以直接参考了。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

30

帖子

0

中级会员

Rank: 3Rank: 3

积分
279
最后登录
2020-12-20
 楼主| 发表于 2017-3-3 15:45:51 | 显示全部楼层
谢谢, 我试试看
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25449
最后登录
2025-9-4
发表于 2017-3-15 17:57:43 | 显示全部楼层
whgtsq 发表于 2017-3-3 15:45
谢谢, 我试试看

如果还有问题,欢迎继续交流。
如果问题解决了,还请帮忙结贴。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
40
最后登录
2019-7-23
发表于 2018-3-13 15:03:50 | 显示全部楼层
小恩GG 发表于 2017-3-1 16:28
楼主你好!
16位模式,的确可以接受4个不同的标准ID的。
不过,代码有些bug,楼主需要修改下。

大神好,16位模式可不可以接收4个以上不同的标准ID呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-6 17:19 , Processed in 0.108011 second(s), 30 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表