找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 245|回复: 3
收起左侧

STM32G0B1VE芯片CAN过滤器问题

[复制链接]
ID:628538 发表于 2024-11-11 11:13 来自手机 | 显示全部楼层 |阅读模式
50黑币
STM32G0B1VE芯片CAN过滤器配置分为掩码模式与列表模式,列表模式可过滤多少个ID?如何配置?

回复

使用道具 举报

ID:404160 发表于 2024-11-12 15:07 | 显示全部楼层
STM32G0B1VE芯片的CAN过滤器配置中,列表模式下可以过滤的ID数量取决于过滤器的位宽设置。在16位宽的列表模式下,每个过滤器可以保存4个CAN ID。而在32位宽的列表模式下,每个过滤器可以保存2个CAN ID。STM32G0B1VE芯片提供了28个标准帧过滤器和8个扩展帧过滤器,这些过滤器可以配置为列表模式或掩码模式,以满足不同的过滤需求。在配置过滤器时,需要根据实际的CAN ID和过滤器的位宽来设置相应的寄存器值。例如,如果要过滤标准帧ID,需要将CAN ID左移5位后写入寄存器的STID区域。需要注意的是,16位宽的列表模式不能处理扩展CAN ID,只能用于过滤标准CAN ID。
在 STM32G0B1VE 的 CAN 过滤器配置中,列表模式可用于过滤多个 ID。具体能过滤的 ID 数量取决于过滤器的数量和配置。

每个 CAN 过滤器可以配置为掩码模式或列表模式,并且可以配置为 16 位或 32 位。以下是过滤器配置的细节:

1. **16 位模式**:
   - 每个过滤器可以存储 4 个 16 位的标准 ID。
   - 在列表模式下,每个过滤器可以过滤 4 个 16 位 ID。

2. **32 位模式**:
   - 每个过滤器可以存储 2 个 32 位的扩展 ID。
   - 在列表模式下,每个过滤器可以过滤 2 个 32 位 ID。

STM32G0B1VE 芯片通常具有 14 个过滤器。如果所有过滤器都配置为列表模式和 16 位模式,那么最多可以过滤:
- 14 个过滤器 × 4 个 16 位 ID = 56 个标准 ID。

如果所有过滤器都配置为列表模式和 32 位模式,那么最多可以过滤:
- 14 个过滤器 × 2 个 32 位 ID = 28 个扩展 ID。


#include <stm32g0xx_hal.h>

void CAN_Init(void) {
    CAN_FilterTypeDef can_filter_config;
    can_filter_config.FilterActivation = CAN_FILTER_ENABLE;
    can_filter_config.FilterBank = 0; // 设置过滤器的起始地址
    can_filter_config.FilterFIFOAssignment = CAN_FILTER_FIFO0;
    can_filter_config.FilterIdHigh = 0;
    can_filter_config.FilterIdLow = 0x0000;
    can_filter_config.FilterMaskIdHigh = 0;
    can_filter_config.FilterMaskIdLow = 0x0000;
    can_filter_config.FilterMode = CAN_FILTERMODE_IDLIST;
    can_filter_config.FilterScale = CAN_FILTERSCALE_32BIT;
    can_filter_config.SlaveStartFilterBank = 14; // 配置过滤器起始地址

    if (HAL_CAN_ConfigFilter(&hcan, &can_filter_config) != HAL_OK) {
        // 处理错误
    }
}
回复

使用道具 举报

ID:1136858 发表于 2024-11-18 22:56 | 显示全部楼层
28个吧
回复

使用道具 举报

ID:879348 发表于 2024-11-19 11:43 | 显示全部楼层
过滤器设计太过复杂了,在通讯不繁忙的项目,建议接受所有报文再软件判断ID
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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