OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3953|回复: 8

STM32F105RBT6-CAN总线滤波器设置求助

[复制链接]

6

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-12-17
在线时间
77 小时
发表于 2016-8-24 14:05:08 | 显示全部楼层 |阅读模式
5金钱
程序如下,u16 std_id=0X3e7;
u16 msk_id=0X4b2;



void CAN_SetStdFilterIdMsk16(u8 number,u16 ID,u16 Mask)
{
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    /* CAN 过滤器设置 */
        CAN_FilterInitStructure.CAN_FilterNumber=number;
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;
        CAN_FilterInitStructure.CAN_FilterIdHigh=0XFFFF;
        CAN_FilterInitStructure.CAN_FilterIdLow=ID<<5;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0XFFFF;
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=Mask<<5;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
       
        CAN_FilterInit(&CAN_FilterInitStructure);
}

void CAN1_Configuration(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;
        NVIC_InitTypeDef        NVIC_InitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

//    CAN_DISABLE();        //在main函数开canbus
       
        /* PD0-CAN RX */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /*pd1-CAN TX */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
       
        CAN_SetBps(BPS_500K);
        CAN_SetStdFilterIdMsk16(0,std_id,msk_id);
        //CAN_SetStdFilterIdLst16(0,0x12,0x13,0x14,0x15);

         NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
         NVIC_Init(& NVIC_InitStructure);
         
       CAN_ITConfig(CAN1, CAN_IT_FMP0|CAN_IT_FF0|CAN_IT_FOV0, ENABLE);
        CAN_ITConfig(CAN1, CAN_IT_TME, DISABLE);
}




如上设置接收来自上位机发来的标准Z,只能过滤出std_id=0X3e7,而仿真msk_id=0X4b2不能正常过滤,进不了中断,求大神帮忙分析。折腾了好久
jietu.jpg

最佳答案

查看完整内容[请看2#楼]

库函数里面过滤器的设置是这样的 你这里的参数填错了,应该这么填: void CAN_SetStdFilterIdMsk16(u8 number,u16 ID,u16 Mask)[/backcolor] {[/backcolor] CAN_FilterInitTypeDef CAN_FilterInitStructure;[/backcolor] /* CAN 过滤器设置 */[/backcolor] CAN_FilterInitStructure.CAN_FilterNumber=number;[/backcolor] CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;[/back ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-24 14:05:09 | 显示全部楼层
库函数里面过滤器的设置是这样的
8Md0X8I{L{5O9%Y$%]4}8.png
你这里的参数填错了,应该这么填:
void CAN_SetStdFilterIdMsk16(u8 number,u16 ID,u16 Mask)
{
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    /* CAN 过滤器设置 */
        CAN_FilterInitStructure.CAN_FilterNumber=number;
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;
        CAN_FilterInitStructure.CAN_FilterIdHigh=Mask<<5;
        CAN_FilterInitStructure.CAN_FilterIdLow=ID<<5;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0XFFFF;
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
        
        CAN_FilterInit(&CAN_FilterInitStructure);
}
回复

使用道具 举报

6

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-12-17
在线时间
77 小时
 楼主| 发表于 2016-8-24 15:35:22 | 显示全部楼层
谢谢兄弟,帮了我大忙,搞定了.
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-24 15:54:08 | 显示全部楼层
winidd 发表于 2016-8-24 15:35
谢谢兄弟,帮了我大忙,搞定了.

刚好最近在搞CAN
回复

使用道具 举报

20

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-4-8
在线时间
15 小时
发表于 2017-3-17 14:36:07 | 显示全部楼层
Da Wen 发表于 2016-8-24 14:05
库函数里面过滤器的设置是这样的

你这里的参数填错了,应该这么填:

&nbsp;CAN_FilterInitStructure.CAN_FilterIdLow=ID<<5;兄弟!不能直接

CAN_FilterInitStructure.CAN_FilterIdLow=ID,吗
回复

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2017-3-6
在线时间
49 小时
发表于 2017-4-7 19:17:48 | 显示全部楼层
winidd 发表于 2016-8-24 15:35
谢谢兄弟,帮了我大忙,搞定了.

大哥,求个f105 can通信例程,最近搞这个搞得有点晕。
回复

使用道具 举报

4

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-4-5
在线时间
24 小时
发表于 2017-6-24 16:30:07 | 显示全部楼层
我也是头晕
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-1-14
在线时间
2 小时
发表于 2017-7-7 10:09:30 | 显示全部楼层
winidd 发表于 2016-8-24 15:35
谢谢兄弟,帮了我大忙,搞定了.

你好,能不能把你的双CAN的程序发给我一下?我最近也在搞双CAN的通讯。谢谢啦。邮箱993220921@qq.com
回复

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2018-4-8
在线时间
9 小时
发表于 2018-4-8 21:24:14 | 显示全部楼层
最近也在弄CAN,楼主能不能发一份给我?932789469@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 13:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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