网站模板源码免费下载,贵阳网络推广公司有哪些,大庆网站建设优化,手机网站制作公司之前在STM32 f407 CAN收发 基于HAL库和Cubemx配置_stm32f407can收发程序-CSDN博客这篇博文里写了一下配置CAN收发的方法#xff0c;当时由于并没有使用过滤器的现实需求#xff0c;所以就也没仔细研究。现在工作中确实需要用到过滤器了#xff0c;有些项目中控制器和发动机E…之前在STM32 f407 CAN收发 基于HAL库和Cubemx配置_stm32f407can收发程序-CSDN博客这篇博文里写了一下配置CAN收发的方法当时由于并没有使用过滤器的现实需求所以就也没仔细研究。现在工作中确实需要用到过滤器了有些项目中控制器和发动机ECU是连接在一路总线的而发动机ECU会产生大量的报文这就不得不配置过滤器了。
先放上配置过滤器的代码然后再分析原理
CAN_FilterTypeDef CAN2_filter1; // Define the filter structure
// parameter of the filter
CAN2_filter1.FilterBank 14; /* The filter number can be set from 0 to 27depending on the setting of SlaveStartFilterBank */
CAN2_filter1.FilterMode CAN_FILTERMODE_IDMASK; //
CAN2_filter1.FilterScale CAN_FILTERSCALE_32BIT; //
CAN2_filter1.FilterIdHigh (0x18F60000 13) 0xFFFF;
CAN2_filter1.FilterIdLow (0x18F60000 3) 0xFFF8;
CAN2_filter1.FilterMaskIdHigh (0xFFFF0000 13) 0xFFFF;
CAN2_filter1.FilterMaskIdLow (0xFFFF0000 3) 0xFFF8;
CAN2_filter1.FilterFIFOAssignment CAN_RX_FIFO1; // FIFO1 for CAN2
CAN2_filter1.FilterActivation ENABLE; //
CAN2_filter1.SlaveStartFilterBank 13;
// Configure CAN2 filter
while(HAL_CAN_ConfigFilter(hcan2, CAN2_filter1) ! HAL_OK);
首先CAN1_filter1.SlaveStartFilterBank这个参数怎么设置 比如上面的CAN2_filter1.SlaveStartFilterBank 13就是把0~12 号过滤器给 CAN113~27 号过滤器给 CAN2然后CAN2_filter1.FilterBank就是在13~27中选出来的数字
小声BB:我觉得把SlaveStartFilterBank放在FilterBank之前配置其实更合理也更易于理解因为只有SlaveStartFilterBank配置好之后才能确定FilterBank的可选范围。但目前好像所有的手册和教程都是先配置FilterBank 然后就是最重要的四个参数 这张表很好的概括了设置方法 要看懂这张表首先要明白掩码的意义。放张图不细说 然后必须要明白标准ID是11位扩展ID是29位 所以上面那张大图中上面那两块的STID实际上代表的是扩展ID的高11位这是这张广泛流传的图很caodan的一点非常容易让人产生困惑
至于IDERTR不用管设置为0就行了。其他的地方都比较好理解了下面直接举例
例132位掩码模式接收0x18F6开头的扩展ID CAN2_filter1.FilterMode CAN_FILTERMODE_IDMASK; // CAN2_filter1.FilterScale CAN_FILTERSCALE_32BIT; // CAN2_filter1.FilterIdHigh (0x18F60000 13) 0xFFFF;CAN2_filter1.FilterIdLow (0x18F60000 3) 0xFFF8;CAN2_filter1.FilterMaskIdHigh (0xFFFF0000 13) 0xFFFF; CAN2_filter1.FilterMaskIdLow (0xFFFF0000 3) 0xFFF8;
FilterIdHigh储存ID的高16位往右移13位就是去掉了13位的低位FilterIdLow储存低13位往左移3位是给“IDERTR0”让位置以及0xFFF8也是为了空出“IDERTR0”的位置 例2:16位列表模式接受0x0F00x0F10x0F2这三个ID CAN1_filter1.FilterMode CAN_FILTERMODE_IDLIST; // CAN1_filter1.FilterScale CAN_FILTERSCALE_16BIT; // CAN1_filter1.FilterIdHigh 0x0F0 5; // CAN1_filter1.FilterIdLow 0x0F1 5; // CAN1_filter1.FilterMaskIdHigh 0x0F2 5; // CAN1_filter1.FilterMaskIdLow 0x0000;
多组过滤器如何配置
多写几组多调用几次HAL_CAN_ConfigFilter记得SlaveStartFilterBank要一致FilterBank要不同