Ye Jin 5 сар өмнө
parent
commit
bbf1eb9378

+ 10 - 2
User project/1.FrameLayer/Source/TimeTask_Event.c

@@ -466,11 +466,17 @@ void  Event_200ms(void)
 {
     /* Upper Computer Info Update */
     Can_voMC_Run_200ms();
-    
+#if(GIANT_ENABLE == 1)
     if ((switch_flg.SysFault_Flag == TRUE) && (MC_BC_COM > 0))
     {
         SendData(ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
     }
+#else
+    if (switch_flg.SysFault_Flag == TRUE)
+    {
+        SendData(ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
+    }
+#endif
     
     if(switch_flg.SysCoef_Flag == TRUE)
     {
@@ -494,7 +500,9 @@ void  Event_200ms(void)
             alm_stBikeIn.uwThrottleReg = adc_stUpOut.uwThrottleReg;
             alm_stBikeIn.blThrottleExistFlg = bikespeed_stSpdLimCoef.blThrottleExist;
             alm_stBikeIn.blMotorNTCExistFlg = FALSE;
-            //alm_voDetec200MS(&alm_stBikeIn, &alm_stDetect200MSCoef);   
+#if(GIANT_ENABLE != 1)
+            alm_voDetec200MS(&alm_stBikeIn, &alm_stDetect200MSCoef);
+#endif
         }
     }
 }

+ 3 - 2
User project/1.FrameLayer/Source/app.c

@@ -183,8 +183,9 @@ void AppLoop()
             }
         }
     }
-
-//    GearBox_Loop();
+#if(GIANT_ENABLE != 1)
+    GearBox_Loop();
+#endif
 }
 
 void PeripheralInit()

+ 25 - 24
User project/1.FrameLayer/Source/gd32f30x_it.c

@@ -22,10 +22,10 @@
 #include "enviolo_can.h"
 #include "giant_can.h"
 #include "string.h"
+#include "Customization.h"
 /******************************
  *  Parameter
  ******************************/
-extern uint8_t data;
 
 /******************************
  *  Function
@@ -337,30 +337,31 @@ void  CAN0_RX0_IRQHandler(void)
 void CAN0_RX1_IRQHandler(void)
 {   
     can_message_receive(CAN0, CAN_FIFO1, pRxMsg2);
+#if(GIANT_ENABLE != 1)
+    if((pRxMsg2->rx_ff != CAN_FF_STANDARD) || (pRxMsg2->rx_dlen == 0))
+    {
+        can_interrupt_enable(CAN0, CAN_INT_RFF1);
+        return;
+    }
     
-//    pTxMsg->tx_sfid = pRxMsg2->rx_sfid;
-//    pTxMsg->tx_efid = pRxMsg2->rx_efid;
-//    pTxMsg->tx_ft = pRxMsg2->rx_ft;
-//    pTxMsg->tx_ff = pRxMsg2->rx_ff;
-//    pTxMsg->tx_dlen = pRxMsg2->rx_dlen;
-//    if(pTxMsg->tx_dlen > 0)
-//    {
-//      memcpy((uint8_t*)pTxMsg->tx_data, (uint8_t*)pRxMsg2->rx_data, pTxMsg->tx_dlen);
-//    }
-//    can_ubMbox = can_message_transmit(CAN0, pTxMsg);
-//    ULONG OVtim = 0;
-//    while((can_transmit_states(CAN0,can_ubMbox) != CAN_TRANSMIT_OK) && (OVtim < 0XFFF))
-//    {
-//        OVtim++;
-//    } //等待发送结束
-        
-//    if(pRxMsg2->rx_ff != CAN_FF_STANDARD)
-//    {
-//        can_interrupt_enable(CAN0, CAN_INT_RFF1);
-//        return;
-//    }
-        
+    switch (pRxMsg2->rx_sfid)
+    {
+        case ID_ENVIOLO_TO_MC_1: 
+        case ID_ENVIOLO_TO_MC_2:
+        {
+            if(pRxMsg2->rx_dlen == 8)//由于没有帧头帧尾和CRC,故保证数据的准确性必须为8字节才解析
+            {
+                GearBox_CanData.RefreshFlag = TRUE;
+                GearBox_CanData.ID = pRxMsg2->rx_sfid;
+                memcpy((uint8_t*)GearBox_CanData.Data, (uint8_t*)pRxMsg2->rx_data, 8);
+            }
+            break;
+        } 
+        default:
+            break;
+    }
+#else       
     CANFrame_Rx_ISR();
-    
+#endif   
     can_interrupt_enable(CAN0, CAN_INT_RFF1);
 }

+ 1 - 2
User project/3.BasicFunction/Include/Customization.h

@@ -13,7 +13,6 @@
  *          Include
  *
  ****************************************/
-#include "giant_can.h"
 
 
 /****************************************
@@ -21,7 +20,7 @@
  *          Definitions & Macros
  *
  ****************************************/
-#define GIANT_ENABLE                     1   //0-标准程序,1-giant定制
+#define GIANT_ENABLE                     0   //0-标准程序,1-giant定制
 
 
 #endif /* 3_BASICFUNCTION_INCLUDE_CUSTOMIZATION_H_ */

+ 26 - 22
User project/3.BasicFunction/Source/AssistCurve.c

@@ -171,8 +171,7 @@ static void ass_voAssistModeSelect(void) // 上电运行一次or助力参数更
     {
         SLONG slTorqAssGain[15][4] = TORQUE_ASSIST_DEFAULT;
         SLONG slCadAssGain[5][4] = CADENCE_ASSIST_DEFAULT;
-        UWORD a ;
-        a =sizeof( slTorqAssGain);
+
         memcpy(&flash_stPara.slTorqAssGain[0], &slTorqAssGain[0], sizeof(slTorqAssGain));
         memcpy(&flash_stPara.slCadAssGain[0], &slCadAssGain[0], sizeof(slCadAssGain));
     }
@@ -538,25 +537,28 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
         ass_stCalCoef.swCadanceGain = 4096; //Q12
     }
     /*  Assist torque Cal using Assist Curve */
-    //slTeTorAssitTmpPu = (SLONG)(ass_slPolynomial(&ass_stCalCoef.uwTorqueAssGain[ass_stCalIn.uwGearSt], &swTorqCmd, 14)); // Q14  转矩助力曲线
+#if(GIANT_ENABLE != 1)
+    slTeTorAssitTmpPu = (SLONG)(ass_slPolynomial(&ass_stCalCoef.uwTorqueAssGain[ass_stCalIn.uwGearSt], &swTorqCmd, 14)); // Q14  转矩助力曲线
+    if(ass_stCalIn.uwGearSt == 5)
+    {
+        slTeTorAssitLinerPu = (((SLONG)swTorqCmd * LinerAssist[ass_stCalIn.uwGearSt-1] )>> 12) + 273; // Q14  转矩助力曲线线性段
+    }
+    else
+    {
+        slTeTorAssitLinerPu = (((SLONG)swTorqCmd * LinerAssist[ass_stCalIn.uwGearSt-1] )>> 12) + 273;
+    }
+   
+    if (slTeTorAssitTmpPu < slTeTorAssitLinerPu)
+    {
+        slTeTorAssitTmpPu = slTeTorAssitLinerPu;
+    }
+    else
+    {
+        //do nothing;
+    }
+#else
     slTeTorAssitTmpPu = (SLONG)giant_slPolynomial(&swTorqCmd);
-//    if(ass_stCalIn.uwGearSt == 5)
-//    {
-//        slTeTorAssitLinerPu = (((SLONG)swTorqCmd * LinerAssist[ass_stCalIn.uwGearSt-1] )>> 12) + 273; // Q14  转矩助力曲线线性段
-//    }
-//    else
-//    {
-//        slTeTorAssitLinerPu = (((SLONG)swTorqCmd * LinerAssist[ass_stCalIn.uwGearSt-1] )>> 12) + 273;
-//    }
-//   
-//    if (slTeTorAssitTmpPu < slTeTorAssitLinerPu)
-//    {
-//        slTeTorAssitTmpPu = slTeTorAssitLinerPu;
-//    }
-//    else
-//    {
-//        //do nothing;
-//    }
+#endif
                                         
     swCadCmd = (SWORD)((((SLONG)ass_stCalIn.uwcadance * ass_stCalCoef.swSmoothGain) >> 12) * 10);  // 踏频指令斜坡
     slTeCadAssitTmpPu = ((SLONG)(ass_slPolynomial(&ass_stCalCoef.uwCadencAsseGain[ass_stCalIn.uwGearSt], &swCadCmd, 20))) >> 6; // Q20 - Q6 = Q14 //踏频助力曲线
@@ -607,7 +609,7 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
     switch (Ass_FSM)
     {
     case Prepare:
-        
+    {
         UWORD tmpKp = 4000;//ass_ParaSet.uwStartUpCadNm ; //Q10
         slPreSpderror = (((SLONG)ass_stCalOut.swCadSpd2MotSpd * 800 )>>10) - ass_stCalIn.uwSpdFbkAbsPu; //Q15
         swPreCurrentPu = (slPreSpderror * tmpKp )>> 11; //Q14
@@ -638,6 +640,7 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
         
         
         break;
+    }
     case Startup:
          /* 启动系数 */
         if(ass_pvt_uwSmoothFlg == 0)
@@ -1161,11 +1164,12 @@ static void ass_voAssitCurLim(UWORD gear, UWORD uwBikeSpeedHzPu, UWORD uwCurMaxP
     }
 
     uwIqLimitTemp1 = (UWORD)(((ULONG)ass_stCurLimCoef.uwLimitGain[gear] * uwCurMaxPu) >> 10);
-
+#if(GIANT_ENABLE == 1)
     if(stGiantControlParams.MaximumTorque > 0)
     {
         uwIqLimitTemp1 = uwCurMaxPu * stGiantControlParams.MaximumTorque * 10 / 75;
     }
+#endif
     ass_stCurLimOut.uwIqlimit = uwIqLimitTemp1;
 }
 

+ 2 - 2
User project/3.BasicFunction/Source/bikelight.c

@@ -20,7 +20,7 @@
 #include "power.h"
 #include "CodePara.h"
 #include "adc.h"
-#include "Customization.h"
+#include "giant_can.h"
 //----------------------------
 
 static BIKELED_STR         BikeLedPara;
@@ -230,7 +230,7 @@ void bikelight_voBikeLightControl(UWORD switchAction, BOOL Brate_Sta,UWORD uwLig
   }
   else
   {
-#if(GIANT_ENABLE == 0)
+#if(GIANT_ENABLE != 1)
     // ---------------尾灯6个状态处理------------
     switch( ubBackLedMode)
     {

+ 4 - 2
User project/3.BasicFunction/Source/canAppl.c

@@ -268,8 +268,10 @@ void Can_voInitMC_Run(void)
     strncpy(MC_VerInfo.FW_Version, (char *)chFwVersion, 16);
     
     // Firmware Special Info
-    //char chFrimware[32]="TC00000-MC00000-V0r0.  ";
-    char chFrimware[32]="TW2024X002-CB0072-V0r0.";//len=23
+    char chFrimware[32]="TC00000-MC00000-V0r0.  ";
+#if(GIANT_ENABLE == 1)
+    strncpy(chFrimware, (char *)"TW2024X002-CB0072-V0r0.", 23);
+#endif
     strncat(chFrimware,FINGER_PRINT,9);
     strncpy(Firmware_Special, (char *)chFrimware, 32);
     

+ 26 - 1
User project/3.BasicFunction/Source/giant_can.c

@@ -22,6 +22,7 @@
 #include "power.h"
 #include "CodePara.h"
 #include "flash_master.h"
+#include "Customization.h"
 /******************************
  *
  *  Parameter
@@ -33,6 +34,30 @@ GiantControlParams_Struct_t stGiantControlParams;
 CANFrame_Info_Struct_t stCANFrame_InfoRx = {MAXFRAME_SIZE, 0, 0, 0};
 CAN_ReceiveFrame_Struct_t stCAN_ReceiveFrame_Buf_Rx[MAXFRAME_SIZE];
 UBYTE HW_psn[3];
+#if(GIANT_ENABLE != 1)
+void giant_Init(void)
+{}
+void giant_10msTask(void)
+{}
+void CANFrame_Rx_ISR(void)
+{}
+void giant_CANRxData_Process(void)
+{}
+void giant_SendDriveChainPassiveData(UBYTE nodegroup, UBYTE dataaddr)
+{}
+void giant_SendDriveChainActiveData(UBYTE functiongroup, UBYTE dataaddr)
+{}
+void giant_SendRemote(UBYTE motiongroup)
+{}
+void giant_SendExtendData(UBYTE dataaddr, UBYTE datatype, UBYTE *data, UBYTE len)
+{}
+void giant_DataProcess(void)
+{}
+SLONG giant_slPolynomial(const SWORD *value)
+{
+  return 0;
+}
+#else
 /***************************************************************
  Function: 
  Description: 
@@ -853,7 +878,7 @@ SLONG giant_slPolynomial(const SWORD *value)
     
     return out;
 }
-
+#endif
 /*************************************************************************
  End of this File (EOF)!
  Do not put anything after this part!

+ 43 - 34
User project/3.BasicFunction/Source/power.c

@@ -18,6 +18,7 @@
 #include "can.h"
 #include "api.h"
 #include "board_config.h"
+#include "Customization.h"
 /******************************
  *
  *  Parameter
@@ -66,17 +67,19 @@ void power_voPowerManagement(UWORD uwPowerPara, ULONG SysTickCnt, ULONG OBC_Butt
     ULONG ulAutoPowerOffDelayTime;
     ULONG ulPowerStartDelayTime;
     ULONG ulPowerOFFDelayTime;
-    
-    //ulPowerStartDelayTime =  (ULONG)(power_stPowStateCof.uwPowerStartTouchTimeCnt + ((uwPowerPara & 0xF000)>>12) * 200);//ms
-    ulPowerStartDelayTime = 5;
+    UBYTE keyState;
+  
+    ulPowerStartDelayTime =  (ULONG)(power_stPowStateCof.uwPowerStartTouchTimeCnt + ((uwPowerPara & 0xF000)>>12) * 200);//ms
     ulPowerOFFDelayTime =  (ULONG)(power_stPowStateCof.uwPowerShutTouchTimeCnt + ((uwPowerPara & 0x0F00)>>8) * 200);//ms
     ulAutoPowerOffDelayTime = (ULONG)((uwPowerPara & 0x00FF) * 60);//s
     
+    keyState = iGpio_Read(HW_GPIO_POWERSTATE_PIN);
+    
     switch(power_stPowStateOut.powerstate)
     {
         case POWER_START: // 电源键按下,超过1s进入POWER ON
         {
-            if(iGpio_Read(HW_GPIO_POWERSTATE_PIN) != 0)
+            if(keyState != 0)
             {
                 power_stPowStateOut.uwPowerStartupCnt++;
                 if (power_stPowStateOut.uwPowerStartupCnt == ulPowerStartDelayTime)
@@ -94,7 +97,7 @@ void power_voPowerManagement(UWORD uwPowerPara, ULONG SysTickCnt, ULONG OBC_Butt
             power_stPowStateOut.uwPowerOn2OffCnt++;
             if (power_stPowStateOut.uwPowerOn2OffCnt >= power_stPowStateCof.uwPowerOn2OffTimeCnt)
             {
-                if(iGpio_Read(HW_GPIO_POWERSTATE_PIN) == 0)
+                if(keyState == 0)
                 {
                     power_stPowStateOut.powerstate = POWER_ON_END;
                     power_stPowStateOut.blPowerStartupFlg = TRUE;
@@ -107,21 +110,24 @@ void power_voPowerManagement(UWORD uwPowerPara, ULONG SysTickCnt, ULONG OBC_Butt
         case POWER_ON_END: // 电源键按下进入POWER_OFF,或待机设定时候后自动进入POWER_OFF
         {
             //The key pushed down for "uwPowerShutTouchTimeCnt" to POWER_OFF
-//            if (iGpio_Read(HW_GPIO_POWERSTATE_PIN) != 0)
-//            {
-//                power_stPowStateOut.uwPowerShutdnCnt++;
-//                if (power_stPowStateOut.uwPowerShutdnCnt >= ulPowerOFFDelayTime)
-//                {
-//                    power_stPowStateOut.powerstate = POWER_OFF;
-//                    power_stPowStateOut.blPowerStartupFlg = FALSE;
-//                    //Send power off command
-//                    SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t *)"SHUTDOWN");
-//                }
-//            }
-//            else
-//            {
-//                power_stPowStateOut.uwPowerShutdnCnt = 0;
-//            }
+#if(GIANT_ENABLE == 1)
+         keyState = 0;
+#endif
+            if (keyState != 0)
+            {
+                power_stPowStateOut.uwPowerShutdnCnt++;
+                if (power_stPowStateOut.uwPowerShutdnCnt >= ulPowerOFFDelayTime)
+                {
+                    power_stPowStateOut.powerstate = POWER_OFF;
+                    power_stPowStateOut.blPowerStartupFlg = FALSE;
+                    //Send power off command
+                    SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t *)"SHUTDOWN");
+                }
+            }
+            else
+            {
+                power_stPowStateOut.uwPowerShutdnCnt = 0;
+            }
 
             //Do not auto power off
             if(ulAutoPowerOffDelayTime == 0)
@@ -129,20 +135,23 @@ void power_voPowerManagement(UWORD uwPowerPara, ULONG SysTickCnt, ULONG OBC_Butt
                 AutoPowerOffTimeCnt = SysTickCnt;
             }
             //Stand for ulAutoPowerOffDelayTime seconds to POWER_OFF
-//            if((uwTorqueIn < 20) && (CadenceIn < 5) && (BikeSpeed < 10) && ((SysTickCnt - OBC_ButtonSetTimeCnt) > 1000))
-//            {
-//                if(SysTickCnt - AutoPowerOffTimeCnt > ulAutoPowerOffDelayTime * 1000) //unit s
-//                {
-//                    power_stPowStateOut.powerstate = POWER_OFF; 
-//                    power_stPowStateOut.blPowerStartupFlg = FALSE;
-//                    //Send power off command
-//                    SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t *)"SHUTDOWN");
-//                }
-//            }
-//            else
-//            {
-//                AutoPowerOffTimeCnt = SysTickCnt;
-//            }  
+#if(GIANT_ENABLE == 1)
+            AutoPowerOffTimeCnt = SysTickCnt;
+#endif
+            if((uwTorqueIn < 20) && (CadenceIn < 5) && (BikeSpeed < 10) && ((SysTickCnt - OBC_ButtonSetTimeCnt) > 1000))
+            {
+                if(SysTickCnt - AutoPowerOffTimeCnt > ulAutoPowerOffDelayTime * 1000) //unit s
+                {
+                    power_stPowStateOut.powerstate = POWER_OFF; 
+                    power_stPowStateOut.blPowerStartupFlg = FALSE;
+                    //Send power off command
+                    SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t *)"SHUTDOWN");
+                }
+            }
+            else
+            {
+                AutoPowerOffTimeCnt = SysTickCnt;
+            }  
             break;
         }  
         case POWER_OFF: // 关机处理,等待数据存储完成,关闭LOCK

+ 44 - 2
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Source/hwsetup.c

@@ -300,9 +300,9 @@ void hw_voInitGPIO(void)
     =======================================================================*/
     gpio_init(GPIOD,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ, GPIO_PIN_2); /* SPI Chip Select */
     gpio_bit_set(GPIOD, GPIO_PIN_2);
-    
+#if(GIANT_ENABLE == 1)    
     gpio_bit_set(GPIOC, GPIO_PIN_1);//Power On
-   
+#endif   
 }
 
 /*************************************************************************
@@ -1028,6 +1028,7 @@ void hw_voInitCAN(void)
     can_parameter.time_segment_1 = CAN_BT_BS1_4TQ;
     can_parameter.time_segment_2 = CAN_BT_BS2_1TQ;
     /* baudrate 1Mbps */
+#if(GIANT_ENABLE == 1)
     can_parameter.prescaler = 12;  //36M/((1+4+1)*12)=500K
     can_init(CAN0, &can_parameter);
     
@@ -1079,6 +1080,47 @@ void hw_voInitCAN(void)
     can_filter.filter_fifo_number = CAN_FIFO1;//过滤器2关联到FIFO1
     can_filter.filter_enable = ENABLE;//激活过滤器0
     can_filter_init(&can_filter);//滤波器初始化
+#else
+    can_parameter.prescaler = 24;  //36M/((1+4+1)*24)=250K
+    can_init(CAN0, &can_parameter);
+    
+    /* initialize filter 0 */ 
+    can_filter.filter_number = 0;
+    can_filter.filter_mode = CAN_FILTERMODE_MASK;
+    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
+    can_filter.filter_list_high = (uint16_t)((((uint32_t)ID_TO_MC_FILTER << 21) & 0xFFFF0000U) >> 16); 
+    can_filter.filter_list_low = (uint16_t)(((uint32_t)ID_TO_MC_FILTER << 21) | CAN_FF_STANDARD | CAN_FT_DATA) & 0xFFFF;
+    can_filter.filter_mask_high = (uint16_t)((((uint32_t)ID_TO_MC_MASK << 21) & 0xFFFF0000U) >> 16);
+    can_filter.filter_mask_low = (uint16_t)((((uint32_t)ID_TO_MC_MASK << 21) & 0xFFFF) | CAN_FF_STANDARD | CAN_FT_DATA);
+    can_filter.filter_fifo_number = CAN_FIFO0;
+    can_filter.filter_enable = ENABLE;
+    can_filter_init(&can_filter);    
+  
+     /* initialize filter 1 */ 
+    can_filter.filter_number = 1;
+    can_filter.filter_mode = CAN_FILTERMODE_MASK;
+    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
+    can_filter.filter_list_high = (uint16_t)((((uint32_t)ID_BC_FILTER << 21) & 0xFFFF0000U) >> 16);
+    can_filter.filter_list_low = (uint16_t)(((uint32_t)ID_BC_FILTER << 21) | CAN_FF_STANDARD | CAN_FT_DATA) & 0xFFFF;
+    can_filter.filter_mask_high = (uint16_t)((((uint32_t)ID_BC_MASK << 21) & 0xFFFF0000U) >> 16);
+    can_filter.filter_mask_low =  (uint16_t)((((uint32_t)ID_BC_MASK << 21) & 0xFFFF) | CAN_FF_STANDARD | CAN_FT_DATA);
+    can_filter.filter_fifo_number = CAN_FIFO0;
+    can_filter.filter_enable = ENABLE;
+    can_filter_init(&can_filter);
+
+    /* initialize filter 2 */ 
+    //配置过滤器2,Enviolo自动变速器
+    can_filter.filter_number = 2;
+    can_filter.filter_mode = CAN_FILTERMODE_MASK;
+    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
+    can_filter.filter_list_high = (uint16_t)((((uint32_t)ID_ENVIOLO_FILTER << 21) & 0xFFFF0000U) >> 16);// ((ulExtId<<3)>>16)&0xFFFF;
+    can_filter.filter_list_low = (uint16_t)(((uint32_t)ID_ENVIOLO_FILTER << 21) | CAN_FF_STANDARD | CAN_FT_DATA) & 0xFFFF;//((ulExtId<<3)&0xFFFF)|CAN_ID_EXT|CAN_RTR_Data;
+    can_filter.filter_mask_high = (uint16_t)((((uint32_t)ID_ENVIOLO_MASK << 21) & 0xFFFF0000U) >> 16); //((ulFilter<<3)>>16)&0xFFFF;
+    can_filter.filter_mask_low =  (uint16_t)((((uint32_t)ID_ENVIOLO_MASK << 21) & 0xFFFF) | CAN_FF_STANDARD | CAN_FT_DATA);
+    can_filter.filter_fifo_number = CAN_FIFO1;//过滤器2关联到FIFO1
+    can_filter.filter_enable = ENABLE;//激活过滤器0
+    can_filter_init(&can_filter);//滤波器初始化
+#endif
 }
 /*************************************************************************
  Function:

+ 1 - 0
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/syspar.h

@@ -17,6 +17,7 @@
 /************************************************************************
  Compiler Directives
 *************************************************************************/
+#include "Customization.h"
 /************************************************************************
  Definitions & Macros
 *************************************************************************/

+ 3 - 0
WLMCP_PACKED.ewp

@@ -2648,6 +2648,9 @@
                 <file>
                     <name>$PROJ_DIR$\User project\3.BasicFunction\Include\classB.h</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\3.BasicFunction\Include\Customization.h</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\3.BasicFunction\Include\display.h</name>
                 </file>