STM32 CAN过滤器详解

您所在的位置:网站首页 stm32f1中断详解 STM32 CAN过滤器详解

STM32 CAN过滤器详解

2023-12-02 06:11| 来源: 网络整理| 查看: 265

综合之前所述,下面我们来对比一下列表模式与掩码模式这两种模式的优缺点。

模式优点缺点列表模式能精确地过滤每个指定的CAN ID有数量限制掩码模式取决于屏蔽码,有时无法完全精确到每一个CAN ID,部分不期望的CAN ID有时也会收到数量取决于屏蔽码,最多无上限

2.5.   标准CAN ID与扩展CAN ID

1986 年德国电气商BOSCH公司开发出面向汽车的CAN 通信协议,刚开始的时候,CAN ID定义为11位,我们称之为标准格式,ISO11898-1标准中CAN的基本格式如下图所示:

图 3 标准CAN报文格式定义

如上图所示,标准CAN ID存放在上图ID18~ID28中,共11位。随着工业发展,后来发现11位的CAN ID已经不够用,于是就增加了18位,扩展CAN ID到29位,如下图所示:

图 4 扩展CAN报文格式定义

从上图对比扩展CAN报文与标准CAN报文,发现在仲裁域部分,扩展CAN报文的CAN ID包含了base Identifier与extension Identifier,即基本ID与扩展ID,而标准CAN报文的CAN ID部分只包含基本ID,扩展ID(ID0~ID17)被放在基本ID的右方,也就是说,属于低位。知道这些有什么用呢?至少我们可以得到这两条信息:

 标准ID一般小于或等于pRxMsg->StdId ==0x321)     {       //handle the CAN message       HandleCANMessage(hcan->pRxMsg);      //处理接收到的CAN报文     }     if(hcan->pRxMsg->ExtId ==0x1800f001)     {        HandleCANMessage(hcan->pRxMsg);     //处理接收到的CAN报文     }     HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_SET);    //若收到消息则闪烁下LED4     HAL_Delay(200);     HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_RESET);       HAL_CAN_Receive_IT(&hcan1,CAN_FIFO0);   }  

接下来将分别介绍过滤器的4中工作模式以及所对应的代码示例。

4.2.   32位宽的列表模式

图11 32位宽下的CAN_FxR1与CAN_FxR2各位定义

如上图所示,在32位宽的列表模式下,CAN_FxR1与CAN_FxR2都用来存储希望通过的CAN ID,由于是32位宽的,因此既可以存储标准CAN ID,也可以存储扩展CAN ID。注意看上图最底下的各位定义,可以看出,从右到左,首先,最低位是没有用的,然后是RTR,表示是否为远程帧,接着IDE,扩展帧标志,然后才是EXID[0:17]这18位扩展ID,最后才是STID[0:10]这11位标准ID,也就是前面所说的基本ID。在进行配置的时候,即将希望通过的CAN ID写入的时候,要注意各个位对号入座,即基本ID放到对应的STD[0:10],扩展ID对应放到EXID[0:17],若是扩展帧,则需要将IDE设为“1”,标准帧则为“0”,数据帧设RTR为“0”,远程帧设RTR为“1”。示例代码如下:

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片 static void CANFilterConfig_Scale32_IdList(void)   {     CAN_FilterConfTypeDef  sFilterConfig;     uint32_t StdId =0x321;                //这里写入两个CAN ID,一个位标准CAN ID     uint32_t ExtId =0x1800f001;           //一个位扩展CAN ID          sFilterConfig.FilterNumber = 0;               //使用过滤器0     sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;     //设为列表模式     sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;    //配置为32位宽     sFilterConfig.FilterIdHigh = StdId


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3