ソースを参照

OTA测试-更改串口函数

LAPTOP-KB7QFH2U\ChenJie-PC 2 年 前
コミット
6e96b0e993

+ 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="322312694927359922" 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="317783601230043299" 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="322312694927359922" 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="317783601230043299" 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="322312694927359922" 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="317783601230043299" 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="322312694927359922" 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="317783601230043299" 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>

+ 1 - 1
Project_Settings/Debugger/S32K146_4G_Debug_FLASH_PNE.launch

@@ -216,5 +216,5 @@
 </listAttribute>
 <stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;&gt;&#13;&#10;&lt;gdbmemoryBlockExpression address=&quot;536806032&quot; label=&quot;RX_Buffer[UART_LPUART2]&quot;/&gt;&#13;&#10;&lt;gdbmemoryBlockExpression address=&quot;536823956&quot; label=&quot;GpsBufferGet&quot;/&gt;&#13;&#10;&lt;gdbmemoryBlockExpression address=&quot;255&quot; label=&quot;SocketId&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
 <stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
-<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x1fff4b48,0x1fff4b50,0x1fff0103,1fff3798,0x1fff3798,0x1fffab2c,0x1fffa82c,0x1fff01f3,0x1fff050e,0,0x14200,0x14000,0x0,0x1fff051d,0x1fff04e8"/>
+<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x1fff4b50,0x1fff0103,1fff3798,0x1fff3798,0x1fffab2c,0x1fffa82c,0x1fff01f3,0x1fff050e,0,0x14200,0x14000,0x0,0x1fff051d,0x1fff04e8,0x1fff04fc"/>
 </launchConfiguration>

+ 11 - 18
Project_Settings/Linker_Files/linker_flash_s32k146.ld

@@ -31,19 +31,13 @@
 
 MEMORY
 {         
-    int_flash_interrupts    : ORIGIN = 0x00014200, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
-   /* int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
-     int_flash               : ORIGIN = 0x00014600, LENGTH = 0x000EBA00    /* ~1.0MB */ 
-/*	int_flash_interrupts    : ORIGIN = 0x00080200, LENGTH = 0x00000400	/**/
-/*	int_flash               : ORIGIN = 0x00080600, LENGTH = 0x0007FA00	/**/
-	
-	m_flexram				: ORIGIN = 0x14000000, LENGTH = 0x00001000	
-	
+    int_flash_interrupts    : ORIGIN = 0x00000000, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
+    int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
+    int_flash               : ORIGIN = 0x00000410, LENGTH = 0x000FFBF0    /* ~1.0MB */ 
     int_sram_results        : ORIGIN = 0x1FFF0000, LENGTH = 0x00000100    /* 256bytes */
     int_sram                : ORIGIN = 0x1FFF0100, LENGTH = 0x0001DF00    /* ~120K */
-    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000 - 0x10    /* 4K  */
-    ram_rsvd2               : ORIGIN = 0x2000EFF0, LENGTH = 0             /* End of SRAM */
-    ExchangeInfo            : ORIGIN = 0x2000EFF0, LENGTH = 0x10          
+    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000    /* 4K  */
+    ram_rsvd2               : ORIGIN = 0x2000F000, LENGTH = 0             /* End of SRAM */
 }
 
 
@@ -60,17 +54,17 @@ SECTIONS
     
 	.flash_interrupts :
 	{
-		. = ALIGN(512);
+		. = ALIGN(4096);
         __interrupts_rom_start = .;
         KEEP(*(.intc_vector))    
-        . = ALIGN(512);
+        . = ALIGN(4);
         __interrupts_rom_end = .;
 	} > int_flash_interrupts
 	
-/*	.flash_config :				*/
-/*	{							*/
-/*		KEEP(*(.flash_config))	*/
-/*	} > int_flash_config		*/
+	.flash_config :
+	{
+		KEEP(*(.flash_config))
+	} > int_flash_config
 	
 	.flash :
 	{
@@ -117,7 +111,6 @@ SECTIONS
 		__DATA_ROM = .;
 	} > int_flash
     
-    
     . = ALIGN(4);
     PROVIDE(__exidx_start = .);
     .ARM.exidx :

+ 18 - 11
Project_Settings/Linker_Files/linker_flash_s32k146.ldfls → Project_Settings/Linker_Files/linker_flash_s32k146.ldota

@@ -31,13 +31,19 @@
 
 MEMORY
 {         
-    int_flash_interrupts    : ORIGIN = 0x00000000, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
-    int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
-    int_flash               : ORIGIN = 0x00000410, LENGTH = 0x000FFBF0    /* ~1.0MB */ 
+    int_flash_interrupts    : ORIGIN = 0x00014200, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
+   /* int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
+     int_flash               : ORIGIN = 0x00014600, LENGTH = 0x000EBA00    /* ~1.0MB */ 
+/*	int_flash_interrupts    : ORIGIN = 0x00080200, LENGTH = 0x00000400	/**/
+/*	int_flash               : ORIGIN = 0x00080600, LENGTH = 0x0007FA00	/**/
+	
+	m_flexram				: ORIGIN = 0x14000000, LENGTH = 0x00001000	
+	
     int_sram_results        : ORIGIN = 0x1FFF0000, LENGTH = 0x00000100    /* 256bytes */
     int_sram                : ORIGIN = 0x1FFF0100, LENGTH = 0x0001DF00    /* ~120K */
-    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000    /* 4K  */
-    ram_rsvd2               : ORIGIN = 0x2000F000, LENGTH = 0             /* End of SRAM */
+    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000 - 0x10    /* 4K  */
+    ram_rsvd2               : ORIGIN = 0x2000EFF0, LENGTH = 0             /* End of SRAM */
+    ExchangeInfo            : ORIGIN = 0x2000EFF0, LENGTH = 0x10          
 }
 
 
@@ -54,17 +60,17 @@ SECTIONS
     
 	.flash_interrupts :
 	{
-		. = ALIGN(4096);
+		. = ALIGN(512);
         __interrupts_rom_start = .;
         KEEP(*(.intc_vector))    
-        . = ALIGN(4);
+        . = ALIGN(512);
         __interrupts_rom_end = .;
 	} > int_flash_interrupts
 	
-	.flash_config :
-	{
-		KEEP(*(.flash_config))
-	} > int_flash_config
+/*	.flash_config :				*/
+/*	{							*/
+/*		KEEP(*(.flash_config))	*/
+/*	} > int_flash_config		*/
 	
 	.flash :
 	{
@@ -111,6 +117,7 @@ SECTIONS
 		__DATA_ROM = .;
 	} > int_flash
     
+    
     . = ALIGN(4);
     PROVIDE(__exidx_start = .);
     .ARM.exidx :

+ 5 - 5
RTD/src/Lpuart_Uart_Ip.c

@@ -1134,8 +1134,8 @@ static void Lpuart_Uart_Ip_RxIdleIrqHandler(uint32 Instance)
     UartState = (Lpuart_Uart_Ip_StateStructureType *)Lpuart_Uart_Ip_apStateStructuresArray[Instance];
     UartUserCfg = (Lpuart_Uart_Ip_UserConfigType*) Lpuart_Uart_Ip_apUserConfig[Instance];
 
-    /* Disable receive idle interrupt. */
-    Lpuart_Uart_Ip_SetIntMode(Base, (uint32)LPUART_CTRL_ILIE_SHIFT, FALSE);
+//    /* Disable receive idle interrupt. */
+//    Lpuart_Uart_Ip_SetIntMode(Base, (uint32)LPUART_CTRL_ILIE_SHIFT, FALSE);
     /* Clear idle flag*/
     Base->STAT |= LPUART_STAT_IDLE(0);
 
@@ -1878,7 +1878,7 @@ static void Lpuart_Uart_Ip_CompleteReceiveDataUsingInt(const uint8 Instance)
     /* In Abort case, the transmission need to stop instantly */
     if (UartState->ReceiveStatus == LPUART_UART_IP_STATUS_ABORTED)
     {
-        Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US, LPUART_UART_IP_TIMEOUT_TYPE);
+        Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US/10, LPUART_UART_IP_TIMEOUT_TYPE);
         /* Wait until the data is completely received */
         while (!Lpuart_Uart_Ip_GetStatusFlag(Base, LPUART_UART_IP_DATA_REG_FULL) && \
                !Lpuart_Uart_Ip_CheckTimeout(&StartTime, &ElapsedTicks, TimeoutTicks, LPUART_UART_IP_TIMEOUT_TYPE))
@@ -1990,7 +1990,7 @@ void Lpuart_Uart_Ip_CompleteReceiveUsingDma(uint8 Instance)
         if (UartState->ReceiveStatus == LPUART_UART_IP_STATUS_ABORTED)
         {
             /* Wait until the last transmission complete */
-            Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US, LPUART_UART_IP_TIMEOUT_TYPE);
+            Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US/10, LPUART_UART_IP_TIMEOUT_TYPE);
             while (!Lpuart_Uart_Ip_GetStatusFlag(Base, LPUART_UART_IP_DATA_REG_FULL) && \
                !Lpuart_Uart_Ip_CheckTimeout(&StartTime, &ElapsedTicks, TimeoutTicks, LPUART_UART_IP_TIMEOUT_TYPE))
             {}
@@ -2038,7 +2038,7 @@ static void Lpuart_Uart_Ip_SetupIntDmaMode(const uint8 Instance, boolean Enable)
       Base = Lpuart_Uart_Ip_apBases[Instance];
 
       /* Setup error interrupts */
-      Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_RX_OVERRUN, Enable);
+      Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_RX_OVERRUN, 0);
       Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_PARITY_ERR_FLAG, Enable);
       Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_NOISE_ERR_FLAG, Enable);
       Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_FRAME_ERR_FLAG, Enable);

+ 44 - 2
generate/src/Lpuart_Uart_Ip_VS_0_PBcfg.c

@@ -215,13 +215,34 @@ const Lpuart_Uart_Ip_UserConfigType Lpuart_Uart_Ip_xHwConfigPB_0_VS_0 =
 */
 const Lpuart_Uart_Ip_UserConfigType Lpuart_Uart_Ip_xHwConfigPB_1_VS_0 =
 {
-
+#if (defined UART1_BAUDRATE)
+#if (UART1_BAUDRATE == UART_BAUDRATE_9600)
     /*!< Baud rate in hertz */
+    9615U,
+    /* Baud clock divisor*/
+    8U,
+    /* Over sampling ratio*/
+    26U,
+#elif (UART1_BAUDRATE == UART_BAUDRATE_19200)
+	/*!< Baud rate in hertz */
+    19230U,
+    /* Baud clock divisor*/
+    4U,
+    /* Over sampling ratio*/
+    26U,
+#elif (UART1_BAUDRATE == UART_BAUDRATE_115200)
+	/*!< Baud rate in hertz */
     117647U,
     /* Baud clock divisor*/
     1U,
     /* Over sampling ratio*/
     17U,
+#else
+#error "please select the right uart baudrate of uart0
+#endif
+#else
+#error "please define the UART0_BAUDRATE"
+#endif
     /* Parity type */
     LPUART_UART_IP_PARITY_DISABLED,
     /* Number of stop bits, 1 stop bit (default) or 2 stop bits */
@@ -252,13 +273,34 @@ const Lpuart_Uart_Ip_UserConfigType Lpuart_Uart_Ip_xHwConfigPB_1_VS_0 =
 */
 const Lpuart_Uart_Ip_UserConfigType Lpuart_Uart_Ip_xHwConfigPB_2_VS_0 =
 {
-
+#if (defined UART2_BAUDRATE)
+#if (UART2_BAUDRATE == UART_BAUDRATE_9600)
     /*!< Baud rate in hertz */
     9615U,
     /* Baud clock divisor*/
     8U,
     /* Over sampling ratio*/
     26U,
+#elif (UART2_BAUDRATE == UART_BAUDRATE_19200)
+	/*!< Baud rate in hertz */
+    19230U,
+    /* Baud clock divisor*/
+    4U,
+    /* Over sampling ratio*/
+    26U,
+#elif (UART2_BAUDRATE == UART_BAUDRATE_115200)
+	/*!< Baud rate in hertz */
+    117647U,
+    /* Baud clock divisor*/
+    1U,
+    /* Over sampling ratio*/
+    17U,
+#else
+#error "please select the right uart baudrate of uart0
+#endif
+#else
+#error "please define the UART0_BAUDRATE"
+#endif
     /* Parity type */
     LPUART_UART_IP_PARITY_DISABLED,
     /* Number of stop bits, 1 stop bit (default) or 2 stop bits */

+ 1 - 1
src/AppTaskCan.c

@@ -25,7 +25,7 @@ void CanTask(void *pvParameters)
 	(void)pvParameters;
 	CanIf_bRxFlag = false;
 	Can_Msg_Type_Data CanRxMsg;
-	CanRecvQueueHandle = xQueueCreate(100, sizeof(Can_Msg_Type_Data));
+	CanRecvQueueHandle = xQueueCreate(50, sizeof(Can_Msg_Type_Data));
 	TimerHandle_t monitorTimer1ms;
 	monitorTimer1ms = xTimerCreate("monitor1ms", 1, pdTRUE, (void *)0, vCanRxCallback);
 	xTimerStart(monitorTimer1ms, 0);

+ 8 - 3
src/AppTaskGps.c

@@ -14,14 +14,19 @@ 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;
 	while(1)
 	{
 		vTaskDelay(pdMS_TO_TICKS(10));
-		memset(RX_Buffer[UART_LPUART2],0x00,sizeof(RX_Buffer[UART_LPUART2]));
-		UART_Receive_Data(UART_LPUART2,RX_Buffer[UART_LPUART2],&pReadLen,1000);
+		UART_Receive_Data(UART_LPUART2,&UartRecvPtr,&pReadLen,1000);
 		if(pReadLen>0)
 		{
-			GpsDataDecode(RX_Buffer[UART_LPUART2]);
+			GpsDataDecode(UartRecvPtr);
+			if(UartRecvPtr != NULL)
+			{
+				free(UartRecvPtr);
+			}
+			UartRecvPtr = NULL;
 		}
 	}
 }

+ 100 - 50
src/AppTaskUart1.c

@@ -16,6 +16,7 @@
 #include "AppTaskUart1.h"
 const ATCmdFunc Atcmdfunc[] = {
 	{AT_CMD_TEST, "AT\r\n", at_callbackFunc},
+	{AT_ATE0, "ATE0\r\n", at_callbackFunc},
 	{AT_SIMREADY, "AT+CPIN?\r\n", at_callbackFunc},
 	{AT_GETICCID, "AT+CICCID\r\n", at_callbackFunc},
 	{AT_CGREG, "AT+CGREG?\r\n", at_callbackFunc},
@@ -50,19 +51,19 @@ void Uart_4G_Task(void *pvParameters)
 	_4G_Status = Dio_ReadChannel(DioConf_DioChannel_PTB1_GPIO_IN_MCU_4G_STATUS);
 	// LED测试
 	Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-	vTaskDelay(pdMS_TO_TICKS(5000));
-	uint8 pReadLen = 0;
+	vTaskDelay(pdMS_TO_TICKS(1000));
+	uint16 pReadLen = 0;
 	InitFunc(); // 4G模块初始化,注:AT同步不通过,没有进行次数判定及跳转
 	uint32 SendTimerCounter = 0;
 	uint32 RecvTimerDelay = 0;
+	uint8 *UartRecvPtr=NULL;
 	for (;;)
 	{
 		switch (gProcess_Tcp_Task)
 		{
 		case PROCESS_TCP_IDLE: //空闲状态
 		{
-			memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-			UART_Receive_Data(UART_LPUART1, RX_Buffer[UART_LPUART1], &pReadLen, 50);//10ms检测
+			UART_Receive_Data(UART_LPUART1, &UartRecvPtr, &pReadLen, 10);//100ms检测
 			if (SocketId < 0)
 			{
 				PROC_TCP_STATE_SWITCH(PROCESS_TCP_REGCHK);
@@ -146,9 +147,16 @@ void Uart_4G_Task(void *pvParameters)
 		case PROCESS_TCP_RECV: //网络数据接收,100ms空闲状态下即可接收
 		{
 			Dio_FlipChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1);
+
 			if (pReadLen > 0 && SocketId >= 0)
 			{
-				TcpDataInfoRecvHandle(RX_Buffer[UART_LPUART1], pReadLen);
+				TcpDataInfoRecvHandle(UartRecvPtr, pReadLen);
+
+				if(UartRecvPtr != NULL)
+				{
+					free(UartRecvPtr);
+				}
+				UartRecvPtr = NULL;
 			}
 			PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
 			break;
@@ -205,12 +213,19 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 			char *ATCmdSend = (char *)("ATE0\r\n");
 			uint8 ATCmdSendLen = mstrlen(ATCmdSend);
 			uint8 ReadLen = 0;
-			memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
+			uint8 *UartRecvPtr = NULL;
+			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen,&UartRecvPtr, &ReadLen, pdMS_TO_TICKS(1000));
 			uint8 *retptr = NULL;
 			if (ReadLen > 0)
 			{
-				retptr = (uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("OK"));
+				retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("OK"));
+
+				if(UartRecvPtr != NULL)
+				{
+					free(UartRecvPtr);
+				}
+				UartRecvPtr = NULL;
+
 				if (retptr)
 				{
 					ConnectStep++;
@@ -368,6 +383,7 @@ void InitFunc(void)
 	uint8 ReadLen = 0;
 	char *ATCmdSend = NULL;
 	uint8 ATCmdSendLen = 0;
+	uint8 *UartRecvPtr = NULL;
 	while (1)
 	{
 		switch (_4G_InitStep)
@@ -379,86 +395,93 @@ void InitFunc(void)
 			{
 				_4G_InitStep++;
 			}
-			else
-			{
-				_4G_InitStep = 0;
-			}
 			break;
 		}
 		case 1: //关闭回显
 		{
 			ATCmdSend = (char *)("ATE0\r\n");
 			ATCmdSendLen = mstrlen(ATCmdSend);
-			memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
+			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(1000));
 			uint8 *retptr = NULL;
 			if (ReadLen > 0)
 			{
-				retptr = (uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("OK"));
+				retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("OK"));
+
+
+
 				if (retptr)
 				{
 					_4G_InitStep++;
 				}
 				else
 				{
-					_4G_InitStep = 0;
+					_4G_InitStep++;
 				}
 			}
 			else
 			{
-				_4G_InitStep = 0;
+				_4G_InitStep++;
 			}
+
+			if(UartRecvPtr != NULL)
+			{
+				free(UartRecvPtr);
+			}
+			UartRecvPtr = NULL;
+
 			break;
 		}
 		case 2: // IMEI获取
 		{
 			ATCmdSend = (char *)("AT+SIMEI?\r\n");
 			ATCmdSendLen = mstrlen(ATCmdSend);
-			memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
+			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
+
 			uint8 *retptr = NULL;
 			if (ReadLen > 0)
 			{
-				retptr = (uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("+SIMEI"));
+				retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("+SIMEI"));
 				if (retptr)
 				{
 					memcpy(ImeiNum, retptr + 8, 15);
 					_4G_InitStep++;
 				}
-				else
-				{
-					_4G_InitStep = 0;
-				}
 			}
 			else
 			{
 				_4G_InitStep = 0;
 			}
+
+			if(UartRecvPtr != NULL)
+			{
+				free(UartRecvPtr);
+			}
+			UartRecvPtr = NULL;
 			break;
 		}
 		case 3: // 打开时间自动更新
 		{
 			ATCmdSend = (char *)("AT+CTZU=1\r\n");
 			ATCmdSendLen = mstrlen(ATCmdSend);
-			memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
+			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATCmdSend, ATCmdSendLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
 			uint8 *retptr = NULL;
 			if (ReadLen > 0)
 			{
-				retptr = (uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("OK"));
+				retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("OK"));
 				if (retptr)
 				{
 					_4G_InitStep++;
 				}
-				else
-				{
-					_4G_InitStep = 0;
-				}
 			}
 			else
 			{
 				_4G_InitStep = 0;
 			}
+			if(UartRecvPtr != NULL)
+			{
+				free(UartRecvPtr);
+			}
+			UartRecvPtr = NULL;
 			break;
 		}
 		case 4: // ICCID获取
@@ -468,10 +491,6 @@ void InitFunc(void)
 			{
 				_4G_InitStep++;
 			}
-			else
-			{
-				_4G_InitStep = 0;
-			}
 			break;
 		}
 		default:
@@ -488,6 +507,7 @@ static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen,
 	uint8 *PtrATCmdSend = NULL;
 	uint8 ATCmdFixedLen = 0;
 	uint16 ATCmdTotalLen = 0;
+	uint8 *UartRecvPtr=NULL;
 	ATCmdFixedLen = mstrlen(Atcmdfunc[CmdIdx].str);
 	ATCmdTotalLen = ATCmdFixedLen + SetValueLen;
 	PtrATCmdSend = malloc(ATCmdTotalLen + 1);
@@ -497,17 +517,29 @@ static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen,
 	{
 		memcpy(PtrATCmdSend + ATCmdFixedLen, SetValuePtr, SetValueLen);
 	}
-	memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
 
-	UART_Query_Data(UART_LPUART1, UART_LPUART1, PtrATCmdSend, ATCmdTotalLen, RX_Buffer[UART_LPUART1], &ReadLen, 1000);
-
-	*retFunc = Atcmdfunc[CmdIdx].cb(PtrATCmdSend, RX_Buffer[UART_LPUART1], CmdIdx, ReadLen);
+	UART_Query_Data(UART_LPUART1, UART_LPUART1, PtrATCmdSend, ATCmdTotalLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(1000));
+	if(ReadLen>0)
+	{
+		*retFunc = Atcmdfunc[CmdIdx].cb(PtrATCmdSend, UartRecvPtr, CmdIdx, ReadLen);
+	}
+	else
+	{
+		*retFunc = -1;
+	}
 	if (PtrATCmdSend != NULL)
 	{
 		memset(PtrATCmdSend, 0x00, ATCmdTotalLen + 1);
 		free(PtrATCmdSend);
 	}
 	PtrATCmdSend = NULL;
+
+	if(UartRecvPtr != NULL)
+	{
+		free(UartRecvPtr);
+	}
+	UartRecvPtr = NULL;
+
 	return;
 }
 sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint16 pReadLen)
@@ -1018,13 +1050,13 @@ void GetUtc8Time(UTC8TimeType *UTC8TimeTcp)
 	uint8 AtCmdLen = mstrlen(AtCmdAsk);
 	uint8 ReadLen = 0;
 	uint8 *retptr = NULL;
-	memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-	UART_Query_Data(UART_LPUART1, UART_LPUART1, AtCmdAsk, AtCmdLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
+	uint8 *UartRecvPtr=NULL;
+	UART_Query_Data(UART_LPUART1, UART_LPUART1, AtCmdAsk, AtCmdLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
 	if (ReadLen > 0)
 	{
-		if ((uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("OK")))
+		if ((uint8 *)strstr((char *)UartRecvPtr, (char *)("OK")))
 		{
-			retptr = (uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("+CCLK:"));
+			retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("+CCLK:"));
 			UTC8TimeTcp->year = CharToHex(*(retptr + 8)) * 10 + CharToHex(*(retptr + 9));
 			UTC8TimeTcp->month = CharToHex(*(retptr + 11)) * 10 + CharToHex(*(retptr + 12));
 			UTC8TimeTcp->day = CharToHex(*(retptr + 14)) * 10 + CharToHex(*(retptr + 15));
@@ -1032,6 +1064,12 @@ void GetUtc8Time(UTC8TimeType *UTC8TimeTcp)
 			UTC8TimeTcp->minute = CharToHex(*(retptr + 20)) * 10 + CharToHex(*(retptr + 21));
 			UTC8TimeTcp->second = CharToHex(*(retptr + 23)) * 10 + CharToHex(*(retptr + 24));
 		}
+
+		if(UartRecvPtr != NULL)
+		{
+			free(UartRecvPtr);
+		}
+		UartRecvPtr = NULL;
 	}
 }
 static void GetCSQValue(uint8 *out)
@@ -1040,15 +1078,15 @@ static void GetCSQValue(uint8 *out)
 	uint8 AtCmdLen = mstrlen(AtCmdAsk);
 	uint8 ReadLen = 0;
 	uint8 *retptr = NULL;
-	memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-	UART_Query_Data(UART_LPUART1, UART_LPUART1, AtCmdAsk, AtCmdLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
+	uint8 *UartRecvPtr=NULL;
+	UART_Query_Data(UART_LPUART1, UART_LPUART1, AtCmdAsk, AtCmdLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
 	*out = 99;
 	if (ReadLen > 0)
 	{
-		if ((uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("OK")))
+		if ((uint8 *)strstr((char *)UartRecvPtr, (char *)("OK")))
 		{
 			*out = 0;
-			retptr = (uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("+CSQ:"));
+			retptr = (uint8 *)strstr((char *)UartRecvPtr, (char *)("+CSQ:"));
 			char CsqStr[5];
 			for (uint8 i = 0; i < 5; i++)
 			{
@@ -1060,6 +1098,12 @@ static void GetCSQValue(uint8 *out)
 			}
 			*out = atoi(CsqStr);
 		}
+
+		if(UartRecvPtr != NULL)
+		{
+			free(UartRecvPtr);
+		}
+		UartRecvPtr = NULL;
 	}
 	return;
 }
@@ -1137,14 +1181,20 @@ sint8 tcpipConnectionSend(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDat
 	sprintf(AtCmdSend, "%d,%d\r\n", TcpConnectId, SendDataLen);
 	AtCmdSendTotalLen = mstrlen(AtCmdSend);
 	AtcmdTransmit(AT_SEND, AtCmdSend, AtCmdSendTotalLen, &ATRet);
+	uint8 *UartRecvPtr =NULL;
 	if (ATRet == 0)
 	{
-		memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-		UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)SendDataPtr, SendDataLen, RX_Buffer[UART_LPUART1], &ReadLen, 100);
-		if ((uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("OK")))
+		UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)SendDataPtr, SendDataLen, &UartRecvPtr, &ReadLen, pdMS_TO_TICKS(100));
+		if (ReadLen>0&&(uint8 *)strstr((char *)UartRecvPtr, (char *)("OK")))
 		{
 			outValue = 0;
 		}
+
+		if(UartRecvPtr != NULL)
+		{
+			free(UartRecvPtr);
+		}
+		UartRecvPtr = NULL;
 	}
 	return outValue;
 }

+ 2 - 0
src/AppTaskUart1.h

@@ -21,6 +21,7 @@
 #include "AppGlobalVar.h"
 #include "AppTaskGps.h"
 #define CRLF "\r\n"
+#define BATT_SN_LEN 17
 #define TCP_START_SYM1 0x23
 #define TCP_START_SYM2 0x23
 #define TCP_CMD_SYM 0x02   //ʵʱÐÅÏ¢Éϱ¨ÊÇ0x02
@@ -121,6 +122,7 @@ typedef struct UTC8Time_Type
 typedef enum
 {
 	AT_CMD_TEST = 0,
+	AT_ATE0,
 	AT_SIMREADY,
 	AT_GETICCID,
 	AT_CGREG,

+ 2 - 2
src/USER_CONFIG.h

@@ -37,7 +37,7 @@
 #define UART_BAUDRATE_115200 	(2)
 
 #define UART0_BAUDRATE UART_BAUDRATE_9600
-
-
+#define UART1_BAUDRATE UART_BAUDRATE_115200
+#define UART2_BAUDRATE UART_BAUDRATE_115200
 
 

+ 389 - 173
src/hal_adapter.c

@@ -12,186 +12,400 @@ volatile uint32 VarNotification_0 = 0;
 volatile uint32 VarNotification_1 = 0;
 TP_Value_Type ConvertedBuffer[NUM_RESULTS];
 Adc_ValueGroupType ResultBuffer[NUM_RESULTS];
+ volatile Uart_StatusType Uart_TransmitStatus[3] = {UART_STATUS_TIMEOUT,UART_STATUS_TIMEOUT,UART_STATUS_TIMEOUT};
+ QueueHandle_t UartRecvQueue[3];
+ QueueHandle_t UartSendQueue[3];
+ QueueHandle_t UartHalQueueHandle;
+ void Uart_Hal_RecvTask(void *pvParameters);
+ void Uart_Hal_SendTask(void *pvParameters);
+ Std_ReturnType UartStartRecvFunc(uint8 channel);
 Std_ReturnType ADC_Converter(Adc_ValueGroupType *Buffer, TP_Value_Type *ConvertedValueR);
-Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 *rxBuffer, uint16 *rxlen, uint32 T_timeout)
+Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 **rxBuffer, uint16 *rxlen, uint32 T_timeout)
 {
-    volatile Std_ReturnType R_Uart_Status;
-    volatile Std_ReturnType T_Uart_Status;
-    volatile Uart_StatusType Uart_ReceiveStatus = UART_STATUS_TIMEOUT;
-    volatile Uart_StatusType Uart_TransmitStatus = UART_STATUS_TIMEOUT;
-    uint32 T_bytesRemaining;
-    uint32 R_bytesRemaining;
-    uint32 timeout = T_timeout;
-    uint32 retVal = E_NOT_OK;
-    bufferIdx[recvChannel] = 0;
-    switch (recvChannel)
-    {
-    case 0:
-        IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
-        break;
-    case 1:
-        IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
-        break;
-    case 2:
-        IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
-        break;
-    default:
-        break;
-    }
-    if (txBuffer == NULL || rxBuffer == NULL)
-    {
-        return retVal;
-    }
-
-    /* Uart_AsyncSend transmit data */
-    Uart_SetBuffer(transChannel, txBuffer, sendLength, UART_SEND);
-    T_Uart_Status = Uart_AsyncSend(transChannel, txBuffer, sendLength);
-    if (E_OK != T_Uart_Status)
-    {
-        Uart_Abort(transChannel, UART_SEND);
-        return E_NOT_OK;
-    }
-    Uart_SetBuffer(recvChannel, &RX_Buffer[recvChannel][0], DMA_SIZE, UART_RECEIVE);
-    R_Uart_Status = Uart_AsyncReceive(recvChannel, rxBuffer, DMA_SIZE);
-    if (E_OK != R_Uart_Status)
-    {
-        Uart_Abort(recvChannel, UART_RECEIVE);
-        return E_NOT_OK;
-    }
-    /* Check for no on-going transmission */
-    do
-    {
-        if (Uart_TransmitStatus != UART_STATUS_NO_ERROR)
-        {
-            Uart_TransmitStatus = Uart_GetStatus(transChannel, &T_bytesRemaining, UART_SEND);
-        }
-        if (Uart_ReceiveStatus != UART_STATUS_NO_ERROR)
-        {
-            Uart_ReceiveStatus = Uart_GetStatus(recvChannel, &R_bytesRemaining, UART_RECEIVE);
-        }
-        vTaskDelay(pdMS_TO_TICKS(1));
-    } while (((UART_STATUS_NO_ERROR != Uart_TransmitStatus || UART_STATUS_NO_ERROR != Uart_ReceiveStatus) && 0 < --timeout));
-    if ((UART_STATUS_NO_ERROR != Uart_TransmitStatus))
-    {
-        Uart_Abort(transChannel, UART_SEND);
-        retVal = E_NOT_OK;
-    }
-    else
-    {
-        retVal = E_OK;
-    }
-    if ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus))
-    {
-        Uart_Abort(recvChannel, UART_RECEIVE);
-        *rxlen = bufferIdx[recvChannel];
-        retVal = E_NOT_OK;
-    }
-    else
-    {
-        *rxlen = bufferIdx[recvChannel];
-        retVal = E_OK;
-    }
-    return retVal;
+	UartMsg_t UartRecvMsg;
+	UartMsg_t UartSendMsg;
+	BaseType_t Sendret = pdFALSE;
+	BaseType_t Recvret = pdFALSE;
+	uint32 retVal = E_NOT_OK;
+	UartSendMsg.DataLen = sendLength;
+	UartSendMsg.dataPrt = txBuffer;
+	*rxlen = 0;
+	Sendret = xQueueSend(UartSendQueue[transChannel],&UartSendMsg,10);
+
+	memset(&UartRecvMsg,0,sizeof(UartMsg_t));
+
+	if(Sendret == pdTRUE)
+	{
+		Recvret = xQueueReceive(UartRecvQueue[recvChannel],&UartRecvMsg,T_timeout);
+		if(Recvret == pdTRUE)
+		{
+			*rxlen = UartRecvMsg.DataLen;
+			*rxBuffer = UartRecvMsg.dataPrt;
+			retVal = E_OK;
+		}
+	}
+	return retVal;
 }
-
-Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout)
+Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 **rxBuffer, uint16 *rxlen, sint32 T_timeout)
 {
-
-    volatile Std_ReturnType T_Uart_Status;
-    volatile Uart_StatusType Uart_TransmitStatus = UART_STATUS_TIMEOUT;
-    uint32 T_bytesRemaining;
-    uint32 timeout = T_timeout;
-    uint32 retVal = E_NOT_OK;
-    if (txBuffer == NULL)
-    {
-        return retVal;
-    }
-
-    /* Uart_AsyncSend transmit data */
-    T_Uart_Status = Uart_AsyncSend(transChannel, txBuffer, sendLength);
-    if (E_OK != T_Uart_Status)
-    {
-        Uart_Abort(transChannel, UART_SEND);
-        return E_NOT_OK;
-    }
-    /* Check for no on-going transmission */
-    do
-    {
-        Uart_TransmitStatus = Uart_GetStatus(transChannel, &T_bytesRemaining, UART_SEND);
-        vTaskDelay(pdMS_TO_TICKS(1));
-    } while ((UART_STATUS_NO_ERROR != Uart_TransmitStatus && 0 < --timeout));
-
-    if ((UART_STATUS_NO_ERROR != Uart_TransmitStatus))
-    {
-        retVal = E_NOT_OK;
-    }
-    else
-    {
-        retVal = E_OK;
-    }
-    return retVal;
+	UartMsg_t UartRecvMsg;
+	BaseType_t ret = pdFALSE;
+	uint32 retVal = E_NOT_OK;
+	*rxlen = 0;
+	ret = xQueueReceive(UartRecvQueue[recvChannel],&UartRecvMsg,T_timeout);
+	if(ret == pdTRUE)
+	{
+		*rxlen = UartRecvMsg.DataLen;
+		*rxBuffer = UartRecvMsg.dataPrt;
+		retVal = E_OK;
+	}
+	return retVal;
 }
-
-Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint16 *rxlen, sint32 T_timeout)
+Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout)
 {
-    volatile Std_ReturnType R_Uart_Status = E_NOT_OK;
-    volatile Uart_StatusType Uart_ReceiveStatus = UART_STATUS_TIMEOUT;
-    uint32 T_bytesRemaining = 0;
-    uint32 retVal = E_NOT_OK;
-    //    uint8 Rx_Buffer[MSG_LEN];
-    bufferIdx[recvChannel] = 0;
-    *rxlen = 0;
-    if (rxBuffer == NULL)
-    {
-        return retVal;
-    }
-    /* Uart_AsyncReceive transmit data */
-    switch (recvChannel)
-    {
-    case 0:
-        IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
-        break;
-    case 1:
-        IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
-        break;
-    case 2:
-        IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
-        break;
-    default:
-        break;
-    }
-    Uart_SetBuffer(recvChannel, rxBuffer, DMA_SIZE, UART_RECEIVE);
-    R_Uart_Status = Uart_AsyncReceive(recvChannel, rxBuffer, DMA_SIZE);
-    if (E_OK != R_Uart_Status)
-    {
-        Uart_Abort(recvChannel, UART_RECEIVE);
-        return E_NOT_OK;
-    }
-    /* Check for no on-going transmission */
-    do
-    {
-        Uart_ReceiveStatus = Uart_GetStatus(recvChannel, &T_bytesRemaining, UART_RECEIVE);
-        vTaskDelay(pdMS_TO_TICKS(1));
-
-    } while ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus) && 0 < T_timeout--);
-    if ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus))
-    {
-        Uart_Abort(recvChannel, UART_RECEIVE);
-        *rxlen = bufferIdx[recvChannel];
-        retVal = E_NOT_OK;
-    }
-    else
-    {
-        *rxlen = bufferIdx[recvChannel];
-        retVal = E_OK;
-    }
-    return retVal;
+	UartMsg_t UartSendMsg;
+	BaseType_t ret = pdFALSE;
+	uint32 retVal = E_NOT_OK;
+	UartSendMsg.DataLen = sendLength;
+	UartSendMsg.dataPrt = txBuffer;
+	ret = xQueueSend(UartSendQueue[transChannel],&UartSendMsg,T_timeout);
+	if(ret == pdTRUE)
+	{
+		retVal = E_OK;
+	}
+	return retVal;
 }
+ void UartInit(void)
+ {
+	 UartRecvQueue[0] = xQueueCreate(3, sizeof(UartMsg_t));
+	 UartRecvQueue[1] = xQueueCreate(3, sizeof(UartMsg_t));
+	 UartRecvQueue[2] = xQueueCreate(3, sizeof(UartMsg_t));
+	 UartSendQueue[0] = xQueueCreate(1, sizeof(UartMsg_t));
+	 UartSendQueue[1] = xQueueCreate(1, sizeof(UartMsg_t));
+	 UartSendQueue[2] = xQueueCreate(1, sizeof(UartMsg_t));
+	 UartHalQueueHandle = xQueueCreate(6, sizeof(UartHalMsg_t));
+
+	 xTaskCreate(Uart_Hal_RecvTask, (const char *const)"UartRecv", 1024, (void *)0, main_TASK_PRIORITY + 3, NULL);
+	 xTaskCreate(Uart_Hal_SendTask, (const char *const)"UartSend", 1024, (void *)0, main_TASK_PRIORITY + 2, NULL);
+ }
+ Std_ReturnType UartStartRecvFunc(uint8 channel)
+ {
+	 sint8 out = 0;
+	 volatile Std_ReturnType R_Uart_Status=E_NOT_OK;
+	 bufferIdx[channel]=0;
+	 memset(RX_Buffer[channel],0x00,BUFFER_SIZE);
+	 switch(channel)
+	 {
+		case 0:
+			IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
+			break;
+		case 1:
+			IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
+			break;
+		case 2:
+			IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
+			break;
+		default:
+			break;
+	 }
+	 Uart_SetBuffer(channel, RX_Buffer[channel], DMA_SIZE, UART_RECEIVE);
+	 R_Uart_Status = Uart_AsyncReceive(channel, RX_Buffer[channel], DMA_SIZE);
+	  if (E_OK != R_Uart_Status)
+	  {
+		  Uart_Abort(channel, UART_RECEIVE);
+		  out = E_NOT_OK;
+	  }
+	 return out;
+ }
+ void Uart_Hal_RecvTask(void *pvParameters)
+ {
+	 UartMsg_t UartMsg;
+	 UartHalMsg_t UartHalMsgRecv;
+	 BaseType_t ret = pdFALSE;
+	 uint32 T_bytesRemaining[3] = {0};
+	 uint16 T_timeout[3] = {0};
+	 volatile Uart_StatusType Uart_ReceiveStatus[3] = {UART_STATUS_TIMEOUT,UART_STATUS_TIMEOUT,UART_STATUS_TIMEOUT};
+	 uint8 UartIdx = UART_LPUART0;
+	 uint8 UartState[3] = {UartAbortRecv,UartAbortRecv,UartAbortRecv};
+	 while(1)
+	 {
+		 if((T_timeout[UartIdx]>1000) && (Uart_ReceiveStatus[UartIdx] != UART_STATUS_NO_ERROR) )//判定UART停止,超时停止,不是接收状态则停止
+		 {
+			  Uart_Abort(UartIdx, UART_RECEIVE);
+			  UartState[UartIdx] = UartAbortRecv;
+			  T_timeout[UartIdx] = 0;
+		 }
+		 else if(Uart_ReceiveStatus[UartIdx] == UART_STATUS_NO_ERROR)
+		 {
+			 UartState[UartIdx] = UartRecvComplete;
+		 }
+
+		 if((UartState[UartIdx] == UartAbortRecv) || (UartState[UartIdx] == UartRecvComplete)) //判定UART开始接收:UART停止后开始接收
+		 {
+			 if(E_OK == UartStartRecvFunc(UartIdx))
+			 {
+				 UartState[UartIdx] = UartStartRecv;
+			 }
+		 }
+
+		 ret = xQueueReceive(UartHalQueueHandle,&UartHalMsgRecv,1);
+
+		 Uart_ReceiveStatus[UartIdx] = Uart_GetStatus(UartIdx, &T_bytesRemaining[UartIdx], UART_RECEIVE);
+		 T_timeout[UartIdx]++;
+		 UartIdx = (UartIdx + 1) > 2 ? 0 : (UartIdx + 1);
+
+
+		  if(ret==pdTRUE)
+		  {
+			  if(UartHalMsgRecv.event==LPUART_UART_IP_EVENT_RECV_IDLE)
+			  {
+					UartMsg.DataLen = UartHalMsgRecv.value;
+//					UartMsg.dataPrt = RX_Buffer[UartHalMsgRecv.Channel];
+
+					UartMsg.dataPrt = malloc(UartMsg.DataLen);
+					memset(UartMsg.dataPrt,0,UartMsg.DataLen);
+					memcpy(UartMsg.dataPrt,RX_Buffer[UartHalMsgRecv.Channel],UartMsg.DataLen);
+
+					xQueueSendToFront(UartRecvQueue[UartHalMsgRecv.Channel],&UartMsg,1);
+
+					T_timeout[UartHalMsgRecv.Channel] = 0;
+					UartState[UartHalMsgRecv.Channel] = UartRecvComplete;
+
+//					Uart_ReceiveStatus[UartHalMsgRecv.Channel] = Uart_GetStatus(UartIdx, &T_bytesRemaining[UartIdx], UART_RECEIVE);
+			  }
+		  }
+	 }
+ }
+ void Uart_Hal_SendTask(void *pvParameters)
+ {
+	 UartMsg_t UartSendMsg;
+	 BaseType_t ret = pdFALSE;
+	 uint32 T_bytesRemaining[3] = {0};
+	 uint16 T_timeout[3] = {0};
+	 volatile Std_ReturnType T_Uart_Status[3];
+	 uint8 UartIdx = UART_LPUART0;
+	 uint8 UartSendState[3] = {UartNoDataSend,UartNoDataSend,UartNoDataSend};
+	 while(1)
+	 {
+		 ret = xQueueReceive(UartSendQueue[UartIdx],&UartSendMsg,1);
+		 if(ret==pdTRUE)
+		 {
+			 T_Uart_Status[UartIdx] = Uart_AsyncSend(UartIdx, UartSendMsg.dataPrt, UartSendMsg.DataLen);
+		     if (E_OK != T_Uart_Status[UartIdx])
+		     {
+		         Uart_Abort(UartIdx, UART_SEND);
+		         UartSendState[UartIdx] = UartAbortSend;
+		     }
+		     else
+		     {
+		    	 UartSendState[UartIdx] = UartStartSend;
+		     }
+		 }
+		 /*开始发送后的判定*/
+		 if(UartSendState[UartIdx] == UartStartSend)
+		 {
+			 Uart_TransmitStatus[UartIdx] = Uart_GetStatus(UartIdx, &T_bytesRemaining[UartIdx], UART_SEND);
+			 T_timeout[UartIdx]++;
+		 }
+		 if(T_timeout[UartIdx]>=1000 || ((Uart_TransmitStatus[UartIdx] != UART_STATUS_OPERATION_ONGOING) && (UartSendState[UartIdx] == UartStartSend)))
+		 {
+			 if(T_timeout[UartIdx]>=1000)
+			 {
+				 Uart_Abort(UartIdx, UART_SEND);
+				 UartSendState[UartIdx] = UartAbortSend;
+			 }
+			 else if(Uart_TransmitStatus[UartIdx] == UART_STATUS_NO_ERROR)
+			 {
+				 UartSendState[UartIdx] = UartSendComplete;
+			 }
+			 T_timeout[UartIdx] = 0;
+		 }
+
+		 UartIdx = (UartIdx + 1) > 2 ? 0 : (UartIdx + 1);
+	 }
+
+ }
+//
+//Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 *rxBuffer, uint16 *rxlen, uint32 T_timeout)
+//{
+//    volatile Std_ReturnType R_Uart_Status;
+//    volatile Std_ReturnType T_Uart_Status;
+//    volatile Uart_StatusType Uart_ReceiveStatus = UART_STATUS_TIMEOUT;
+//    volatile Uart_StatusType Uart_TransmitStatus = UART_STATUS_TIMEOUT;
+//    uint32 T_bytesRemaining;
+//    uint32 R_bytesRemaining;
+//    uint32 timeout = T_timeout;
+//    uint32 retVal = E_NOT_OK;
+//    bufferIdx[recvChannel] = 0;
+//    switch (recvChannel)
+//    {
+//    case 0:
+//        IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
+//        break;
+//    case 1:
+//        IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
+//        break;
+//    case 2:
+//        IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
+//        break;
+//    default:
+//        break;
+//    }
+//    if (txBuffer == NULL || rxBuffer == NULL)
+//    {
+//        return retVal;
+//    }
+//
+//    /* Uart_AsyncSend transmit data */
+//    Uart_SetBuffer(transChannel, txBuffer, sendLength, UART_SEND);
+//    T_Uart_Status = Uart_AsyncSend(transChannel, txBuffer, sendLength);
+//    if (E_OK != T_Uart_Status)
+//    {
+//        Uart_Abort(transChannel, UART_SEND);
+//        return E_NOT_OK;
+//    }
+//    Uart_SetBuffer(recvChannel, &RX_Buffer[recvChannel][0], DMA_SIZE, UART_RECEIVE);
+//    R_Uart_Status = Uart_AsyncReceive(recvChannel, rxBuffer, DMA_SIZE);
+//    if (E_OK != R_Uart_Status)
+//    {
+//        Uart_Abort(recvChannel, UART_RECEIVE);
+//        return E_NOT_OK;
+//    }
+//    /* Check for no on-going transmission */
+//    do
+//    {
+//        if (Uart_TransmitStatus != UART_STATUS_NO_ERROR)
+//        {
+//            Uart_TransmitStatus = Uart_GetStatus(transChannel, &T_bytesRemaining, UART_SEND);
+//        }
+//        if (Uart_ReceiveStatus != UART_STATUS_NO_ERROR)
+//        {
+//            Uart_ReceiveStatus = Uart_GetStatus(recvChannel, &R_bytesRemaining, UART_RECEIVE);
+//        }
+//        vTaskDelay(pdMS_TO_TICKS(1));
+//    } while (((UART_STATUS_NO_ERROR != Uart_TransmitStatus || UART_STATUS_NO_ERROR != Uart_ReceiveStatus) && 0 < --timeout));
+//    if ((UART_STATUS_NO_ERROR != Uart_TransmitStatus))
+//    {
+//        Uart_Abort(transChannel, UART_SEND);
+//        retVal = E_NOT_OK;
+//    }
+//    else
+//    {
+//        retVal = E_OK;
+//    }
+//    if ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus))
+//    {
+//        Uart_Abort(recvChannel, UART_RECEIVE);
+//        *rxlen = bufferIdx[recvChannel];
+//        retVal = E_NOT_OK;
+//    }
+//    else
+//    {
+//        *rxlen = bufferIdx[recvChannel];
+//        retVal = E_OK;
+//    }
+//    return retVal;
+//}
+//
+//Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout)
+//{
+//
+//    volatile Std_ReturnType T_Uart_Status;
+//    volatile Uart_StatusType Uart_TransmitStatus = UART_STATUS_TIMEOUT;
+//    uint32 T_bytesRemaining;
+//    uint32 timeout = T_timeout;
+//    uint32 retVal = E_NOT_OK;
+//    if (txBuffer == NULL)
+//    {
+//        return retVal;
+//    }
+//
+//    /* Uart_AsyncSend transmit data */
+//    T_Uart_Status = Uart_AsyncSend(transChannel, txBuffer, sendLength);
+//    if (E_OK != T_Uart_Status)
+//    {
+//        Uart_Abort(transChannel, UART_SEND);
+//        return E_NOT_OK;
+//    }
+//    /* Check for no on-going transmission */
+//    do
+//    {
+//        Uart_TransmitStatus = Uart_GetStatus(transChannel, &T_bytesRemaining, UART_SEND);
+//        vTaskDelay(pdMS_TO_TICKS(1));
+//    } while ((UART_STATUS_NO_ERROR != Uart_TransmitStatus && 0 < --timeout));
+//
+//    if ((UART_STATUS_NO_ERROR != Uart_TransmitStatus))
+//    {
+//        retVal = E_NOT_OK;
+//    }
+//    else
+//    {
+//        retVal = E_OK;
+//    }
+//    return retVal;
+//}
+//
+//Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint16 *rxlen, sint32 T_timeout)
+//{
+//    volatile Std_ReturnType R_Uart_Status = E_NOT_OK;
+//    volatile Uart_StatusType Uart_ReceiveStatus = UART_STATUS_TIMEOUT;
+//    uint32 T_bytesRemaining = 0;
+//    uint32 retVal = E_NOT_OK;
+//    //    uint8 Rx_Buffer[MSG_LEN];
+//    bufferIdx[recvChannel] = 0;
+//    *rxlen = 0;
+//    if (rxBuffer == NULL)
+//    {
+//        return retVal;
+//    }
+//    /* Uart_AsyncReceive transmit data */
+//    switch (recvChannel)
+//    {
+//    case 0:
+//        IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
+//        break;
+//    case 1:
+//        IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
+//        break;
+//    case 2:
+//        IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
+//        break;
+//    default:
+//        break;
+//    }
+//    Uart_SetBuffer(recvChannel, rxBuffer, DMA_SIZE, UART_RECEIVE);
+//    R_Uart_Status = Uart_AsyncReceive(recvChannel, rxBuffer, DMA_SIZE);
+//    if (E_OK != R_Uart_Status)
+//    {
+//        Uart_Abort(recvChannel, UART_RECEIVE);
+//        return E_NOT_OK;
+//    }
+//    /* Check for no on-going transmission */
+//    do
+//    {
+//        Uart_ReceiveStatus = Uart_GetStatus(recvChannel, &T_bytesRemaining, UART_RECEIVE);
+//        vTaskDelay(pdMS_TO_TICKS(1));
+//
+//    } while ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus) && 0 < T_timeout--);
+//    if ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus))
+//    {
+//        Uart_Abort(recvChannel, UART_RECEIVE);
+//        *rxlen = bufferIdx[recvChannel];
+//        retVal = E_NOT_OK;
+//    }
+//    else
+//    {
+//        *rxlen = bufferIdx[recvChannel];
+//        retVal = E_OK;
+//    }
+//    return retVal;
+//}
 extern Lpuart_Uart_Ip_StateStructureType *Lpuart_Uart_Ip_apStateStructuresArray[LPUART_UART_IP_NUMBER_OF_INSTANCES];
 void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event)
 {
     //    (void)userData;
-    uint32_t temp;
+		Lpuart_Uart_Ip_StateStructureType * UartState;
+		UartState = (Lpuart_Uart_Ip_StateStructureType *)Lpuart_Uart_Ip_apStateStructuresArray[hwInstance];
     /* Check the event type */
     if (event == LPUART_UART_IP_EVENT_RX_FULL)
     {
@@ -217,18 +431,20 @@ void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event)
     }
     if (event == LPUART_UART_IP_EVENT_RECV_IDLE)
     {
+         uint32_t temp;
+         UartHalMsg_t UartHalMsg;
+         UartHalMsg.Channel = hwInstance;
+         UartHalMsg.event = event;
         /*Get the transfered data size. DMA Channel 1 is used for LPUART DMA receiving, please modify accordingly.*/
         temp = DMA_SIZE - (uint32_t)IP_DMA->TCD[hwInstance].CITER.ELINKNO;
         /*Add the remaining data size to the sum of the received size*/
         bufferIdx[hwInstance] += temp;
         /*Abort the receiving after detecting IDLE receiving*/
-
-        Lpuart_Uart_Ip_StateStructureType *UartState;
-        UartState = (Lpuart_Uart_Ip_StateStructureType *)Lpuart_Uart_Ip_apStateStructuresArray[hwInstance];
         UartState->IsRxBusy = FALSE;
         UartState->ReceiveStatus = LPUART_UART_IP_STATUS_SUCCESS;
         Lpuart_Uart_Ip_CompleteReceiveUsingDma(hwInstance);
-        //		rxSuccess = true;
+ 		UartHalMsg.value = bufferIdx[hwInstance];
+ 		xQueueSendFromISR(UartHalQueueHandle,&UartHalMsg,pdFALSE);
     }
 }
 

+ 37 - 12
src/hal_adapter.h

@@ -74,25 +74,50 @@ typedef signed long INT32;
 #define NUM_RESULTS ADC_CFGSET_VS_0_GROUP_0_CHANNELS
 #define BUFFER_SIZE 1000
 #define DMA_SIZE 20
-extern uint8_t RX_Buffer[3][BUFFER_SIZE];
 
-typedef enum
-{
-    SystemTPChannel = 0,
-    SlowChargeTPChannel,
-    QuickChargeTPChannel,
-    CC1TPChannel,
-    ChannelCounter = 4,
-} ADC_TP_Channel_Type;
+
+
+ typedef struct
+ {
+     uint16 DataLen;
+     uint8 *dataPrt;
+ } UartMsg_t;
+ typedef struct
+ {
+	 uint8 Channel;
+	 Lpuart_Uart_Ip_EventType event;
+     uint16  value;
+ } UartHalMsg_t;
+ typedef enum
+ {
+	 UartStartRecv = 0,
+	 UartAbortRecv,
+	 UartRecvOnGoing,
+	 UartRecvComplete,
+
+	 UartStartSend,
+	 UartAbortSend,
+	 UartSendOnGoing,
+	 UartSendComplete,
+	 UartNoDataSend,
+ };
+ typedef enum
+ {
+	 SystemTPChannel = 0,
+	 SlowChargeTPChannel,
+	 QuickChargeTPChannel,
+	 CC1TPChannel,
+	 ChannelCounter = 4,
+ }ADC_TP_Channel_Type;
 
 typedef uint32 TP_Value_Type;
 Std_ReturnType ADC_ReadValue(void);
 // extern uint8 GpsBufferGet[GPSBUFFER_SIZE];
-Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 *rxBuffer, uint16 *rxlen, uint32 T_timeout);
+Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 **rxBuffer, uint16 *rxlen, uint32 T_timeout);
 Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout);
-Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint16 *rxlen, sint32 T_timeout);
+Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 **rxBuffer, uint16 *rxlen, sint32 T_timeout);
 void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event);
-
+void UartInit(void);
 /*CAN*/
 typedef enum
 {

+ 9 - 4
src/main.c

@@ -161,6 +161,9 @@ int main(void)
 	IP_LPUART0->CTRL |= LPUART_CTRL_ILT(1);
 	IP_LPUART1->CTRL |= LPUART_CTRL_ILT(1);
 	IP_LPUART2->CTRL |= LPUART_CTRL_ILT(1);
+	IP_LPUART0->CTRL |= LPUART_CTRL_IDLECFG(5);
+	IP_LPUART1->CTRL |= LPUART_CTRL_IDLECFG(5);
+	IP_LPUART2->CTRL |= LPUART_CTRL_IDLECFG(5);
 
 	Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
 	Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
@@ -168,10 +171,12 @@ int main(void)
 	Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
 	Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_LED5, STD_OFF);
 
-	xTaskCreate(MainTask, (const char *const)"MainTask", 128, (void *)0, main_TASK_PRIORITY + 3, NULL);
-	xTaskCreate(Uart_4G_Task, (const char *const)"Uart_4G_Task", 2048, (void *)0, main_TASK_PRIORITY + 0, 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(MainTask, (const char *const)"MainTask", 128, (void *)0, main_TASK_PRIORITY + 7, NULL);
+	UartInit();
+	xTaskCreate(Uart_4G_Task, (const char *const)"Uart_4G_Task", 2048, (void *)0, main_TASK_PRIORITY + 3, NULL);
+//	xTaskCreate(CanTask, (const char *const)"CanTask", 512, (void *)0, main_TASK_PRIORITY + 4, NULL);
+	xTaskCreate(GpsTask, (const char *const)"GpsTask", 512, (void *)0, main_TASK_PRIORITY + 2, NULL);
+
 	vTaskStartScheduler();
 	for (;;)
 	{