打印
[研电赛技术支持]

GD32 CAN过滤器配置

[复制链接]
932|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
can_filter.filter_number = 0;
    can_filter.filter_mode = CAN_FILTERMODE_MASK;
    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
    can_filter.filter_list_high = ((0X0757A800<<3)&0XFFFF0000)>>16;
    can_filter.filter_list_low = (uint16_t)((0X0757A800<<3)|(4)&0XFFFF);
    can_filter.filter_mask_high = 0XFFFF;
    can_filter.filter_mask_low = (uint16_t)(0XFF00<<3);
    can_filter.filter_fifo_number = CAN_FIFO0;
    can_filter.filter_enable = ENABLE;
    can_filter_init(&can_filter);

    can_filter.filter_number = 1;
    can_filter.filter_mode = CAN_FILTERMODE_LIST;
    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
    can_filter.filter_list_high = ((0X0757A900<<3)&0XFFFF0000)>>16;
    can_filter.filter_list_low = (uint16_t)((0X0757A900<<3)|(4)&0XFFFF);
    can_filter.filter_mask_high = 0;
    can_filter.filter_mask_low = 0;
    can_filter.filter_fifo_number = CAN_FIFO0;
    can_filter.filter_enable = ENABLE;
    can_filter_init(&can_filter);
AI写代码
c
运行



对于过滤器0,设置掩码模式,配置为扩展帧ID,接收范围0X0757A800到0X0757A8FF,低8位可以为任意值,由filter_mask_high 和filter_mask_low决定 。对于过滤器1,设置列表模式,配置为扩展帧ID,只能接收0X0757A900这个ID,filter_mask_high 和filter_mask_low 设置无效。



在图片的低3位,FF:1表示扩展帧,0表示标准帧。FT:1表示遥控帧,0表示数据帧。所以过滤数据ID值和掩码值需要左移3位,然后在filter_list_low 加4,表示扩展帧,按道理filter_mask_low 也要加4,但是我没加,也可以达到目的。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_45449075/article/details/147889796

使用特权

评论回复
沙发
磨砂| | 2025-6-3 14:43 | 只看该作者
GD32 CAN过滤器是GD32微控制器中用于CAN总线通信的重要功能模块,主要用于筛选接收的CAN报文,确保只有符合预设条件的数据帧被处理

使用特权

评论回复
板凳
晓伍| | 2025-6-3 17:10 | 只看该作者
can过滤器过滤不需要的CAN报文,减少CPU负载,提高通信效率

使用特权

评论回复
地板
八层楼| | 2025-6-3 19:34 | 只看该作者
非CL系列有14个过滤器 CL系列有28个过滤器

使用特权

评论回复
5
观海| | 2025-6-3 21:52 | 只看该作者
每个过滤器单元包含2个寄存器,可配置为32位或16位模式

使用特权

评论回复
6
guanjiaer| | 2025-6-4 07:58 | 只看该作者
通过[size=0.875]CAN_FxDATA0设置预设标识符,[size=0.875]CAN_FxDATA1设置掩码值,指定哪些位需要匹配

使用特权

评论回复
7
heimaojingzhang| | 2025-6-4 10:30 | 只看该作者
can_parameter_struct can_init_param;
can_init_param.working_mode = CAN_NORMAL_MODE; // 正常模式
can_init_param.prescaler = 12;                // 分频系数
can_init(CAN0, &can_init_param);             // 初始化CAN0


使用特权

评论回复
8
keaibukelian| | 2025-6-4 12:53 | 只看该作者
can_filter_parameter_struct can_filter_param;
can_filter_param.filter_number = 0;           // 过滤器编号(0~27)
can_filter_param.filter_mode = CAN_FILTERMODE_MASK; // 掩码模式
can_filter_param.filter_bits = CAN_FILTER_BITS_32BIT; // 32位模式
can_filter_param.filter_list_high = 0x000;   // 预设ID高16位(如标准帧)
can_filter_param.filter_list_low = 0x000;    // 预设ID低16位
can_filter_param.filter_mask_high = 0x7FF;   // 掩码高16位(匹配ID前11位)
can_filter_param.filter_mask_low = 0xFFFF;   // 掩码低16位(全匹配)
can_filter_init(&can_filter_param);          // 应用过滤器配置


使用特权

评论回复
9
paotangsan| | 2025-6-4 15:28 | 只看该作者
结合发送邮箱的优先级功能,实现关键数据的优先传输

使用特权

评论回复
10
renzheshengui| | 2025-6-4 17:55 | 只看该作者
GD32 CAN过滤器通过灵活的掩码和列表模式,支持多级筛选,适用于复杂CAN网络环境

使用特权

评论回复
11
wowu| | 2025-6-4 20:18 | 只看该作者
我们需要注意过滤器编号与硬件资源的对应关系

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

170

帖子

1

粉丝