标题: STM32G0B1VE芯片CAN过滤器问题 [打印本页]

作者: 厉害吧他哥哥    时间: 2024-11-11 11:13
标题: STM32G0B1VE芯片CAN过滤器问题
STM32G0B1VE芯片CAN过滤器配置分为掩码模式与列表模式,列表模式可过滤多少个ID?如何配置?
作者: 飞云居士    时间: 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) {
        // 处理错误
    }
}

作者: wangjianpeng2    时间: 2024-11-18 22:56
28个吧
作者: wufa1986    时间: 2024-11-19 11:43
过滤器设计太过复杂了,在通讯不繁忙的项目,建议接受所有报文再软件判断ID




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1