撮合天 发表于 2019-4-22 17:29:31

wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

\Users\15562\Pictures\Saved Pictures

撮合天 发表于 2019-4-22 17:30:41

wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

那个我后来修改了

撮合天 发表于 2019-4-22 17:31:44

wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

FDCAN1_RXFilter.IdType=FDCAN_STANDARD_ID;                     //标准ID
    FDCAN1_RXFilter.FilterIndex=0;                                  //滤波器索引                  
    FDCAN1_RXFilter.FilterType=FDCAN_FILTER_MASK;                   //滤波器类型
    FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;         //过滤器0关联到FIFO0
    FDCAN1_RXFilter.FilterID1=0xE1800000;                               //32位ID   
    FDCAN1_RXFilter.FilterID2=0xFFE00006;                               //如果FDCAN配置为传统模式的话,这里是32位掩码
    if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//滤波器初始化
    HAL_FDCAN_ConfigGlobalFilter(&FDCAN1_Handler,0, 0, 1, 1);   
    HAL_FDCAN_Start(&FDCAN1_Handler);                               //开启FDCAN
    HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
    return 0;

撮合天 发表于 2019-4-22 17:34:25

你若安好_清风徐来 发表于 2019-4-19 11:26
我有做两个CAN模块通信,没有做过CAN和其他模块通信,可以参考一下我手上没有模块也不能测试uint8_t...

这个配置只能是不过滤把,不过滤程序是可以的

15268851967@163 发表于 2019-5-6 18:57:19

楼主有用过FIFO1吗?我用FIFO1接收不到数据

撮合天 发表于 2019-5-8 14:07:22

15268851967@163 发表于 2019-5-6 18:57
楼主有用过FIFO1吗?我用FIFO1接收不到数据

没有呀,因为最近用它做毕设,所以只是用了一部分功能,没有系统的学

oujisang 发表于 2019-5-8 16:29:31

调用启用全局滤波配置函数 HAL_FDCAN_ConfigGlobalFilter(&FDCAN1_Handler,FDCAN_REJECT, FDCAN_REJECT, ENABLE, ENABLE);
应该放到 你配置完滤波初始化的后面 if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//滤波器初始化

至少你要先把CAN的外设初始化完毕才能做其他配置 你在CAN外设初始化前面就开始调用全局滤波已定会失败的,因为CAN处于关闭状态

奏奏奏 发表于 2019-5-25 17:13:43

本帖最后由 奏奏奏 于 2019-5-25 17:56 编辑

刚自己改好验证过的CAN滤波器设置代码:


对标准数据帧过滤:(只接收标准数据帧)
//CAN滤波器设置
void CAN_Filter_Set(void)
{

hcan.pTxMsg = &TxMessage;
hcan.pRxMsg = &RxMessage;
sFilterConfig.FilterNumber = 0;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = (((uint32_t)CAN_ID<<21)&0xffff0000)>>16;
sFilterConfig.FilterIdLow = (((uint32_t)CAN_ID<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;
sFilterConfig.FilterMaskIdHigh = 0xFFFF;
sFilterConfig.FilterMaskIdLow = 0xFFFF;
      
sFilterConfig.FilterFIFOAssignment = 0;
sFilterConfig.FilterActivation = ENABLE;
sFilterConfig.BankNumber = 14;
HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
}


其中 CAN_ID就是目标的CAN地址
页: 1 [2]
查看完整版本: 关于STM32H7CAN通信过滤器的问题