STM32 CAN过滤器详解 |
您所在的位置:网站首页 › stm32f1中断详解 › STM32 CAN过滤器详解 |
综合之前所述,下面我们来对比一下列表模式与掩码模式这两种模式的优缺点。 模式优点缺点列表模式能精确地过滤每个指定的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 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 |