OpenEdv-开源电子网

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

STM32H743 CAN FIFO0不能过滤掉 FIFO1可以

[复制链接]

18

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2017-1-18
在线时间
180 小时
发表于 2020-9-28 12:48:07 | 显示全部楼层 |阅读模式
10金钱

滤波器设置FDCAN_FILTER_TO_RXFIFO0无过滤功能,监视接收到的数据(0x4000ac00地址空间开始),错误ID下显示是与过滤器设置的不匹配的。说明能检测到,就是没过滤。就想滤波器没开启一样。

滤波器设置FDCAN_FILTER_TO_RXFIFO1能够正常过滤掉不正确的ID。



u8 FDCAN1_Mode_Init(u16 presc,u8 ntsjw,u16 ntsg1,u8 ntsg2,u32 mode)
{
    FDCAN_FilterTypeDef FDCAN1_RXFilter;

    //3õê¼»ˉFDCAN1
    HAL_FDCAN_DeInit(&FDCAN1_Handler);                              //ÏèÇå3yòÔǰμÄéèÖÃ
    FDCAN1_Handler.Instance=FDCAN1;
    FDCAN1_Handler.Init.FrameFormat=FDCAN_FRAME_CLASSIC;            //′«í3Ä£ê½
    FDCAN1_Handler.Init.Mode=mode;                                  //»Ø»·2aêÔ
    FDCAN1_Handler.Init.AutoRetransmission=DISABLE;                 //1رÕ×Ô¶ˉÖØ′«£¡′«í3Ä£ê½ÏÂò»¶¨òa1رÕ£¡£¡£¡
    FDCAN1_Handler.Init.TransmitPause=DISABLE;                      //1رÕ′«êäÔYí£
    FDCAN1_Handler.Init.ProtocolException=ENABLE;                  //1رÕD-òéòì3£′|àí
    FDCAN1_Handler.Init.NominalPrescaler=presc;                     //·ÖÆμÏμêy
    FDCAN1_Handler.Init.NominalSyncJumpWidth=ntsjw;                 //ÖØDÂí¬2½ìøÔ¾¿í¶è
    FDCAN1_Handler.Init.NominalTimeSeg1=ntsg1;                      //tsg1·¶Î§:2~256
    FDCAN1_Handler.Init.NominalTimeSeg2=ntsg2;                      //tsg2·¶Î§:2~128
    FDCAN1_Handler.Init.MessageRAMOffset=0;                         //DÅÏ¢RAMÆ«òÆ
    FDCAN1_Handler.Init.StdFiltersNbr=0x10;                            //±ê×¼DÅÏ¢IDÂË2¨Æ÷±àoÅ
    FDCAN1_Handler.Init.ExtFiltersNbr=0x10;                            //à©Õ1DÅÏ¢IDÂË2¨Æ÷±àoÅ
    FDCAN1_Handler.Init.RxFifo0ElmtsNbr=0x20;//1;                          //½óêÕFIFO0ÔaËØ±àoÅ
    FDCAN1_Handler.Init.RxFifo0ElmtSize=FDCAN_DATA_BYTES_8;         //½óêÕFIFO0ÔaËØ′óD¡£o8×Ö½ú
       
        FDCAN1_Handler.Init.RxFifo1ElmtsNbr=0x20;//1;                          //½óêÕFIFO0ÔaËØ±àoÅ
    FDCAN1_Handler.Init.RxFifo1ElmtSize=FDCAN_DATA_BYTES_8;         //½óêÕFIFO0ÔaËØ′óD¡£o8×Ö½ú
       
    FDCAN1_Handler.Init.RxBuffersNbr=0x10;                             //½óêÕ»o3å±àoÅ
    FDCAN1_Handler.Init.TxEventsNbr=0x10;                              //·¢Ëíê¼t±àoÅ
    FDCAN1_Handler.Init.TxBuffersNbr=0x10;                             //·¢Ëí»o3å±àoÅ
    FDCAN1_Handler.Init.TxFifoQueueElmtsNbr=1;                      //·¢ËíFIFODòáDÔaËØ±àoÅ
    FDCAN1_Handler.Init.TxFifoQueueMode=FDCAN_TX_FIFO_OPERATION;    //·¢ËíFIFODòáDÄ£ê½
    FDCAN1_Handler.Init.TxElmtSize=FDCAN_DATA_BYTES_8;              //·¢Ëí′óD¡:8×Ö½ú
    if(HAL_FDCAN_Init(&FDCAN1_Handler)!=HAL_OK) return 1;           //3õê¼»ˉFDCAN

    //ÅäÖÃRXÂË2¨Æ÷   
    FDCAN1_RXFilter.IdType=FDCAN_STANDARD_ID;                       //±ê×¼ID
    FDCAN1_RXFilter.FilterIndex=0;                                  //ÂË2¨Æ÷Ë÷òy                  
    FDCAN1_RXFilter.FilterType=FDCAN_FILTER_DUAL;//FDCAN_FILTER_MASK;                   //ÂË2¨Æ÷ààDí
    FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;           //1yÂËÆ÷01Øáaμ½FIFO0  
    FDCAN1_RXFilter.FilterID1=0x0123;                               //32λID
    FDCAN1_RXFilter.FilterID2=0x0123;                               //èç1ûFDCANÅäÖÃÎa′«í3Ä£ê½μÄ»°£¬ÕaàïêÇ32λÑúÂë
    if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//ÂË2¨Æ÷3õê¼»ˉ
    HAL_FDCAN_Start(&FDCAN1_Handler);                               //¿aÆôFDCAN
    HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
    return 0;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5140
金钱
5140
注册时间
2014-8-26
在线时间
1317 小时
发表于 2020-9-28 16:10:19 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 21:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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