我参考别人的代码,目前能配置接收标准帧,扩展帧收不到。
代码如下:
[C] 纯文本查看 复制代码 void FDCAN1_RX_Filter0_Init(void)
{
hfdcan1_RX_Filter0.IdType = FDCAN_STANDARD_ID; /* 只接收标准帧ID */
hfdcan1_RX_Filter0.FilterIndex = 0; /* 滤波器索引0 */
hfdcan1_RX_Filter0.FilterType = FDCAN_FILTER_MASK; /* 滤波器类型 */
//hfdcan1_RX_Filter0.FilterType = FDCAN_FILTER_RANGE; /* 滤波器类型(允许接收报文的ID范围是FilterID1至FilterID2 */
/* 注意:
* 1.FDCAN_HandleTypeDef对象句柄的成员RxFifo0ElmtsNbr设置大于0时,表示启用RXFIFO0.
* 2.
* 3.如果启用RXFIFO0,那么滤波器必须关联到RXFIFO0,即FilterConfig必须赋值FDCAN_FILTER_TO_RXFIFO0.
* 4.同理,如果启动RXFIFO1的话,滤波器必须关联到RXFIFO1,即FilterConfig必须赋值FDCAN_FILTER_TO_RXFIFO1.
*
*/
hfdcan1_RX_Filter0.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; /* 滤波器关联到RXFIFO0 */
hfdcan1_RX_Filter0.FilterID1 = 0x00; /* 滤波ID1: 0x00 */
hfdcan1_RX_Filter0.FilterID2 = 0x00; /* 滤波ID2: 0x00 */
if(HAL_FDCAN_ConfigFilter(&hfdcan1, &hfdcan1_RX_Filter0) != HAL_OK)
{
Error_Handler();
}
/* HAL_FDCAN_ConfigGlobalFilter()
* 参数2:设置标准帧ID,接收的报文ID没有匹配上滤波器时,选择拒绝接收(没有匹配上时,可以选择放入FIFO0或者FIFO1)。
* 参数3:设置拓展帧ID,接收的报文ID没有匹配上滤波器时,选择拒绝接收。
* 参数4:设置是否拒绝远程标准帧,ENABLE代表拒绝接收。
* 参数5:设置是否拒绝远程拓展帧,ENABLE代表拒绝接收。
*/
if(HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, DISABLE, DISABLE) != HAL_OK) /* 设置FDCAN1滤波器0全局配置 */
{
Error_Handler();
}
}
|