Bladeren bron

[BSP] stm32f10x bxcan correct ext frame filter

Aubr.Cool 8 jaren geleden
bovenliggende
commit
cd679a251e
1 gewijzigde bestanden met toevoegingen van 14 en 4 verwijderingen
  1. 14 4
      bsp/stm32f10x/drivers/bxcan.c

+ 14 - 4
bsp/stm32f10x/drivers/bxcan.c

@@ -1008,10 +1008,20 @@ static rt_err_t bxmodifyfilter(struct stm_bxcan *pbxcan, struct rt_can_filter_it
         }
         break;
     }
-    CAN_FilterInitStructure.CAN_FilterIdHigh = ((ID[1]) & 0x0000FFFF);
-    CAN_FilterInitStructure.CAN_FilterIdLow = ID[0] & 0x0000FFFF;
-    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (ID[1] & 0xFFFF0000) >> 16;
-    CAN_FilterInitStructure.CAN_FilterMaskIdLow = (ID[0] & 0xFFFF0000) >> 16;
+    if(pitem->ide)
+    {
+        CAN_FilterInitStructure.CAN_FilterIdHigh = (ID[0] & 0xFFFF0000) >> 16;
+        CAN_FilterInitStructure.CAN_FilterIdLow = ID[0] & 0x0000FFFF;
+        CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (ID[1] & 0xFFFF0000) >> 16;
+        CAN_FilterInitStructure.CAN_FilterMaskIdLow = ((ID[1]) & 0x0000FFFF);
+    }
+    else
+    {
+        CAN_FilterInitStructure.CAN_FilterIdHigh = ((ID[1]) & 0x0000FFFF);
+        CAN_FilterInitStructure.CAN_FilterIdLow = ID[0] & 0x0000FFFF;
+        CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (ID[1] & 0xFFFF0000) >> 16;
+        CAN_FilterInitStructure.CAN_FilterMaskIdLow = (ID[0] & 0xFFFF0000) >> 16;
+    }
     if (fbase >= pbxcan->fifo1filteroff)
     {
         CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 1;