中级会员
 
- 积分
- 405
- 金钱
- 405
- 注册时间
- 2017-1-18
- 在线时间
- 180 小时
|
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;
}
|
|