ソースを参照

串口转CAN测试

LAPTOP-KB7QFH2U\ChenJie-PC 2 年 前
コミット
c359df4614
8 ファイル変更471 行追加22 行削除
  1. 4 4
      .settings/language.settings.xml
  2. 30 2
      src/AppGlobalVar.c
  3. 28 0
      src/AppGlobalVar.h
  4. 398 9
      src/AppTaskCan.c
  5. 6 4
      src/AppTaskUart0.c
  6. 1 1
      src/USER_CONFIG.h
  7. 3 1
      src/hal_adapter.h
  8. 1 1
      src/main.c

+ 4 - 4
.settings/language.settings.xml

@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1695918988054320556" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="376247214763375607" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1695918988054320556" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="376247214763375607" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -27,7 +27,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1695918988054320556" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="376247214763375607" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -38,7 +38,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1695918988054320556" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="376247214763375607" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

+ 30 - 2
src/AppGlobalVar.c

@@ -16,10 +16,38 @@
 
 #include "AppGlobalVar.h"
 //*全局变量*//
-uint32 BleVersion = 0x01010401;         // ble的软件版本
+uint8  lockAndUnlockSensor[4] = {0};
+uint8  unlockFlg = 0;
+uint8  lockFlg = 0;
+uint8  swapBattDone = 0;
+uint8  backToDrv = 0;
+uint8 lockCmdFlg = 0;
+uint8 unlockCmdFlg = 0;
+
+uint8 PackExcSts = 0;
+uint8 BattSwappingAllw = 0;
+uint8 AllPackPwrDnSts = 0;
+uint8 BlueDisconnectFailFlg = 0;
+uint8 VehPowerMode = 0;
+uint8 GearSts = 0;
+uint8 EPBWorkingSts = 0;
+uint8 BrakeSwitchSts = 0;
+uint8 DoorSts = 0;
+uint16 SteeringWheelAngle = 0;
+
+uint8 carBleConnectSts = 0;
+
+uint8 packReadySts = 0;
+uint8 installPackLoc = 0;
+uint8 installPackNum = 0;
+uint8 cmdSwapBatt = 0;
+uint8 connecMacUb = 1;
+uint8 canTargetMac[6] = {0x00};
+
+uint32 BleVersion = 0x01010401; 
 uint8 BleMacAddr[6];
 uint8 BleTargetMacAddr[6] = {0xBE, 0x84, 0xCC, 0x29, 0x3B, 0xCB};
-uint8 BleCurrentRole = 0;
+uint8 BleCurrentRole = 1;
 uint8 BleSetRole = 0;          // 0-从机(默认),1-主机
 uint8 BleSetRoleEnable = 0;    //默认角色不设置
 uint8 BleConnectEnable = 0;    //主机蓝牙连接使能,0-未使能,1-使能

+ 28 - 0
src/AppGlobalVar.h

@@ -17,6 +17,34 @@
 #define APPGLOBALVAR_H_
 
 #include "hal_adapter.h"
+extern uint8  lockAndUnlockSensor[4];
+extern uint8  unlockFlg;
+extern uint8  lockFlg;
+extern uint8  swapBattDone;
+extern uint8  backToDrv ;
+extern uint8 lockCmdFlg ;
+extern uint8 unlockCmdFlg ;
+
+extern uint8 PackExcSts ;
+extern uint8 BattSwappingAllw ;
+extern uint8 AllPackPwrDnSts ;
+extern uint8 BlueDisconnectFailFlg ;
+extern uint8 VehPowerMode;
+extern uint8 GearSts ;
+extern uint8 EPBWorkingSts;
+extern uint8 BrakeSwitchSts ;
+extern uint8 DoorSts ;
+extern uint16 SteeringWheelAngle;
+
+extern uint8 carBleConnectSts ;//车端蓝牙连接状态
+/**/
+/*全局变量区*/
+extern uint8 packReadySts;
+extern uint8 installPackLoc;
+extern uint8 installPackNum;
+extern uint8 cmdSwapBatt;
+extern uint8 connecMacUb;
+extern uint8 canTargetMac[6];
 //*全局变量*//
 extern uint8 BleMacAddr[6];
 extern uint8 BleTargetMacAddr[6];

+ 398 - 9
src/AppTaskCan.c

@@ -7,8 +7,14 @@
 #include "AppTaskCan.h"
 static void CanDataAsk(QueueDataTrans_Type AskData);
 uint8 DataPackCounter[21] = {1,1,7,5,16,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+static uint32 timerConuter = 0;
 static void UdsAns(bool PosFlg,uint8 UdsService,uint8 UdsSubService,uint8 Idx,uint8 *AnsData,uint8 AnsDataLen);
 void udsService(uint8 *DataIn);
+static void dataInit();
+static void appFunc();
+static void CanSend100ms(void);
+static void CanDecode(uint32 AskCanID, uint8 AskData[]);
+static void uartDataDecode(uint8 Data[]);
 static void vCanRxCallback(TimerHandle_t pxTimer)
 {
 	uint32 ulTimerID;
@@ -16,9 +22,9 @@ static void vCanRxCallback(TimerHandle_t pxTimer)
 	if(ulTimerID==0)
 	{
 		Can_MainFunction_Read();
+		timerConuter++;
 	}
 }
-
 void CanTask()
 {
 	CanRecvQueueHandle = xQueueCreate(16, sizeof(Can_Msg_Type_Data)); // CAN获取消息队列创建
@@ -32,7 +38,10 @@ void CanTask()
 	TimerHandle_t monitorTimer1ms;
 	monitorTimer1ms = xTimerCreate("monitor1ms",1,pdTRUE,(void *)0,vCanRxCallback);
 	xTimerStart(monitorTimer1ms,0);
-
+	uint32 canRecvDelay = 0;
+	sint8 QueueRet = -1;
+	uint8 uartData[10] = {0};
+	uint32 canSendCounter = 0;
 	while (TRUE)
 	{
 		switch (CanState)
@@ -45,23 +54,403 @@ void CanTask()
 			case 1:
 			{
 				memset(&CanRxMsg, 0, sizeof(CanRxMsg));
-	//			Can_MainFunction_Read();
-				BaseType_t ret = xQueueReceive(CanRecvQueueHandle, &CanRxMsg, 0);
+				BaseType_t ret = xQueueReceive(CanRecvQueueHandle, &CanRxMsg, 10);
 				if (ret == pdPASS)
 				{
-					BleCanTransmit(CanRxMsg.id, CanRxMsg.data);
+					CanDecode(CanRxMsg.id, CanRxMsg.data);
+					canRecvDelay = 0;
 				}
-				BaseType_t ret2 = xQueueReceive(Uart2ToCanDataHandle,&CanAskData,10);//带有校验码
-				if (ret2 == pdPASS)
+				else
 				{
-					CanDataAsk(CanAskData);
+					canRecvDelay = canRecvDelay + 10;
+				}
+				if(canRecvDelay>10*1000)
+				{
+					canRecvDelay = 0;
+					dataInit();
+				}
+				QueueRet = xQueueReceive(McuDataSendHandle,uartData,0);
+				if(QueueRet==pdPASS)//串口数据解析
+				{
+					uartDataDecode(uartData);// 解码
+				}
+				if((timerConuter - canSendCounter)>100)//100ms
+				{
+					canSendCounter = timerConuter;
+					appFunc();
+					CanSend100ms();
 				}
-//				vTaskDelay(pdMS_TO_TICKS(10));
 				break;
 			}
 		}
 	}
 }
+static void uartDataDecode(uint8 Data[])
+{
+
+    uint8 CmdIndex = Data[0];
+	BleRecvDataFromUart2 DataSend={0,NULL};
+	uint8 ReadLen = 0;
+	sint8 McuDataRet = -1;
+    switch (CmdIndex)
+    {
+    case 0x01: //心跳数据,为了维持通讯
+    {
+    	uint16 CrcChkCal = 0;
+    	ReadLen = 9;
+    	DataSend.RealLen = ReadLen;
+    	DataSend.DataPtr = malloc(ReadLen+1);
+    	memset(DataSend.DataPtr,0x00,ReadLen+1);
+    	*(DataSend.DataPtr+0) = 0x11;
+    	*(DataSend.DataPtr+1) = 0x02;
+    	*(DataSend.DataPtr+2) = 0x00;
+    	*(DataSend.DataPtr+3) = 0x01;
+    	CrcChkCal = CRC16_Modbus(DataSend.DataPtr,ReadLen-2);
+    	*(DataSend.DataPtr+7) = CrcChkCal;
+    	*(DataSend.DataPtr+8) = CrcChkCal>>8;
+    	McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);
+        break;
+    }
+    case 0x02: //获取换电控制器信息
+    {
+    	uint16 CrcChkCal = 0;
+    	ReadLen = 51;
+    	DataSend.RealLen = ReadLen;
+    	DataSend.DataPtr = malloc(ReadLen+1);
+    	memset(DataSend.DataPtr,0x00,ReadLen+1);
+    	*(DataSend.DataPtr+7*0 + 0) = 0x21;
+    	*(DataSend.DataPtr+7*0 + 1) = unlockFlg;
+    	*(DataSend.DataPtr+7*0 + 2) = lockFlg;
+    	*(DataSend.DataPtr+7*0 + 3) = VehPowerMode;
+    	*(DataSend.DataPtr+7*1) = 0x22;
+    	*(DataSend.DataPtr+7*2) = 0x23;
+    	*(DataSend.DataPtr+7*3) = 0x24;
+    	*(DataSend.DataPtr+7*4) = 0x25;
+    	*(DataSend.DataPtr+7*5) = 0x26;
+    	*(DataSend.DataPtr+7*6) = 0x27;
+    	CrcChkCal = CRC16_Modbus(DataSend.DataPtr,ReadLen-2);
+    	*(DataSend.DataPtr+49) = CrcChkCal;
+    	*(DataSend.DataPtr+50) = CrcChkCal>>8;
+    	McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);
+        break;
+    }
+    case 0x03: //获得车辆信息
+    {
+    	uint16 CrcChkCal = 0;
+    	ReadLen = 37;
+    	DataSend.RealLen = ReadLen;
+    	DataSend.DataPtr = malloc(ReadLen+1);
+    	memset(DataSend.DataPtr,0x00,ReadLen+1);
+    	*(DataSend.DataPtr+7*0 + 0) = 0x31;
+    	*(DataSend.DataPtr+7*0 + 1) = EPBWorkingSts;
+    	*(DataSend.DataPtr+7*0 + 2) = BrakeSwitchSts;
+    	*(DataSend.DataPtr+7*0 + 3) = 0x00;
+    	*(DataSend.DataPtr+7*0 + 3) = VehPowerMode;
+    	*(DataSend.DataPtr+7*1) = 0x32;
+    	*(DataSend.DataPtr+7*2) = 0x33;
+    	*(DataSend.DataPtr+7*3) = 0x34;
+    	*(DataSend.DataPtr+7*4) = 0x35;
+    	CrcChkCal = CRC16_Modbus(DataSend.DataPtr,ReadLen-2);
+    	*(DataSend.DataPtr+35) = CrcChkCal;
+    	*(DataSend.DataPtr+36) = CrcChkCal>>8;
+    	McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);
+        break;
+    }
+    case 0x04: //获取电池信息
+    {
+    	uint16 CrcChkCal = 0;
+    	ReadLen = 16*7+2;
+    	DataSend.RealLen = ReadLen;
+    	DataSend.DataPtr = malloc(ReadLen+1);
+    	memset(DataSend.DataPtr,0x00,ReadLen+1);
+    	*(DataSend.DataPtr+7*0) = 0x40;
+    	*(DataSend.DataPtr+7*1) = 0x41;
+    	*(DataSend.DataPtr+7*2) = 0x42;
+    	*(DataSend.DataPtr+7*3) = 0x43;
+    	*(DataSend.DataPtr+7*4) = 0x44;
+    	*(DataSend.DataPtr+7*5) = 0x45;
+    	*(DataSend.DataPtr+7*6) = 0x46;
+    	*(DataSend.DataPtr+7*7) = 0x47;
+    	*(DataSend.DataPtr+7*8) = 0x48;
+    	*(DataSend.DataPtr+7*9) = 0x49;
+    	*(DataSend.DataPtr+7*10) = 0x4A;
+    	*(DataSend.DataPtr+7*11) = 0x4B;
+    	*(DataSend.DataPtr+7*12) = 0x4C;
+    	*(DataSend.DataPtr+7*13) = 0x4D;
+    	*(DataSend.DataPtr+7*14) = 0x4E;
+    	*(DataSend.DataPtr+7*15) = 0x4F;
+    	CrcChkCal = CRC16_Modbus(DataSend.DataPtr,ReadLen-2);
+    	*(DataSend.DataPtr+112) = CrcChkCal;
+    	*(DataSend.DataPtr+113) = CrcChkCal>>8;
+    	McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);
+        break;
+    }
+    case 0x05: //握手
+    {
+    	uint16 CrcChkCal = 0;
+    	ReadLen = 1*7+2;
+    	DataSend.RealLen = ReadLen;
+    	DataSend.DataPtr = malloc(ReadLen+1);
+    	memset(DataSend.DataPtr,0x00,ReadLen+1);
+    	*(DataSend.DataPtr+7*0) = 0x51;
+    	CrcChkCal = CRC16_Modbus(DataSend.DataPtr,ReadLen-2);
+    	*(DataSend.DataPtr+1*7+0) = CrcChkCal;
+    	*(DataSend.DataPtr+1*7+1) = CrcChkCal>>8;
+    	McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);
+        break;
+    }
+    case 0x06: //解锁
+    {
+        break;
+    }
+    case 0x07: //锁紧
+    {
+        break;
+    }
+    case 0x08: //完成换电
+    {
+    	swapBattDone = 1;
+        break;
+    }
+    case 0x09: //强制解锁,强制上升
+    {
+    	unlockCmdFlg = 1;
+        break;
+    }
+    case 0x0A: //强制锁紧,强制下降
+    {
+    	lockCmdFlg = 1;
+        break;
+    }
+    case 0x0B: //回到行车状态
+    {
+    	swapBattDone = 0;
+    	backToDrv = 1;
+        break;
+    }
+    case 0x0C: //顶板举升
+    {
+        break;
+    }
+    case 0x0D: //顶板下降
+    {
+        break;
+    }
+    case 0x0E: //换电开始自动解锁
+    {
+        break;
+    }
+    case 0x0F: //换电完成自动锁紧
+    {
+        break;
+    }
+    case 0x10: //除尘开始
+    {
+        break;
+    }
+    case 0x11: //除尘关闭
+    {
+        break;
+    }
+    case 0x12: //切换到无线通信状态
+    {
+        break;
+    }
+    case 0x13: //进入换电状态
+    {
+        break;
+    }
+    case 0x14: //急停指令
+    {
+        break;
+    }
+    default:
+        break;
+    }
+	if(McuDataRet!=pdPASS)//发送不成功则释放
+	{
+		if(DataSend.DataPtr != NULL)
+		{
+			free(DataSend.DataPtr);
+		}
+		DataSend.DataPtr = NULL;
+	}
+}
+/*通讯板串口转CAN函数*/
+static void CanSend100ms(void)
+{
+	Can_Msg_Type CanTxMsg;
+	uint8 DataSend[8]={0};
+	uint8 cmdIdx = 1;
+	switch(cmdIdx)
+	{
+	case 1:
+		/*301发送*/
+		memset(DataSend,0x00,8);
+		DataSend[0] = packReadySts;
+		DataSend[1] = 0;
+		DataSend[2] = 0;
+		DataSend[3] = 0;
+		DataSend[4] = 0;
+		DataSend[5] = 0;
+		DataSend[6] = 0;
+		DataSend[7] = 0;
+		CanTxMsg.id = 0x301;
+		CanTxMsg.idFrame = CAN_STANDARD_ID_TYPE;
+		CanTxMsg.sdu = DataSend;
+		CanTxMsg.length = 8;
+		CanIf_SendMessage(0, CanTxMsg);
+//		break;
+	case 2:
+		/*302发送*/
+		memset(DataSend,0x00,8);
+		DataSend[0] = ((installPackNum<<4)|installPackLoc)&0xFF;
+		DataSend[1] = cmdSwapBatt;
+		DataSend[2] = 0;
+		DataSend[3] = 0;
+		DataSend[4] = 0;
+		DataSend[5] = 0;
+		DataSend[6] = 0;
+		DataSend[7] = 0;
+		CanTxMsg.id = 0x302;
+		CanTxMsg.idFrame = CAN_STANDARD_ID_TYPE;
+		CanTxMsg.sdu = DataSend;
+		CanTxMsg.length = 8;
+		CanIf_SendMessage(0, CanTxMsg);
+//		break;
+	case 3:
+		/*303发送*/
+		if(BleConnectEnable==1)
+		{
+			memcpy(canTargetMac,BleTargetMacAddr,6);
+			memset(DataSend,0x00,8);
+			DataSend[0] = 0;
+			DataSend[1] = connecMacUb;
+			DataSend[2] = canTargetMac[0];
+			DataSend[3] = canTargetMac[1];
+			DataSend[4] = canTargetMac[2];
+			DataSend[5] = canTargetMac[3];
+			DataSend[6] = canTargetMac[4];
+			DataSend[7] = canTargetMac[5];
+			CanTxMsg.id = 0x303;
+			CanTxMsg.idFrame = CAN_STANDARD_ID_TYPE;
+			CanTxMsg.sdu = DataSend;
+			CanTxMsg.length = 8;
+			CanIf_SendMessage(0, CanTxMsg);
+			connecMacUb++;
+		}
+		break;
+	default:
+		break;
+	}
+	return;
+}
+static void CanDecode(uint32 AskCanID, uint8 AskData[])
+{
+	switch(AskCanID)
+	{
+	case 0x201:
+		PackExcSts= AskData[0];
+		VehPowerMode = (AskData[1]>>3)&0x01;
+		GearSts = (AskData[1]>>4)&0x01;
+		EPBWorkingSts = (AskData[1]>>5)&0x01;
+		BrakeSwitchSts = (AskData[1]>>6)&0x01;
+		DoorSts = (AskData[1]>>7)&0x01;
+		SteeringWheelAngle = ((AskData[2]&0x07)<<13)|(AskData[2]<<5)|(AskData[3]>>3);
+		BattSwappingAllw = (AskData[3]>>2)&0x01;
+		BlueDisconnectFailFlg = (AskData[3]>>1)&0x01;
+		AllPackPwrDnSts= (AskData[4]>>4)&0x0F;
+		break;
+	case 0x202:
+		break;
+	case 0x203:
+		carBleConnectSts = AskData[0]&0x0F;
+		BleConnectFlg = carBleConnectSts;
+		break;
+	case 0x205:
+		lockAndUnlockSensor[0] = (AskData[1]>>4)&0x0F;
+		lockAndUnlockSensor[1] = (AskData[1])&0x0F;
+		lockAndUnlockSensor[2] = (AskData[2]>>4)&0x0F;
+		lockAndUnlockSensor[3] = (AskData[2])&0x0F;
+		for(uint8 i=0;i<4;i++)
+		{
+			if(lockAndUnlockSensor[i]==0x01)
+			{
+				setbit(lockFlg,i);
+				clrbit(unlockFlg,i);
+			}
+			else if(lockAndUnlockSensor[i]==0x02)
+			{
+				setbit(unlockFlg,i);
+				clrbit(lockFlg,i);
+			}
+		}
+		break;
+	default:
+		break;
+	}
+}
+static void dataInit()
+{
+	uint8  AskData[8] = {0};
+	PackExcSts= AskData[0];
+	VehPowerMode = (AskData[1]>>3)&0x01;
+	GearSts = (AskData[1]>>4)&0x01;
+	EPBWorkingSts = (AskData[1]>>5)&0x01;
+	BrakeSwitchSts = (AskData[1]>>6)&0x01;
+	DoorSts = (AskData[1]>>7)&0x01;
+	SteeringWheelAngle = ((AskData[2]&0x07)<<13)|(AskData[2]<<5)|(AskData[3]>>3);
+	BattSwappingAllw = (AskData[3]>>2)&0x01;
+	BlueDisconnectFailFlg = (AskData[3]>>1)&0x01;
+	AllPackPwrDnSts= (AskData[4]>>4)&0x0F;
+	carBleConnectSts = AskData[0]&0x0F;
+}
+static void appFunc()
+{
+	if(BleDisconnectEnable==1)
+	{
+		connecMacUb = 0;
+		cmdSwapBatt = 2;
+		packReadySts = 0;
+		installPackNum = 0;
+		installPackLoc = 0;
+		cmdSwapBatt = 0;
+	}
+	if(carBleConnectSts==1)//蓝牙连接成功
+	{
+		xSemaphoreGive(ConnSemaphore);
+		cmdSwapBatt = 0;
+	}
+	if(unlockCmdFlg)//开始换电
+	{
+		installPackNum = 1;
+		installPackLoc = 1;
+		cmdSwapBatt = 1;
+	}
+	if(swapBattDone)//锁紧到位
+	{
+		packReadySts = 1;
+		connecMacUb = 0;
+		unlockCmdFlg = 0;
+	}
+	if(PackExcSts==0x03)//换电电池检测完成
+	{
+		packReadySts = 0;
+		installPackNum = 0;
+		installPackLoc = 0;
+		cmdSwapBatt = 0;
+	}
+
+}
+
+
+
+
+
+
+
+
+/*常规蓝牙程序函数*/
 static void CanDataAsk(QueueDataTrans_Type AskData)
 {
 	Can_Msg_Type CanTxMsg;

+ 6 - 4
src/AppTaskUart0.c

@@ -113,7 +113,8 @@ sint8 McuAtCallbackFunc(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx, char *A
 						BleTargetMacAddr[i] = temp1|temp2;
 					}
 					BleConnectEnable = 1;
-					if( xSemaphoreTake( ConnSemaphore, 5000 ) == pdTRUE )
+					BleDisconnectEnable = 0;
+					if( xSemaphoreTake( ConnSemaphore, 20000 ) == pdTRUE )
 					{
 						memcpy(AnsPtr, SucAns, strlen(SucAns));
 						*AnsPtrLen = strlen(SucAns);
@@ -180,6 +181,7 @@ sint8 McuAtCallbackFunc(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx, char *A
 	case MAT_DisConnect:
 	{
 		BleDisconnectEnable = 1;
+		BleConnectEnable = 0;
 		memcpy(AnsPtr, SucAns, strlen(SucAns));
 		*AnsPtrLen = strlen(SucAns);
 		break;
@@ -190,7 +192,7 @@ sint8 McuAtCallbackFunc(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx, char *A
 		uint16 CrcChkGet;
 		uint16 CrcChkCal;
 		//Êý¾Ý´«ÊäͨµÀ
-		if(BleConnectFlg)
+		if(BleConnectFlg||1)
 		{
 			if(*(Readptr+7)=='0' && *(Readptr+9)=='1'&& *(Readptr+10)=='0'&& ReadLen==22)//Hex
 			{
@@ -214,7 +216,7 @@ sint8 McuAtCallbackFunc(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx, char *A
 				break;
 			}
 			CrcChkCal = CRC16_Modbus (Databuffer, 8);
-			if(CrcChkCal==CrcChkGet)
+			if(CrcChkCal==CrcChkGet||1)
 			{
 				AT_MsgFlag = true;
 				Databuffer[8] = CrcChkGet&0xff;
@@ -224,7 +226,7 @@ sint8 McuAtCallbackFunc(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx, char *A
 				BleRecvDataFromUart2 RecvDatabuffer={0,NULL};
 				sint8 QueneRetRev = -1;
 				xQueueReset(McuDataRecvHandle);
-				QueneRetRev = xQueueReceive(McuDataRecvHandle,&RecvDatabuffer,1000*3);
+				QueneRetRev = xQueueReceive(McuDataRecvHandle,&RecvDatabuffer,1000);
 				if(QueneRetRev==pdPASS)
 				{
 					uint8 DataLen = RecvDatabuffer.RealLen;

+ 1 - 1
src/USER_CONFIG.h

@@ -20,7 +20,7 @@
 #define CAN_MSG_EXTENDED 	(1)
 
 //the Default Configuration of CAN0 is Extended 250k, while CAN0 standard 250k only for WuLing project
-#define CAN0_BAUDRATE CAN_BAUDRATE_250K
+#define CAN0_BAUDRATE CAN_BAUDRATE_500K
 #define CAN0_MSG_TYPE CAN_MSG_STANDARD
 
 

+ 3 - 1
src/hal_adapter.h

@@ -70,7 +70,9 @@ UINT8 UartTramsit(UINT8 *pSend, UINT32 sendLen, UINT8 *pRead, UINT32 readLen, UI
  #include "task.h"
  #include "semphr.h"
  #include "Eep.h"
-
+#define getbit(x,y)     ((x) >> (y)&1)                        //获取x的第y位的数值
+#define setbit(x,y)     x|=(1<<y)                             //x的第y位置1
+#define clrbit(x,y)     x&=~(1<<y)                            //x的第y位置0
  #define UART_LPUART0 0
  #define UART_LPUART1 1
  #define UART_LPUART2 2

+ 1 - 1
src/main.c

@@ -141,7 +141,7 @@ int main(void)
     Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD,STD_ON);
 
     xTaskCreate( MainTask, ( const char * const ) "MainTask", 128, (void*)0, main_TASK_PRIORITY+3 , NULL );
-    xTaskCreate( BleTask, ( const char * const ) "BleTask", 256 + 64, (void*)0, main_TASK_PRIORITY , NULL );
+//    xTaskCreate( BleTask, ( const char * const ) "BleTask", 256 + 64, (void*)0, main_TASK_PRIORITY , NULL );
     xTaskCreate( CanTask, ( const char * const ) "CanTask" , 512, (void*)0, main_TASK_PRIORITY + 2, NULL );
     xTaskCreate( UartTask, ( const char * const ) "UartTask" , 512, (void*)0, main_TASK_PRIORITY + 1, NULL );
     vTaskStartScheduler();