查看: 6939|回复: 8

[已解决] LPC1768 CAN滤波设置

[复制链接]

该用户从未签到

74

主题

266

帖子

0

高级会员

Rank: 4

积分
747
最后登录
2023-5-24
发表于 2018-12-6 18:24:11 | 显示全部楼层 |阅读模式
LPC1768 CAN滤波设置
配置完之后什么ID都无法收到。我只想过滤单个扩展帧ID,其他都不要。理解为设置滤波器  如果一个表格的起始地址等于下一个表格的起始地址或表格终止寄存器的数值, 则该表格为空,在处理中将被忽略。

最佳答案

楼主你好,给你发个官方的代码参考下: [attach]451074[/attach] CAN_wrFilter函数。
QQ图片20181206182312.png
回复

使用道具 举报

该用户从未签到

74

主题

266

帖子

0

高级会员

Rank: 4

积分
747
最后登录
2023-5-24
 楼主| 发表于 2018-12-10 15:20:18 | 显示全部楼层
xiaoming1021 发表于 2018-12-10 15:00
unsigned int EXP_STD_ID[2]={0x0001,0x0002};                        //接收标识符为0x0001和0x0002的标准标识符帧
unsigned  ...

扩展ID必须按升序排列放到RAM表里面啊?
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

74

主题

266

帖子

0

高级会员

Rank: 4

积分
747
最后登录
2023-5-24
 楼主| 发表于 2018-12-7 09:44:48 | 显示全部楼层
这两个ID只有一个能第一个能通过。
QQ图片20181207094337.png
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2018-12-7 17:05:45 | 显示全部楼层
楼主你好,给你发个官方的代码参考下:
CAN.rar (404.21 KB, 下载次数: 64)
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

266

帖子

0

高级会员

Rank: 4

积分
747
最后登录
2023-5-24
 楼主| 发表于 2018-12-9 10:08:55 | 显示全部楼层
小恩GG 发表于 2018-12-7 17:05
楼主你好,给你发个官方的代码参考下:

CAN_wrFilter函数。

寄存器表数组填写正确

寄存器表数组填写正确
非常感谢您及时的回答,我看了例程和我的差不多。细节也看了一下没什么问题。配置和仿真都一样。我的就是进入不了中断,我发送的都是配置表的ID.关闭滤波就能进入。不知道这块还需要注意哪些关键细节。

滤波模式正常,关闭FULLcan

滤波模式正常,关闭FULLcan

一个18个扩展ID,*4大小一致。

一个18个扩展ID,*4大小一致。
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

266

帖子

0

高级会员

Rank: 4

积分
747
最后登录
2023-5-24
 楼主| 发表于 2018-12-9 10:12:20 | 显示全部楼层
xiaoming1021 发表于 2018-12-9 10:08
非常感谢您及时的回答,我看了例程和我的差不多。细节也看了一下没什么问题。配置和仿真都一样。我的就是 ...

刚才调试断点打错了,这是全速运行状态。
QQ图片20181209101110.png
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

266

帖子

0

高级会员

Rank: 4

积分
747
最后登录
2023-5-24
 楼主| 发表于 2018-12-10 15:00:04 | 显示全部楼层
xiaoming1021 发表于 2018-12-9 10:12
刚才调试断点打错了,这是全速运行状态。

unsigned int EXP_STD_ID[2]={0x0001,0x0002};                        //接收标识符为0x0001和0x0002的标准标识符帧
unsigned int GRP_STD_ID[2]={0x200,0x210};                                //接收标识符在0x200到0x210之间的标准帧标识符
unsigned int EXP_EXT_ID[2]={0x1F40F298,0x1F40F297};        //接收标识符为0x100000和0x100001的扩展标识符帧
unsigned int GRP_EXT_ID[2]={0x200000,0x200010};        //接收标识符在0x200000到0x200010之间的扩展帧标识符
/*********************************************************************************************************
** Functoin name:       CAN_SetACCF_Lookup
** Descriptions:        设置滤波器
** input paraments:     无
** output paraments:    无   
** Returned values:     无
*********************************************************************************************************/
void CAN_SetACCF_Lookup( void )
{
  uint32_t address = 0;
  uint32_t ID_high, ID_low;

  LPC_CANAF->SFF_sa = address;                                //设置单个标准帧标识符表格地址
        ID_low = (0 << 29) | (EXP_STD_ID[0] << 16);
        ID_high = ((0) << 13) | (EXP_STD_ID[1] << 0);
        *((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low | ID_high;
        address += 4;
               
  LPC_CANAF->SFF_GRP_sa = address;                //设置标准帧组标识符表格地址
        ID_low = (0 << 29) | (GRP_STD_ID[0] << 16);
        ID_high = ((0) << 13) | (GRP_STD_ID[1] << 0);
        *((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low | ID_high;
        address += 4;

  LPC_CANAF->EFF_sa = address;                                //设置单个扩展帧标识符表格地址
        ID_low = (0 << 29) | (EXP_EXT_ID[0] << 0);
        *((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low;
        address += 4;
        ID_low = (0 << 29) | (EXP_EXT_ID[1] << 0);
        *((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low;
        address += 4;

  LPC_CANAF->EFF_GRP_sa = address;                //设置扩展帧组标识符表格地址
        ID_low = (0 << 29) | (GRP_EXT_ID[0] << 0);
        *((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low;
        address += 4;
        ID_low = (0 << 29) | (GRP_EXT_ID[1] << 0);
        *((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low;
        address += 4;

  LPC_CANAF->ENDofTable = address;                //设置AF表结束地址
  return;
}
unsigned int EXP_EXT_ID[2]={0x1F40F298,0x1F40F297};        这个扩展帧里面放两个就只能匹配一个,
unsigned int EXP_EXT_ID[2]={0x100000,0x100001};放0x100000和0x100001这两个都能匹配
不知道为啥
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2019-1-27 09:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    帖子

    0

    注册会员

    Rank: 2

    积分
    50
    最后登录
    2019-10-28
    发表于 2019-1-27 07:49:54 | 显示全部楼层
    好资料  LPC1768 CAN滤波设置
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-1-27 09:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    帖子

    0

    注册会员

    Rank: 2

    积分
    50
    最后登录
    2019-10-28
    发表于 2019-1-27 09:12:54 | 显示全部楼层
    eFCAN  是FULLCAN  不能沟。
    LPC1768—CAN接收仿真是一个难点。是STM32同样是一个难点。
    发送仿真可通过USB转CAN工具,
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 23:22 , Processed in 0.114637 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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