Browse Source

平峰项目测试软件

LAPTOP-KB7QFH2U\ChenJie-PC 2 years ago
parent
commit
8b2d68d905

+ 1 - 1
Project_Settings/Startup_Code/exceptions.c

@@ -87,7 +87,7 @@ void NMI_Handler(void)
 }
 void HardFault_Handler(void)
 {
-//	ASM_KEYWORD("bx lr");
+	ASM_KEYWORD("bx lr");
     while(TRUE){};
 }
 void MemManage_Handler(void)

+ 1 - 0
src/AppGlobalVar.c

@@ -34,6 +34,7 @@ boolean CanIf_bRxFlag = false;
 QueueHandle_t CanRecvQueueHandle;
 
 /*TCP相关变量*/
+bool TcpSysReboot = 1;//tcp无法联网时,重启使能
 char ImeiNum[15] = {0};
 char IccidNum[20] = {0};
 uint8 CSQValue = 0;

+ 1 - 1
src/AppGlobalVar.h

@@ -31,7 +31,7 @@
 #define BMS_INFO 0xFF
 #define DATA_MODULE_TYPE 0x02
 //*ȫ�ֱ���*//
-
+extern bool TcpSysReboot;
 extern uint8 TcpbattSN[17];
 extern uint8 VIN[17];
 extern volatile uint32 TimerCounter;

+ 3 - 4
src/AppTaskGps.c

@@ -14,17 +14,16 @@ void GpsTask(void *pvParameters)
 	GpsDataQueueHandle = xQueueCreate(1, sizeof(GPSInfo));//长度为1才可以允许覆写
 	Dio_WriteChannel(DioConf_DioChannel_PTD1_GPIO_OUT_MCU_GPS_POW_EN, STD_ON);//GPS开机
 	uint16 pReadLen = 0;
-	uint8 *UartRecvPtr=NULL;
+	uint8 UartRecvPtr[512];
 	while(1)
 	{
 		vTaskDelay(pdMS_TO_TICKS(10));
-		UartRecvPtr = malloc(256);
-		UART_Receive_Data(UART_LPUART2,&UartRecvPtr,&pReadLen,1000);
+		memset(UartRecvPtr,0,512);
+		UART_Receive_Data(UART_LPUART2,UartRecvPtr,&pReadLen,1000);
 		if(pReadLen>0)
 		{
 			GpsDataDecode(UartRecvPtr);
 		}
-		free(UartRecvPtr);
 	}
 }
 void GpsDataDecode(uint8 *msg)

+ 3 - 0
src/AppTaskUart0.c

@@ -32,6 +32,9 @@ void Uart0Task(void *pvParameters)
 			vTaskDelay(pdMS_TO_TICKS(10));
 			if ((TimerCounter % 1000) == 0 && 1)
 			{
+#if SEGGER_PRINTF==1
+			SEGGER_RTT_printf("[%d]TimerCounter=%d\r\n",__LINE__,TimerCounter);
+#endif
 				PROC_UART0_STATE_SWITCH(PROCESS_UART_STATE_READ);
 			}
 			else if (TimerCounter % 100 == 0)

+ 19 - 29
src/AppTaskUart1.c

@@ -51,7 +51,7 @@ void Uart_4G_Task(void *pvParameters)
 	(void)pvParameters;
 	uint32 SendTimerCounter = 0;
 	uint32 RecvTimerDelay = 0;
-	uint8 UartRecvPtr[200];
+	uint8 UartRecvPtr[256];
 	volatile uint16 tcpErrorCounter = 0;
 	uint16 pReadLen = 0;
 	// 4G开机
@@ -174,20 +174,13 @@ void Uart_4G_Task(void *pvParameters)
 		{
 			vTaskDelay(pdMS_TO_TICKS(1000));
 			tcpErrorCounter++;
-			if(tcpErrorCounter>60)//无法驻网或者联网,重置4G模组
+			if(tcpErrorCounter>60&&TcpSysReboot == 1)//无法驻网或者联网
 			{
-				Dio_WriteChannel(DioConf_DioChannel_PTD3_GPIO_OUT_MCU_4G_RESET, STD_ON);
+				Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
 				vTaskDelay(pdMS_TO_TICKS(2500));
-				Dio_WriteChannel(DioConf_DioChannel_PTD3_GPIO_OUT_MCU_4G_RESET, STD_OFF);
-				_4G_Status = 0;
-				tcpErrorCounter = 0;
-				while(_4G_Status!=1&&tcpErrorCounter<60)
-				{
-					tcpErrorCounter++;
-					vTaskDelay(pdMS_TO_TICKS(500));
-					_4G_Status = Dio_ReadChannel(DioConf_DioChannel_PTB1_GPIO_IN_MCU_4G_STATUS);
-				}
-				tcpErrorCounter = 0;
+				Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
+				vTaskDelay(pdMS_TO_TICKS(2500));
+				SystemSoftwareReset();
 			}
 			PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
 			break;
@@ -310,9 +303,10 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 //			memcpy(WebSiteIp ,ATCmdSend,strlen(ATCmdSend));
 //			WebSitePort = 14401;
 			/**/
-			sprintf(AtCmdSend, "%d,\"TCP\",%s,%d\r\n", *ConnectId, WebSiteIp, WebSitePort); //此处需要优化
+			sprintf(AtCmdSend, "AT+CIPOPEN=%d,\"TCP\",%s,%d\r\n", *ConnectId, WebSiteIp, WebSitePort); //此处需要优化
 			AtCmdSendTotalLen = mstrlen(AtCmdSend);
-			AtcmdTransmit(AT_CONNECT, (uint8 *)AtCmdSend, AtCmdSendTotalLen, &ATRet,10000);
+			UART_Send_Data(UART_LPUART1, AtCmdSend, AtCmdSendTotalLen, pdMS_TO_TICKS(100));
+			ATRet = AtcmdDelayRecvFunc(UART_LPUART1,(char *)("+CIPOPEN: 0,0"),20000);
 			if (ATRet == 0)
 			{
 				ConnectStep++;
@@ -450,7 +444,7 @@ void InitFunc(void)
 		{
 			ATCmdSend = (char *)("AT+SIMEI?\r\n");
 			ATCmdSendLen = mstrlen(ATCmdSend);
-			UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)ATCmdSend, ATCmdSendLen, UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
+			UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)ATCmdSend, ATCmdSendLen, UartRecvPtr, &ReadLen, pdMS_TO_TICKS(1000));
 			if (ReadLen > 0)
 			{
 				retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("+SIMEI"));
@@ -474,7 +468,7 @@ void InitFunc(void)
 		{
 			ATCmdSend = (char *)("AT+CTZU=1\r\n");
 			ATCmdSendLen = mstrlen(ATCmdSend);
-			UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)ATCmdSend, ATCmdSendLen, UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
+			UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)ATCmdSend, ATCmdSendLen, UartRecvPtr, &ReadLen, pdMS_TO_TICKS(1000));
 			if (ReadLen > 0)
 			{
 				retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("OK"));
@@ -531,20 +525,18 @@ void InitFunc(void)
 static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, sint8 *retFunc,uint16 timeout)
 {
 	uint16 ReadLen = 0;
-	uint8 *PtrATCmdSend = NULL;
+	uint8 PtrATCmdSend[64];
 	uint8 ATCmdFixedLen = 0;
 	uint16 ATCmdTotalLen = 0;
-	uint8 UartRecvPtr[100];
+	uint8 UartRecvPtr[256];
 	ATCmdFixedLen = mstrlen(Atcmdfunc[CmdIdx].str);
 	ATCmdTotalLen = ATCmdFixedLen + SetValueLen;
-	PtrATCmdSend = malloc(ATCmdTotalLen + 1);
 	memset(PtrATCmdSend, 0x00, ATCmdTotalLen + 1);
 	memcpy(PtrATCmdSend, Atcmdfunc[CmdIdx].str, ATCmdFixedLen);
 	if (SetValuePtr != NULL)
 	{
-		memcpy(PtrATCmdSend + ATCmdFixedLen, SetValuePtr, SetValueLen);
+		memcpy(&PtrATCmdSend[ATCmdFixedLen], SetValuePtr, SetValueLen);
 	}
-
 	UART_Query_Data(UART_LPUART1, UART_LPUART1, PtrATCmdSend, ATCmdTotalLen, UartRecvPtr, &ReadLen, timeout);
 	if(ReadLen>0)
 	{
@@ -554,11 +546,6 @@ static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen,
 	{
 		*retFunc = -1;
 	}
-	if (PtrATCmdSend != NULL)
-	{
-		free(PtrATCmdSend);
-	}
-	PtrATCmdSend = NULL;
 	return;
 }
 sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint16 pReadLen)
@@ -696,6 +683,7 @@ sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint16 pRead
 }
 void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 {
+	UTC8TimeType UTC8TimeTcp;
 	uint8 DataIdx = 0;
 	static uint32 TcpSendTimeCounter = 0;
 	TcpSendTimeCounter++;
@@ -730,7 +718,6 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		DataIdx = 0; //不发送,返回
 		return;
 	}
-	UTC8TimeType UTC8TimeTcp;
 	GetUtc8Time(&UTC8TimeTcp); //时间获取
 	uint8 *SendBuffer = NULL;
 	switch (DataIdx)
@@ -1101,7 +1088,7 @@ void GetUtc8Time(UTC8TimeType *UTC8TimeTcp)
 	uint8 AtCmdLen = mstrlen(AtCmdAsk);
 	uint8 ReadLen = 0;
 	uint8 *retptr = NULL;
-	uint8 UartRecvPtr[30];
+	uint8 UartRecvPtr[128];
 	UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)AtCmdAsk, AtCmdLen, UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
 	if (ReadLen > 0)
 	{
@@ -1370,6 +1357,9 @@ sint8 tcpipConnectionSend(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDat
 			outValue = -1;
 			sendErrConuter++;
 		}
+#if SEGGER_PRINTF==1
+			SEGGER_RTT_printf("[%d]outValue=%d,sendErrConuter=%d\r\n",__LINE__,outValue,sendErrConuter);
+#endif
 	}
 	return outValue;
 }

+ 16 - 7
src/hal_adapter.c

@@ -135,7 +135,7 @@ uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
 
 Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txBuffer, uint16 sendLength, uint8 *rxBuffer, uint8 *rxlen, uint32 T_timeout)
 {
-	uint32 queueRecvSize = 0;
+	uint16 queueRecvSize = 0;
 	UartMsg_t UartSendMsg;
 	BaseType_t Sendret = pdFALSE;
 	BaseType_t Recvret = pdFALSE;
@@ -166,7 +166,7 @@ Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txB
 }
 Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint8 *rxlen, uint32 T_timeout)
 {
-	uint32 queueRecvSize = 0;
+	uint16 queueRecvSize = 0;
 	BaseType_t ret = pdFALSE;
 	uint32 retVal = E_NOT_OK;
 	*rxlen = 0;
@@ -198,9 +198,9 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
 	 create_ringBuffer(&uartRingBuffer[0],ringBufferforUart[0],sizeof(ringBufferforUart[0]));
 	 create_ringBuffer(&uartRingBuffer[1],ringBufferforUart[1],sizeof(ringBufferforUart[1]));
 	 create_ringBuffer(&uartRingBuffer[2],ringBufferforUart[2],sizeof(ringBufferforUart[2]));
-	 UartRecvQueue[0] = xQueueCreate(6, sizeof(uint32));
-	 UartRecvQueue[1] = xQueueCreate(6, sizeof(uint32));
-	 UartRecvQueue[2] = xQueueCreate(6, sizeof(uint32));
+	 UartRecvQueue[0] = xQueueCreate(6, sizeof(uint16));
+	 UartRecvQueue[1] = xQueueCreate(6, sizeof(uint16));
+	 UartRecvQueue[2] = xQueueCreate(6, sizeof(uint16));
 	 UartSendQueue[0] = xQueueCreate(3, sizeof(UartMsg_t));
 	 UartSendQueue[1] = xQueueCreate(1, sizeof(UartMsg_t));
 	 UartSendQueue[2] = xQueueCreate(1, sizeof(UartMsg_t));
@@ -280,10 +280,13 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
 					if(UartHalMsgRecv.value>0)
 					{
 						recvSize = write_ringBuffer(RX_Buffer[UartHalMsgRecv.Channel],UartHalMsgRecv.value,&uartRingBuffer[UartHalMsgRecv.Channel]);
-						ret_send = xQueueSend(UartRecvQueue[UartHalMsgRecv.Channel],recvSize,10);
+						ret_send = xQueueSend(UartRecvQueue[UartHalMsgRecv.Channel],&recvSize,10);
 					}
 #if SEGGER_PRINTF==1
-	SEGGER_RTT_printf("[%d]ret_send=%d,ch=%d-%d\r\n",__LINE__,ret_send,UartHalMsgRecv.Channel,recvSize);
+					if(UartHalMsgRecv.Channel==1)
+					{
+						SEGGER_RTT_printf("[%d]uart1_r=%s\r\n",__LINE__,RX_Buffer[UartHalMsgRecv.Channel]);
+					}
 #endif
 					T_timeout[UartHalMsgRecv.Channel] = 0;
 					UartState[UartHalMsgRecv.Channel] = UartRecvComplete;
@@ -309,6 +312,12 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
 			 {
 				 Dio_WriteChannel(DioConf_DioChannel_PTB4_GPIO_OUT_MCU_RS485_EN, STD_ON);
 			 }
+#if SEGGER_PRINTF==1
+					if(UartIdx==1)
+					{
+						SEGGER_RTT_printf("[%d]uart1_s=%s\r\n",__LINE__,UartSendMsg.dataPrt);
+					}
+#endif
 			 T_Uart_Status[UartIdx] = Uart_AsyncSend(UartIdx, UartSendMsg.dataPrt, UartSendMsg.DataLen);
 		     if (E_OK != T_Uart_Status[UartIdx])
 		     {

+ 2 - 1
src/main.c

@@ -171,12 +171,13 @@ int main(void)
 	SEGGER_RTT_Init();
 	SEGGER_RTT_printf("[%d] boot\r\n",__LINE__);
 #endif
+//	vTaskDelay(pdMS_TO_TICKS(100));
 	UartInit();
 	xTaskCreate(MainTask, (const char *const)"MainTask", 512, (void *)0, main_TASK_PRIORITY + 3, NULL);
 	xTaskCreate(Uart0Task, (const char *const)"Uart0_Bms_Task", 2048, (void *)0, main_TASK_PRIORITY + 2, NULL);
 //	xTaskCreate(CanTask, (const char *const)"CanTask", 512, (void *)0, main_TASK_PRIORITY + 2, NULL);
 	xTaskCreate(GpsTask, (const char *const)"GpsTask", 512, (void *)0, main_TASK_PRIORITY + 1, NULL);
-//	xTaskCreate(Uart_4G_Task, (const char *const)"Uart_4G_Task", 2048+1024, (void *)0, main_TASK_PRIORITY + 0, NULL);
+	xTaskCreate(Uart_4G_Task, (const char *const)"Uart_4G_Task", 2048, (void *)0, main_TASK_PRIORITY + 0, NULL);
 	vTaskStartScheduler();
 	for (;;)
 	{