소스 검색

add jt808

zack 1 년 전
부모
커밋
ca48d62185
21개의 변경된 파일5873개의 추가작업 그리고 7847개의 파일을 삭제
  1. 118 14
      Core/Inc/ConfigMacros.h
  2. 1 1
      Core/Inc/main.h
  3. 1 0
      Core/Inc/mba32a.h
  4. 15 0
      Core/Inc/ml307a.h
  5. 41 0
      Core/Inc/tt808.h
  6. 6 1
      Core/Inc/usart.h
  7. 123 9
      Core/Src/freertos.c
  8. 1 1
      Core/Src/interface.c
  9. 16 7
      Core/Src/key.c
  10. 133 1
      Core/Src/main.c
  11. 25 5
      Core/Src/mba32a.c
  12. 165 123
      Core/Src/ml307a.c
  13. 41 53
      Core/Src/rtc.c
  14. 26 20
      Core/Src/stm32f1xx_it.c
  15. 924 0
      Core/Src/tt808.c
  16. 5 2
      Core/Src/usart.c
  17. 0 3682
      MDK-ARM/dtu.uvguix.Administrator
  18. 49 52
      MDK-ARM/dtu.uvoptx
  19. 5 0
      MDK-ARM/dtu.uvprojx
  20. 4177 3876
      Output/dtu.hex
  21. 1 0
      Output/dtu.lnp

+ 118 - 14
Core/Inc/ConfigMacros.h

@@ -32,9 +32,53 @@
 #define Sn3Addr							((uint32_t)0x8077700)  
 #define Sn4Addr							((uint32_t)0x8077800)  
 
+#define PCMQTTADDR			 "118.31.22.26"
+#define PCMQTTPORT			 7883
+#define PCMQTTUSER			 "test"
+#define PCMQTTPSWD			 "test123"
+#define PCMQTTTOPIC			 "world"
+#define QOS					1
+#define RETAIN				0
+#define DUP 				0
+#define BUFFER_SIZE 2048
+#define BYTE 	uint8_t
+#define WORD 	uint16_t
+#define DWORD 	uint32_t
+#define TT808FLAG  	0x7E
+#define TCPHeadBYTE 0x2A
+#define TCPTAILBYTE 0x23
 
+#define TCPJMFSRSA  0x001
+#define TCPJMFSNULL 0x000
 
 
+#define JLPTIP		"121.199.29.128"
+#define JLPTPORT	7342
+
+
+#define LockStatusOpen  0x60
+#define LockStatusClose 0x40
+#define LockStatusNull  0xAA
+
+#define XXIDzdy		0x1234
+#define XXIDxfMac1	0x1235
+#define XXIDxfMac2	0x1236
+#define XXIDxfMac3	0x1237
+#define XXIDxfMac4	0x1238
+
+
+
+
+
+#define XXIDzdjq	0x0102
+#define XXIDzdxt	0x0002 //心跳
+#define XXIDzddz	0x0200
+
+
+#define XXIDpttyyd	0x8001	//通用应答
+#define XXIDptxxtc	0x8900	//下行透传
+#define XXIDzdtyyd	0x0001	//终端通用应答
+
 
 
 #define TIM_Start(htim) 				HAL_TIM_Base_Start_IT(htim)
@@ -48,6 +92,7 @@
 #define PRINT_NUUID(message) 			printf("%s不符合\n",message)
 
 
+
 /* SYETEM init */
 #define START_PROCESS() \
     do { \
@@ -80,7 +125,6 @@ do { \
 #define IDLE_DMA_UART(huart) \
 do {\
 	__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); \
-	HAL_UART_Receive_DMA(huart, recvBuff, 2048); \
 } while(0)
 
 
@@ -98,7 +142,7 @@ do { \
 do { \
 	if(reset4Gmodule) { \
 		reset4Gmodule = false; \
-		HAL_Delay(1500); \
+		HAL_Delay(2000); \
 		ML307A_Init(); \
 	} \
 } while(0)
@@ -119,6 +163,10 @@ typedef struct
     uint8_t next; 			//向下一个
     uint8_t enter; 	    	//确定
 	uint32_t home;
+	uint8_t S1sjf;
+	uint8_t S2sjf;
+	uint8_t S3sjf;
+	uint8_t S4sjf;
 	char* SN1;
 	char* SN1F;
 	char* SN1D;
@@ -136,6 +184,10 @@ typedef struct
 	char* SN4D;
 	char* SN4name;
 	uint8_t PreNext;
+	char* LOCJ;
+	char* LOCW;
+	char* LOCJW;
+	
 } Menu_table;
 
 struct keys
@@ -167,18 +219,6 @@ typedef enum {
     TxPower = 4
 } BtStep;
 
-typedef enum {
-    ATOK = 0,
-    CFUN = 1,
-    SIMH = 2,
-    CPIN = 3,
-    CEREG = 4,
-    MLB1 = 5,
-    MLB2 = 6,
-    MLB3 = 7,
-    MLB4 = 8,
-	ML307AStepReset = 9
-} ML307AStep;
 
 typedef enum {
     Default = 0,
@@ -206,5 +246,69 @@ typedef struct {
     char *disconnected_msg;
     uint16_t value;
 } MenuInfo;
+
+
+typedef struct {
+    uint8_t year;
+    uint8_t month;
+    uint8_t day;
+    uint8_t hour;
+    uint8_t minute;
+    uint8_t second;
+	
+} Time;
+
+
+typedef struct {
+    uint8_t LSH;
+	uint8_t L1Lockstatus;
+	uint8_t L2Lockstatus;
+	uint8_t L3Lockstatus;
+	uint8_t L4Lockstatus;
+	
+} TT808;
+
+
+typedef struct {
+	
+	
+	uint16_t Xxid;		//消息ID
+	uint16_t Xxtsx;		//消息体属性
+    uint8_t  CidNum[6];	//终端ID号
+	uint16_t Xxlsh;		//消息流水号
+	
+	
+	
+    uint8_t  workcmd;	//锁操作命令
+	uint8_t  Cmd;		//Cmd
+	uint32_t LockID;	//锁ID
+	uint8_t  Gate;		//Gate
+    uint8_t  Bill[8];	//Bill
+	uint16_t LineCode;  //LineCode
+    uint8_t  Key[6];
+	uint8_t  VaildTime;	//VaildTime
+	uint32_t standby;	//备用
+    uint8_t  Time[6];
+    uint8_t  crc;
+    uint8_t  Tcrc;//后crc
+	
+} TCPCenterD;
+
+typedef struct {
+	
+    uint8_t  workcmd;	//锁操作命令
+	uint8_t  Cmd;		//Cmd
+	uint32_t LockID;	//锁ID
+	uint8_t  Gate;		//Gate
+    uint8_t  Bill[8];	//Bill
+	uint8_t  Voltage;	//Voltage
+	uint8_t  LockStatus;//LockStatus
+	uint8_t  MotoStatus;//MotoStatus 
+	uint16_t  LineCode;  //LineCode
+	uint8_t  OperationIdNum[8];//操作识别号
+	uint8_t  cmdSRC;  //cmdSRC
+    uint8_t  Time[6];
+	
+} TCPClientD;
 #endif /*__CONFIGMACROS_H*/
 

+ 1 - 1
Core/Inc/main.h

@@ -94,7 +94,7 @@ void Error_Handler(void);
 
 /* USER CODE BEGIN Private defines */
 
-
+void readLockStatusinit(void);
 /* USER CODE END Private defines */
 
 #ifdef __cplusplus

+ 1 - 0
Core/Inc/mba32a.h

@@ -10,6 +10,7 @@ extern uint8_t g_MBA32A_8buf[2048];
 extern uint8_t g_MBA32A_8buf_Down[2048];
 extern uint16_t u5length;
 
+extern bool btreflag;
 
 void workinfo_W(void);
 void open_close_lock(void);

+ 15 - 0
Core/Inc/ml307a.h

@@ -9,11 +9,26 @@ extern bool u4RecvFlag;
 extern uint8_t g_ML307A_8buf[2048]; 
 extern uint8_t g_ML307A_8buf_Down[2048];
 
+extern uint8_t g_ML307A_Loc[1024]; 
 extern bool module4G_F;
 extern bool reset4Gmodule;
 
+extern char JD_str[13];
+extern char WD_str[12];
+
+extern bool conn4g_loc;
+extern char JWD_str[25];
 void ML307A_Init(void);
 void loction_4G(void);
+uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum);
+uint8_t MQTT_PUB(uint8_t connect_id, char *topic, char *mesg, char* pRes);
+void CONNTCP(void);
+void Work_4Gtest(void);
+	
+extern uint8_t ICCID[60];
+extern bool tcpconn ;
+extern uint32_t JD_dw;
+extern uint32_t WD_dw;
 
 #endif /*__ML307A_H*/
 

+ 41 - 0
Core/Inc/tt808.h

@@ -0,0 +1,41 @@
+#ifndef __TT808_H
+#define __TT808_H
+#include "main.h"
+int hex2bin(unsigned char *bin, const char *hex);
+extern uint16_t hccd ;
+void chuliTcpRe(uint16_t length);
+void chulihuifushujv(void);
+extern bool chuliSJ;
+extern bool genghaunmac ;
+extern bool MIPurcReFlag;
+extern uint8_t MIPurc[256];
+extern uint8_t MIPurc1[256];
+extern size_t new_length;
+void newMacchange(void);
+extern bool U4re;
+extern uint16_t xxid ;
+extern bool newmac;
+void tr(void);
+void replyCenter(void);
+void TCPCenterDownward(void);
+extern uint8_t escaped_data[100];
+extern uint8_t BusinessData[256] ;
+extern uint8_t cmd_replyArray[39];
+void tt808test(uint8_t* Bodyxxt, size_t bodylength, uint8_t XXLSH);
+void wjwd(void);
+void packageData(uint8_t flag, uint8_t *head, uint8_t *body, size_t bodylength, uint8_t *escaped_data, size_t *new_length);
+void string_to_hex_array(char* str, int str_len, uint8_t* hex_array);
+
+
+extern uint8_t MIPurcXXTCSJ[256];
+
+extern uint8_t hext[256];
+void tt808FsFunc(uint8_t xxt[], uint8_t xxtlength);
+
+uint8_t xxtFZ(uint8_t xxt[], uint8_t xxtlength, uint8_t outXxt[]);
+extern int rlt;
+
+void XGtest(void);
+
+#endif /*__TT808_H*/
+

+ 6 - 1
Core/Inc/usart.h

@@ -45,8 +45,12 @@ extern UART_HandleTypeDef huart3;
 
 /* USER CODE BEGIN Private defines */
 
-extern volatile uint8_t recvLength;  //接收一帧数据的长度
+extern uint8_t U1reFlag;
+extern uint8_t recvLength;  //接收一帧数据的长度
+extern uint8_t U1recvLength;  //接收一帧数据的长度
 extern uint8_t recvBuff[2048];
+extern uint8_t U1recvBuff[2048];
+extern uint8_t U4recvBuff[2048];
 /* USER CODE END Private defines */
 
 void MX_UART4_Init(void);
@@ -56,6 +60,7 @@ void MX_USART2_UART_Init(void);
 void MX_USART3_UART_Init(void);
 
 /* USER CODE BEGIN Prototypes */
+uint8_t xorBytes(uint8_t arr[], int size);
 uint16_t read_flash_16(uint32_t addr);
 uint32_t read_flash_32(uint32_t addr);
 void erase_flash(uint32_t ADDR_FLASH);

+ 123 - 9
Core/Src/freertos.c

@@ -28,13 +28,20 @@
 
 #include "key.h"
 #include "usart.h"
+#include <stdlib.h>
+#include "tt808.h"
+
 extern Menu_table menu;
+extern TT808 tt808;
 void Jump_interface(Menu_table menu);
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/
 /* USER CODE BEGIN PTD */
 
+    double JD_double;
+    double WD_double;
+	
 /* USER CODE END PTD */
 
 /* Private define ------------------------------------------------------------*/
@@ -45,6 +52,9 @@ void Jump_interface(Menu_table menu);
 /* Private macro -------------------------------------------------------------*/
 /* USER CODE BEGIN PM */
 
+extern TCPClientD tcpc;
+uint8_t hex_array[]={0};
+		  uint8_t i =0;
 /* USER CODE END PM */
 
 /* Private variables ---------------------------------------------------------*/
@@ -148,13 +158,16 @@ void StartScanKeyTask(void const * argument)
   {
     osDelay(1);
 	updatekeystate(); 				//扫描键值
-	modifyOledBmp();				//修改锁图
     Jump_interface(menu); 			//跳转界面
     OLED_Refresh(); 				//刷新界面
-	open_close_lock();				//施解操作
-	//workinfo_W();
 	HANDLE_RETURN_INTERFACE();		//界面超时
+	modifyOledBmp();				//修改锁图
+	open_close_lock();				//施解操作
 	RESET_4G_MODULE();				//4G启动(复位)
+
+	 
+
+	  
   }
   /* USER CODE END StartScanKeyTask */
 }
@@ -175,7 +188,92 @@ void StarBT4GTask(void const * argument)
   {
     osDelay(1);
 	  
+
 	  
+
+	  //TCPCenterDownward();
+
+	  if(U4re)
+	  {
+		  //replyCenter();
+//		  CONNTCP();
+	  }
+	  
+	  if(newmac)
+	  {
+		  //换MAC
+		  newmac=false;
+		  newMacchange();
+	  }	  
+	 if(u4RecvFlag)
+	 {
+		 u4RecvFlag=false;
+		 HAL_UART_Transmit(&huart1,g_ML307A_8buf_Down,u4length,0xFFFF);//有信息就吐
+	 }
+	 if(btreflag)
+	 {
+		 btreflag=false;
+		 HAL_UART_Transmit(&huart1,g_MBA32A_8buf,u5length,0xFFFF);
+	 }
+
+	 
+	 if(g_ML307A_8buf_Down[1]==0x4D && g_ML307A_8buf_Down[2]==0x4C && g_ML307A_8buf_Down[3]==0x42 \
+		  && g_ML307A_8buf_Down[4]==0x53 && g_ML307A_8buf_Down[5]==0x4C && g_ML307A_8buf_Down[6]==0x4F \
+			&& g_ML307A_8buf_Down[7]==0x43 && g_ML307A_8buf_Down[8]==0x3A)//检测MLBSLOC:
+	 {
+		 
+		memcpy(JD_str, &g_ML307A_8buf_Down[14], 12); 
+		memcpy(WD_str, &g_ML307A_8buf_Down[27], 11); 
+		double num;
+		double num1;
+		num = atof(JD_str);
+		num1 = atof(WD_str);
+		num = num* 1000000;
+		num1= num1* 1000000;
+		JD_dw = (uint32_t)num;
+		WD_dw = (uint32_t)num1;		
+	 
+	 }
+	 
+	 //4D 49 50 55 52 43
+	 if(g_ML307A_8buf_Down[1]==0x4D && g_ML307A_8buf_Down[2]==0x49 && g_ML307A_8buf_Down[3]==0x50 \
+		  && g_ML307A_8buf_Down[4]==0x55 && g_ML307A_8buf_Down[5]==0x52 && g_ML307A_8buf_Down[6]==0x43 )
+	 { 
+		uint8_t high_byte = (g_ML307A_8buf_Down[18]&0x0f) *10; 
+		uint8_t low_byte = g_ML307A_8buf_Down[19]&0x0f; 
+		hccd = high_byte + low_byte;
+		 
+		memcpy(MIPurc,&g_ML307A_8buf_Down[21],hccd*2);
+		 
+		const char *hex = (const char *)MIPurc;  // 将 uint8_t * 转换为 const char *
+		int size = strlen(hex) / 2;  // 计算二进制数据的长度
+		unsigned char *bin = (unsigned char *)malloc(size);  // 分配足够的内存用于存储二进制数据
+		rlt = hex2bin(bin, hex);  // 调用hex2bin函数进行转换
+		 
+
+		
+		memcpy(MIPurc1, bin, rlt);  // 将 bin 中的 rlt 个字节复制到 MIPurc1 中						接收到的数据放入MIPurc1中
+		free(bin);  // 释放内存  
+ 
+		memset(g_ML307A_8buf_Down,0,u4length);
+
+		 
+	 }
+/*********对平台的应答做处理**********/
+	 if(MIPurc1[0]==0x7E)
+	 {
+		 uint16_t PTXXID = MIPurc1[1]<<8 | MIPurc1[2];		//消息ID
+		 uint16_t xxtcLen = MIPurc1[3]<<8 | MIPurc1[4];		//数据长度
+		 if(PTXXID==XXIDpttyyd)//平台通用应答
+		 {
+			 
+		 }
+		 else if(PTXXID == XXIDptxxtc)
+		 {
+			 memcpy(MIPurcXXTCSJ,&MIPurc1[13],xxtcLen);
+		 }
+	 }
+
   }
   /* USER CODE END StarBT4GTask */
 }
@@ -194,8 +292,12 @@ void StartTestTask(void const * argument)
   /* Infinite loop */
   for(;;)
   {
-    osDelay(1);
-	loction_4G();
+    osDelay(10000);    
+	  
+
+	  
+		  
+
   }
   /* USER CODE END StartTestTask */
 }
@@ -213,10 +315,22 @@ void StartloginfoTaskTask(void const * argument)
   /* Infinite loop */
   for(;;)
   {
-    osDelay(1000);
-	//dtu_test();
-
-	//lock_searchInfo();
+    osDelay(1500);
+
+
+	if(module4G_F)
+	{
+		module4G_F=false;
+		
+	
+		tt808FsFunc(ICCID,22);
+	
+			
+			
+	}
+	 
+	 
+	 
 
   }
   /* USER CODE END StartloginfoTaskTask */

+ 1 - 1
Core/Src/interface.c

@@ -613,7 +613,7 @@ void home(uint32_t L_s, bool L1bd, bool L2bd, bool L3bd, bool L4bd)
 		case 0x0F00:
 			OLED_ShowString(8,8,NOSETLOCK,12,1);     //L1null
 			OLED_ShowString(68,8,NOSETLOCK,12,1);    //L3null
-			OLED_ShowString(98,8,NOSETLOCK,12,1);		 //L4null
+			OLED_ShowString(98,8,NOSETLOCK,12,1);	 //L4null
 			if(L2bd){
 				if(L_s == 0x0100){
 					OLED_ShowPicture(40,6,20,20,BMP3,1);    //ÏÔʾͼƬ¿ª

+ 16 - 7
Core/Src/key.c

@@ -45,6 +45,8 @@ uint8_t KEY_1_Scan(void)
 					{
 							case 0:
 							{
+								
+								scanMac();
 								SET_MENU_STATUS(0,0,0,0);
 								break;
 							}
@@ -180,6 +182,8 @@ uint8_t KEY_2_Scan(void)
 					{
 						case 0:
 						{
+							
+							scanMac();
 							SET_MENU_STATUS(0,0,0,0);
 							break;
 						}
@@ -543,6 +547,7 @@ uint8_t KEY_3_Scan(void)
 									}
 								}
 							}
+							scanMac();
 							SET_MENU_STATUS(2,4,0,2);
 							
 							break;
@@ -755,32 +760,36 @@ void ClearBtSnItem(void)
 	menu.SN1name=NULL;
 	menu.SN1=NULL;
 	menu.SN1F=NULL;
+	menu.SN1D=NULL;
+	erase_flash(Sn1StatusAddr);
+	erase_flash(Sn1Addr);
+	erase_flash(serialNum1Addr);
+	L1bd=false;
+	
 	menu.SN2name=NULL;
 	menu.SN2=NULL;
 	menu.SN2F=NULL;
+	menu.SN2D=NULL;
+	
 	menu.SN3name=NULL;
 	menu.SN3=NULL;
 	menu.SN3F=NULL;
+	menu.SN3D=NULL;
+	
 	menu.SN4name=NULL;
 	menu.SN4=NULL;
 	menu.SN4F=NULL;
-	menu.SN1D=NULL;
-	menu.SN2D=NULL;
-	menu.SN3D=NULL;
 	menu.SN4D=NULL;
-	erase_flash(Sn1StatusAddr);
+	
 	erase_flash(Sn2StatusAddr);
 	erase_flash(Sn3StatusAddr);
 	erase_flash(Sn4StatusAddr);
-	erase_flash(Sn1Addr);
 	erase_flash(Sn2Addr);
 	erase_flash(Sn3Addr);
 	erase_flash(Sn4Addr);
-	erase_flash(serialNum1Addr);
 	erase_flash(serialNum2Addr);
 	erase_flash(serialNum3Addr);
 	erase_flash(serialNum4Addr);
-	L1bd=false;
 	L2bd=false;
 	L3bd=false;
 	L4bd=false;

+ 133 - 1
Core/Src/main.c

@@ -114,7 +114,10 @@ int main(void)
   TIM_Start(&htim2);		//wdi
   TIM_Start(&htim3);		//led
   OLED_DISPLAY(0,0);		//color>1 反色;display>1 翻转
+  IDLE_DMA_UART(&huart1);	//开启U1中断
+  HAL_UART_Receive_DMA(&huart1, U1recvBuff, BUFFER_SIZE); 
   IDLE_DMA_UART(&huart4);	//开启4G_DMA中断
+  HAL_UART_Receive_DMA(&huart4, U4recvBuff, BUFFER_SIZE); 
   RXNE_UART(&huart5);		//开启BT接收中断
   START_PROCESS(); 			//SYETEM启动
   readLockStatusinit();
@@ -124,6 +127,7 @@ int main(void)
 #if open4G==1
   reset4Gmodule = true;//ML307A_Init();
 #endif
+
   /* USER CODE END 2 */
 
   /* Call init function for freertos objects (in freertos.c) */
@@ -193,6 +197,9 @@ void SystemClock_Config(void)
 }
 
 /* USER CODE BEGIN 4 */
+
+extern TT808 tt808;
+uint8_t smac[2]={0};
 void readLockStatusinit(void)
 {
   scanMac();
@@ -200,26 +207,87 @@ void readLockStatusinit(void)
   uint16_t S2bd = read_flash_16(Sn2Addr);
   uint16_t S3bd = read_flash_16(Sn3Addr);
   uint16_t S4bd = read_flash_16(Sn4Addr);
-	
+  
   uint32_t S1LS = read_flash_32(serialNum1Addr);
   uint32_t S2LS = read_flash_32(serialNum2Addr);
   uint32_t S3LS = read_flash_32(serialNum3Addr);
   uint32_t S4LS = read_flash_32(serialNum4Addr);
+	
+	smac[0]=S1bd>>8&0xff;
+	smac[1]=S1bd&0xff;
+	char SNconn[50];
+	char *ptr = SNconn;
+	ptr += sprintf(ptr, "AT+CONN=10100000");
+	for (int i = 0; i < 2; i++) {
+		ptr += sprintf(ptr, "%02X", smac[i]);
+	}
+	sprintf(ptr, "\r\n");//TCPvalue
+
+	char SNF[50];
+	char *ptr1 = SNF;
+	ptr1 += sprintf(ptr1, "+CONNECTED:0,10100000");
+	for (int i = 0; i < 2; i++) {
+		ptr1 += sprintf(ptr1, "%02X", smac[i]);
+	}
+	//sprintf(ptr, "\r\n");//TCPvalue
+
+
+	
+	char SNname[2];
+	char *ptr2 = SNname;
+	for (int i = 0; i < 2; i++) {
+		ptr2 += sprintf(ptr2, "%02X", smac[i]);
+	}
+	//sprintf(ptr, "\r\n");//TCPvalue		
+
+	char SND[50];
+	char *ptr3 = SND;
+	ptr3 += sprintf(ptr3, "+DISCONN:0,10100000");
+	for (int i = 0; i < 2; i++) {
+		ptr3 += sprintf(ptr3, "%02X",smac[i]);
+	}
+		
+		
   if(S1bd!=0xFFFF)
   {
+	  
 	  L1bd=true;
+
+		menu.SN1 = SNconn;//AT+CONN=*********\r\n
+		menu.SN1F = SNF;//+CONNECTED:0,101000000010
+		menu.SN1name = SNname;
+		menu.SN1D = SND;
+	  scanMac();
+		
   }
   if(S2bd!=0xFFFF)
   {
 	  L2bd=true;
+
+		menu.SN2 = SNconn;//AT+CONN=*********\r\n
+		menu.SN2F = SNF;//+CONNECTED:0,101000000010
+		menu.SN2name = SNname;
+		menu.SN2D = SND;
+	  scanMac();
   }
   if(S3bd!=0xFFFF)
   {
 	  L3bd=true;
+		menu.SN3 = SNconn;//AT+CONN=*********\r\n
+		menu.SN3F = SNF;//+CONNECTED:0,101000000010
+		menu.SN3name = SNname;
+		menu.SN3D = SND;
+	  scanMac();
   }
   if(S4bd!=0xFFFF)
   {
 	  L4bd=true;
+		menu.SN4 = SNconn;//AT+CONN=*********\r\n
+		menu.SN4F = SNF;//+CONNECTED:0,101000000010
+		menu.SN4name = SNname;
+		menu.SN4D = SND;
+	  scanMac();
+	  
   }
   
   if(S1LS==0xFFFFFFFF)
@@ -258,6 +326,70 @@ void readLockStatusinit(void)
   S2 = read_flash_16(Sn2StatusAddr);
   S3 = read_flash_16(Sn3StatusAddr);
   S4 = read_flash_16(Sn4StatusAddr);
+  if(S1==0x2222)
+  {
+	  menu.S1sjf = 0x01;
+	  tt808.L1Lockstatus = LockStatusClose;
+  }
+  else if(S1==0x1111)
+  {
+	  menu.S1sjf = 0x00;
+	  tt808.L1Lockstatus = LockStatusOpen;
+  }
+  else
+  {
+	  menu.S1sjf=0xAA;
+	  tt808.L1Lockstatus = LockStatusNull;
+  }
+  
+  
+  if(S2==0x2222)
+  {
+	  menu.S2sjf = 0x01;
+	  tt808.L2Lockstatus = LockStatusClose;
+  }
+  else if(S2==0x1111)
+  {
+	  menu.S2sjf = 0x00;
+	  tt808.L2Lockstatus = LockStatusOpen;
+  }
+  else
+  {
+	  menu.S2sjf=0xAA;
+	  tt808.L2Lockstatus = LockStatusNull;
+  }
+  
+  if(S3==0x2222)
+  {
+	  menu.S3sjf = 0x01;
+	  tt808.L3Lockstatus = LockStatusClose;
+  }
+  else if(S3==0x1111)
+  {
+	  menu.S3sjf = 0x00;
+	  tt808.L3Lockstatus = LockStatusOpen;
+  }
+  else
+  {
+	  menu.S3sjf=0xAA;
+	  tt808.L3Lockstatus = LockStatusNull;
+  }
+  
+  if(S4==0x2222)
+  {
+	  menu.S4sjf = 0x01;
+	  tt808.L4Lockstatus = LockStatusClose;
+  }
+  else if(S4==0x1111)
+  {
+	  menu.S4sjf = 0x00;
+	  tt808.L4Lockstatus = LockStatusOpen;
+  }
+  else
+  {
+	  menu.S4sjf=0xAA;
+	  tt808.L4Lockstatus = LockStatusNull;
+  }
   refresh=true;
 }
 

+ 25 - 5
Core/Src/mba32a.c

@@ -9,6 +9,7 @@ extern Menu_table menu;
 BtStep btstep;
 BtFrame btframe;
 bool resetBTmodule = false;
+bool btreflag = false;
 uint16_t u5length=0;
 uint16_t displayNum=0;
 uint16_t resetFlag16=0;
@@ -165,8 +166,8 @@ void MBA32A_Init(void)
 			
 	}
 
-	menu.current=0;//回到初始
-	refresh=true;
+//	menu.current=0;//回到初始
+//	refresh=true;
 
 	
 }
@@ -180,7 +181,7 @@ void MBA32A_Init(void)
   */
 void USART_SendString(UART_HandleTypeDef *huart,char *str)
 {
-	printf("\r\nAT_CMD:\t");
+	//printf("\r\nAT_CMD:\t");
 	HAL_UART_Transmit(huart, (uint8_t*)str, strlen(str), 0xFFFF);		//工作信息串口发送
     HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), 0xFFFF);		//485打印log
     //HAL_UART_Transmit(&huart3, (uint8_t*)str, strlen(str), 0xFFFF);	//TTL打印log
@@ -217,8 +218,8 @@ uint8_t sendCmd_BT(char *pCmd,char *pRes, uint32_t timeOut, uint8_t sendNum)
 	{
         time = timeOut * 10;
         USART_SendString(&huart5, pCmd);
-		HAL_Delay(30);
-		printf("------->%s",g_MBA32A_8buf_Down);
+		//HAL_Delay(30);
+		//printf("------->%s",g_MBA32A_8buf_Down);
 		
         while(time--)
 		{
@@ -454,6 +455,7 @@ void workinfo_W(void)
 }
 
 
+extern TT808 tt808;
 void open_close_lock(void)
 {
     if(menu.enter == 4 && (menu.current == 4 || menu.current == 5 || menu.current == 6 || menu.current == 7))
@@ -466,13 +468,17 @@ void open_close_lock(void)
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
+				menu.S1sjf=0x01;
 				Write_Information(Sn1StatusAddr, 0x2222);
+				tt808.L1Lockstatus = LockStatusClose;
 				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
+				menu.S1sjf=0x00;
 				Write_Information(Sn1StatusAddr, 0x1111);
+				tt808.L1Lockstatus = LockStatusOpen;
 				HAL_Delay(50);
 			}
 		}
@@ -484,13 +490,17 @@ void open_close_lock(void)
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
+				menu.S2sjf=0x01;
 				Write_Information(Sn2StatusAddr, 0x2222);
+				tt808.L2Lockstatus = LockStatusClose;
 				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
+				menu.S2sjf=0x00;
 				Write_Information(Sn2StatusAddr, 0x1111);
+				tt808.L2Lockstatus = LockStatusOpen;
 				HAL_Delay(50);
 			}
 		}	
@@ -502,13 +512,17 @@ void open_close_lock(void)
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
+				menu.S3sjf=0x01;
 				Write_Information(Sn3StatusAddr, 0x2222);
+				tt808.L3Lockstatus = LockStatusClose;
 				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
+				menu.S3sjf=0x00;
 				Write_Information(Sn3StatusAddr, 0x1111);
+				tt808.L3Lockstatus = LockStatusOpen;
 				HAL_Delay(50);
 			}
 		}
@@ -520,13 +534,17 @@ void open_close_lock(void)
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
+				menu.S4sjf=0x01;
 				Write_Information(Sn4StatusAddr, 0x2222);
+				tt808.L4Lockstatus = LockStatusClose;
 				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
+				menu.S4sjf=0x00;
 				Write_Information(Sn4StatusAddr, 0x1111);
+				tt808.L4Lockstatus = LockStatusOpen;
 				HAL_Delay(50);
 			}
 		}
@@ -573,6 +591,7 @@ uint8_t in[16] = { 0x02, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x64, 0x74, 0x75, 0x31, 0
 }
 
 void updateMenu_s(uint16_t S, uint16_t mask, uint16_t value) {
+	
     if (S == 0x1111) {
         if ((menu.home & mask) == mask) {
             menu.home = value;
@@ -582,6 +601,7 @@ void updateMenu_s(uint16_t S, uint16_t mask, uint16_t value) {
     } else if (S == 0x2222) {
         menu.home |= mask;
     }
+
 }
 
 

+ 165 - 123
Core/Src/ml307a.c

@@ -1,161 +1,172 @@
 #include "ml307a.h"
 #include "mba32a.h"
 #include "usart.h"
+#include "tt808.h"
+#include <stdlib.h>
 
-ML307AStep ml307astep;
 bool u4RecvFlag = false;
 bool ml307aFail = false;
 bool reset4Gmodule = false;
 bool module4G_F = false;
 uint8_t u4length=0;
+
+uint8_t step4g;
+Time time;
+
+bool conn4g_loc=false;
 uint8_t resetcount_4g=0;
 uint8_t g_ML307A_8buf[2048]={0}; 
+uint8_t g_ML307A_Loc[1024]={0}; 
 uint8_t g_ML307A_8buf_Down[2048]={0}; 
 uint8_t MLBSLOCcount = 0;
 extern UART_HandleTypeDef huart3;
 extern UART_HandleTypeDef huart4;
+char JD_str[13];
+char WD_str[12];
+
+char JWD_str[25];
+uint32_t JD_dw=0;
+uint32_t WD_dw=0;
+extern Menu_table menu;
+
+
 
-extern Menu_table menu;	
 void ML307AReset(void);
 uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum);
+uint8_t MQTT_PUB(uint8_t connect_id, char *topic, char *mesg, char* pRes);
 
-uint8_t ML307A_JD[13]={0}; 
-uint8_t ML307A_WD[13]={0}; 
-
+uint8_t MQTT_CONN(char *IpAddr, uint16_t port, char *ID, char *User, char *Passwd, char* pRes)
+{
+	
+	char MQTT_Sendbuf[128]; 
+	sprintf((char *)MQTT_Sendbuf,"AT+MQTTCONN=0,\"%s\",%d,\"%s\",\"%s\",\"%s\"\r\n",IpAddr, port, ID,User, Passwd);
+	if(sendCmd_4G(MQTT_Sendbuf,pRes,1,1))
+	{
+		return 1;
+	}
+	return 0;
+}
 
-void loction_4G(void);
+//"AT+MQTTPUB=0,\"world\",1,0,0,26,\"abcdefghijklmnopqrstuvwxyz\"\r\n","+MQTTURC: \"publish\",",1,1))			//QOS01 =<connect_id>,<topic>,<qos>,<retain>,<dup>,<msg_len>[,<message>]
+uint8_t MQTT_PUB(uint8_t connect_id, char *topic, char *mesg, char* pRes)
+{
+	char MQTT_Sendbuf[128]; 
+	uint8_t length = strlen(mesg);
+	sprintf((char *)MQTT_Sendbuf,"AT+MQTTPUB=%d,\"%s\",1,0,0,%d,\"%s\"\r\n",connect_id, topic, length, mesg);
+	if(sendCmd_4G(MQTT_Sendbuf,pRes,1,1))
+	{
+		return 1;
+	}
+	return 0;
+}
 /**
   * @breaf 4G初始化
   */
-void ML307A_Init(void)
+uint8_t MQTTCONNPUB(void)
 {
 	
-	printf("\t###02\t4G_init%d...\r\n",resetcount_4g); 
-	switch(ml307astep)
+	if(MQTT_CONN((char*)PCMQTTADDR,PCMQTTPORT,"",(char*)PCMQTTUSER,(char*)PCMQTTPSWD,"+MQTTURC: \"conn\",0,0"))
 	{
-		case ATOK:
-		{
-			if (sendCmd_4G("AT\r\n", "OK", 1, 2)) 
-			{
-				printf("------->%s",g_ML307A_8buf_Down);
-				printf("#4G模组正常\r\n");
-				ml307astep++;
-			}
-			else
-			{
-				ml307astep = ML307AStepReset;
-			}
-		}
-		case CFUN:
+		printf("#连接MQTT成功\r\n");
+		if(sendCmd_4G("AT+MQTTSUB=0,\"world\",1\r\n","+MQTTURC: \"suback\",",1,1))
 		{
-			if (sendCmd_4G("AT+CFUN=1\r\n", "OK", 1, 2)) 
-			{
-				printf("------->%s",g_ML307A_8buf_Down);
-				printf("#4G模组CFUN正常\r\n");
-				ml307astep++;
-			}
-			else
-			{
-				ml307astep = ML307AStepReset;
-			}
+			printf("#订阅成功");
+			conn4g_loc=true;
+			return 1;
 		}
-		case SIMH:
+	}
+	return 0;
+}
+void CONNTCP(void);
+bool tcpconn =true;
+
+uint8_t ICCID[60];
+
+
+void ML307A_Init(void)
+{
+	printf("\t###02\t4G_init...\r\n"); 
+	sendCmd_4G("+++", "OK", 1, 1);//TCP连接 0普通模式  2缓存模式 1透传模式
+	switch(step4g)
+	{
+		case 0:
 		{
-			if (sendCmd_4G("AT+MCFG=\"simhot\",1\r\n", "OK", 1, 2)) 
+			if (sendCmd_4G("AT\r\n", "OK", 1, 5)) 
 			{
-				printf("------->%s",g_ML307A_8buf_Down);
-				printf("#4G模组热插拔开启\r\n");
-				ml307astep++;
-			}
-			else
-			{
-				ml307astep = ML307AStepReset;
+				printf("#4G模组正常\r\n");
+				if (sendCmd_4G("AT+ICCID\r\n", "OK", 1, 5)) 
+				{
+					memcpy(ICCID,&U4recvBuff[10],20);
+					ICCID[20]=0x00;
+					ICCID[21]=0x01;
+				}
+				step4g++;
 			}
 		}
-		case CPIN:
+
+		case 1:
 		{
 			if (sendCmd_4G("AT+CPIN?\r\n", "+CPIN: READY", 1, 5)) 
 			{
-				printf("------->%s",g_ML307A_8buf_Down);
 				printf("#4G模组状态正常\r\n");
-				ml307astep++;
-			}
-			else
-			{
-				ml307astep = ML307AStepReset;
+				step4g++;
 			}
 		}		
-		case CEREG:
+		case 2:
 		{
-			if (sendCmd_4G("AT+CEREG?\r\n", "+CEREG: 0,1", 1, 2)) 
+			if (sendCmd_4G("AT+CEREG?\r\n", "+CEREG: 0,1", 1, 5)) 
 			{
-				printf("------->%s",g_ML307A_8buf_Down);
 				printf("#4G模组附着正常\r\n");
 				printf("#4G模组初始化完成\r\n");
-				ml307astep++;
 				
-				//break;
+				step4g++;
+
 			}	
 			else
 			{
-				ml307astep = ML307AStepReset;
+				break;
 			}
-			module4G_F=true;
-			break;
 		}	
-//		case MLB1:
-//		{
-//			if (sendCmd_4G("AT+MLBSCFG=\"method\",40\r\n", "OK", 1, 1)) 
-//			{
-//				printf("------->%s",g_ML307A_8buf_Down);
-//				ml307astep++;
-//			}
-//			else
-//			{
-//				ml307astep = ML307AStepReset;
-//			}
-//		}
-//		
-//		case MLB2:
-//		{
-//			if(!sendCmd_4G("AT+MLBSCFG=\"pid\"\r\n", "Not referenced", 1, 1))
-//			{
-//				HAL_Delay(500);
-//				printf("------->%s",g_ML307A_8buf_Down);
-//				ml307astep++;
-//				
-//			}
-//		
-//		}
-//		
-//		case MLB3:
-//		{
-//			if (sendCmd_4G("AT+MLBSCFG=\"nearbtsen\",1\r\n", "OK", 1, 1)) 
-//			{
-//				printf("------->%s",g_ML307A_8buf_Down);
-//				memset(g_ML307A_8buf_Down,0,u4length);
-//				ml307astep++;
-//			}
-//			else
-//			{
-//				ml307astep = ML307AStepReset;
-//			}
-//			module4G_F=true;
-//			break;
-//		}
-
-		
-		case ML307AStepReset:
+		case 3:
 		{
-			ml307astep = ATOK;
-			ML307AReset();
+			if(sendCmd_4G("AT+MIPCLOSE=1\r\n", "+MIPSEND:", 1, 1))//发送11BYTE  MAX1460
+			{
+				printf("#断开连接\r\n");
+			}
+
+
+
+			sendCmd_4G("AT+MLBSCFG=\"method\",40\r\n", "OK", 1, 1);//配置LBS接口为ONEos定位服务
+			sendCmd_4G("AT+MLBSCFG=\"nearbtsen\",1\r\n", "OK", 1, 1);//启动邻区信息参与定位
+				printf("#TCP连接成功\r\n");
+				if(sendCmd_4G("AT+MIPCFG=\"encoding\",1,1,1\r\n", "OK", 1, 3))//默认输入输出为ASCII,0    发16,1    接16,1
+				{
+					printf("#TCP设置完成\r\n");
+					
+				}
+			
+			if(sendCmd_4G("AT+MIPOPEN=1,\"TCP\",\"121.199.29.128\",7342,60,0\r\n", "+MIPOPEN: 1,0", 1, 3))//TCP连接 0普通模式  2缓存模式  1透传模式
+			
+			//if(sendCmd_4G("AT+MIPOPEN=1,\"TCP\",\"118.31.22.26\",8901,60,0\r\n", "+MIPOPEN: 1,0", 1, 3))//TCP连接 0普通模式  2缓存模式 1透传模式
+			//if(sendCmd_4G("AT+MIPOPEN=1,\"TCP\",\"118.31.22.26\",8901,60,2\r\n", "+MIPOPEN: 1,0", 1, 3))//TCP连接 0普通模式  2缓存模式 1透传模式
+			{
+
+					break;
+			}
+			else
+			{
+				tcpconn=false;
+			}
+
+			
 		}
-		
+
 		
 	}
 	
-//	menu.current=0;//回到初始
-//	refresh=true;
+	menu.current=0;//回到初始
+	refresh=true;	
+	module4G_F=true;
 }
 
 /**
@@ -168,10 +179,9 @@ uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum)
     for(i = 0; i < sendNum; i++)
 	{
         time = timeOut * 10;
-		memset(g_ML307A_8buf_Down,0,u4length);
+		memset(g_ML307A_8buf_Down,0,sizeof(g_ML307A_8buf_Down));
         USART_SendString(&huart4, pCmd);
-		HAL_Delay(700);
-
+		HAL_Delay(800);
         while(time--)
 		{
 			if(strstr((const char *)g_ML307A_8buf_Down, pRes) != NULL)             // 如果检索到关键词
@@ -193,6 +203,7 @@ uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum)
 */
 void ML307AReset(void)
 {
+	step4g=0;
 	reset4Gmodule=true;
 	module4G_F=false;
 	resetcount_4g+=1;
@@ -202,23 +213,54 @@ void ML307AReset(void)
 	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
 }
 
+//IP地址:183.230.40.96
+//端口号:1883
+//MQTT客户端ID:dtuv1
+//MQTT用户名:SwU99jNiWK
+//MQTT登录密码: version=2018-10-31&res=products%2FSwU99jNiWK%2Fdevices%2Fdtuv1&et=207998147912&method=md5&sign=WKSoO%2BqDTtQ1LqEklV9NUA%3D%3D
 
 
-void loction_4G(void)
+
+
+
+
+
+void Work_4Gtest(void)
 {
-	MLBSLOCcount+=1;
-	if(module4G_F)
-	{
-		//定位状态码、精度、纬度、定位精度、具体位置信息	
-		//sendCmd_4G("AT+MLBSLOC\r\n", "OK", 1, 1);
-		{//MQTT 测试
-		sendCmd_4G("AT+MQTTCFG=?\r\n", "OK", 1, 1);
-		HAL_Delay(10000);
-		printf("%s",g_ML307A_8buf_Down);
-		}
+
+	  
+{	
+//需保存的工作函数	
+	  if(sendCmd_4G("AT+MLBSLOC\r\n", "OK", 1, 1))
+	  {
+	    HAL_Delay(5000);				
+		  
+			memcpy(JD_str, &g_ML307A_8buf_Down[14], 12); 
+			memcpy(WD_str, &g_ML307A_8buf_Down[27], 11); 
+	    //printf("%s\r\n",g_ML307A_8buf_Down);
+						//调试TCP报文
+						double num;
+						double num1;
+						num = atof(JD_str);
+						num1 = atof(WD_str);
+						num = num* 1000000;
+						num1= num1* 1000000;
+						JD_dw = (uint32_t)num;
+						WD_dw = (uint32_t)num1;		
+
 		
-		//AL_Delay(5000);
-		//printf("------->%s",g_ML307A_8buf_Down);
-		memset(g_ML307A_8buf_Down,0,u4length);
-	}
+	    
+	  }
+	
+		
+}
+
+
+	  
 }
+
+
+
+extern TT808 tt808;
+
+

+ 41 - 53
Core/Src/rtc.c

@@ -31,12 +31,11 @@ void MX_RTC_Init(void)
 {
 
   /* USER CODE BEGIN RTC_Init 0 */
-		//RTC_TimeTypeDef time;   //时间结构体参数
-		RTC_DateTypeDef datebuff;   //日期结构体参数
   /* USER CODE END RTC_Init 0 */
 
-  RTC_TimeTypeDef sTime = {0};
-  RTC_DateTypeDef DateToUpdate = {0};
+//  RTC_TimeTypeDef sTime = {0};
+//  
+//  RTC_DateTypeDef DateToUpdate = {0};
 
   /* USER CODE BEGIN RTC_Init 1 */
 
@@ -55,58 +54,47 @@ void MX_RTC_Init(void)
   }
 
   /* USER CODE BEGIN Check_RTC_BKUP */
-  
-if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!= 0x5051)
-	{ 
-		
-  /* USER CODE END Check_RTC_BKUP */
-
-  /** Initialize RTC and set the Time and Date
-  */
-  sTime.Hours = 0x13;
-  sTime.Minutes = 0x0;
-  sTime.Seconds = 0x0;
 
-  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  DateToUpdate.WeekDay = RTC_WEEKDAY_THURSDAY;
-  DateToUpdate.Month = RTC_MONTH_JANUARY;
-  DateToUpdate.Date = 0x18;
-  DateToUpdate.Year = 0x23;
+  /* USER CODE END Check_RTC_BKUP */
 
-  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
-  {
-    Error_Handler();
-  }
   /* USER CODE BEGIN RTC_Init 2 */
-  
-	__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC);	 //开启RTC时钟秒中断
-	datebuff = DateToUpdate;  //把日期数据拷贝到自己定义的data中
-	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0x5051);//向指定的后备区域寄存器写入数据
-	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR2, (uint16_t)datebuff.Year);
-	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR3, (uint16_t)datebuff.Month);
-	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR4, (uint16_t)datebuff.Date);
-	HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR5, (uint16_t)datebuff.WeekDay);
-	
-  }
-	else
-	{ 
-   
-		datebuff.Year    = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR2);
-		datebuff.Month   = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR3);
-		datebuff.Date    = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR4);
-		datebuff.WeekDay = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR5);
-		DateToUpdate = datebuff;
-		if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN) != HAL_OK)
-		{ 
-   
-			Error_Handler();
-		}
-		__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC);	 //开启RTC时钟秒中断 
-	}
-	
+//		case 3:
+//		{
+//			if (sendCmd_4G("AT+CCLK?\r\n", "OK", 1, 1)) 
+//			{
+//				
+//				memcpy(year_str, &g_ML307A_8buf_Down[8], 2); // 复制两个字符
+//				memcpy(month_str, &g_ML307A_8buf_Down[11], 2); 
+//				memcpy(day_str, &g_ML307A_8buf_Down[14], 2); 
+//				memcpy(hour_str, &g_ML307A_8buf_Down[17], 2);
+//				memcpy(minute_str, &g_ML307A_8buf_Down[20], 2);
+//				memcpy(second_str, &g_ML307A_8buf_Down[23], 2);
+//				
+//				year_str[2] = '\0'; // 添加空字符结束符
+//				month_str[2] = '\0';
+//				day_str[2] = '\0'; 
+//				hour_str[2] = '\0'; 
+//				minute_str[2] = '\0';
+//				second_str[2] = '\0';
+//				
+//				time.year = (uint8_t)atoi(year_str); // 使用atoi函数将字符转换为数字并赋值给time.year
+//				time.month = (uint8_t)atoi(month_str); 
+//				time.day = (uint8_t)atoi(day_str);
+//				time.hour = (uint8_t)atoi(hour_str)+8;
+//				time.minute = (uint8_t)atoi(minute_str);
+//				time.second = (uint8_t)atoi(second_str);
+//				
+//				printf("#year:  %02d\r\n",time.year);
+//				printf("#month: %02d\r\n",time.month);
+//				printf("#day:   %02d\r\n",time.day);
+//				printf("#hour:  %02d\r\n",time.hour);
+//				printf("#minute:%02d\r\n",time.minute);
+//				printf("#second:%02d\r\n",time.second);
+//				
+//				
+//				step4g++;
+//			}
+//		}
 	
 	
 	

+ 26 - 20
Core/Src/stm32f1xx_it.c

@@ -380,7 +380,25 @@ void TIM3_IRQHandler(void)
 void USART1_IRQHandler(void)
 {
   /* USER CODE BEGIN USART1_IRQn 0 */
-
+	uint32_t tmpFlag = 0;
+	uint32_t temp;
+	tmpFlag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE); //获取IDLE标志位
+	if((tmpFlag != RESET))//idle标志被置位
+	{ 
+		__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除标志位
+		HAL_UART_DMAStop(&huart1); 
+		temp  =  __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);// 获取DMA中未传输的数据个数   
+		U1recvLength  =  BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
+	
+		U1reFlag = 1;//清除接收结束标志位
+		
+//		HAL_UART_Transmit_DMA(&huart1, U1recvBuff, U1recvLength);
+//		U1recvLength = 0;//清除计数
+//		U1reFlag = 0;//清除接收结束标志位
+//		memset(U1recvBuff,0,U1recvLength);
+		
+		HAL_UART_Receive_DMA(&huart1, U1recvBuff, BUFFER_SIZE);//重新打开DMA接收,不然只能接收一次数据
+	 }
   /* USER CODE END USART1_IRQn 0 */
   HAL_UART_IRQHandler(&huart1);
   /* USER CODE BEGIN USART1_IRQn 1 */
@@ -431,32 +449,18 @@ void UART4_IRQHandler(void)
 		__HAL_UART_CLEAR_IDLEFLAG(&huart4);					//清除标志位
 		HAL_UART_DMAStop(&huart4); 
 		temp  =  __HAL_DMA_GET_COUNTER(&hdma_uart4_rx);		// 获取DMA中未传输的数据个数   
-		recvLength  =  2048 - temp - 2; 	//-2>去掉\r\n		//总计数减去未传输的数据个数,得到已经接收的数据个数
+		recvLength  =  BUFFER_SIZE - temp - 2; 	//-2>去掉\r\n		//总计数减去未传输的数据个数,得到已经接收的数据个数
 		u4RecvFlag = true;
 		u4length = recvLength;
 		
 		memset(g_ML307A_8buf,0,1024);
 		memset(g_ML307A_8buf_Down,0,1024);
 
+	
+		memcpy(g_ML307A_8buf, &U4recvBuff[2], recvLength);	
+		memcpy(g_ML307A_8buf_Down, g_ML307A_8buf, recvLength);	
 		
-//		if(module4G_F)
-//		{
-//			//memcpy(g_ML307A_8buf_Down, &recvBuff[16], 24);	
-//		}
-//		else
-//		{
-//			memcpy(g_ML307A_8buf, &recvBuff[2], recvLength);	
-//			memcpy(g_ML307A_8buf_Down, g_ML307A_8buf, recvLength);	
-//		}
-		
-			memcpy(g_ML307A_8buf, recvBuff, recvLength);	
-			memcpy(g_ML307A_8buf_Down, g_ML307A_8buf, recvLength);	
-		
-		
-		
-		//memset(g_ML307A_8buf,0,recvLength);
-		//memcpy(g_ML307A_8buf_Down,  &recvBuff[2], recvLength);	
-		HAL_UART_Receive_DMA(&huart4, recvBuff, 2048);		//重新打开DMA接收,不然只能接收一次数据
+		HAL_UART_Receive_DMA(&huart4, U4recvBuff, BUFFER_SIZE);		//重新打开DMA接收,不然只能接收一次数据
 	 }
 
 	
@@ -497,6 +501,8 @@ void UART5_IRQHandler(void)
 		{
 			g_MBA32A_8buf_Down[i] = g_MBA32A_8buf[i];
 		}
+		btreflag = true;
+		
     }
   /* USER CODE END UART5_IRQn 0 */
   HAL_UART_IRQHandler(&huart5);

+ 924 - 0
Core/Src/tt808.c

@@ -0,0 +1,924 @@
+#include "tt808.h"
+#include "usart.h"
+#include <stdint.h>
+
+#include <stdlib.h>
+
+//BYTE 	uint8_t
+//WORD 	uint16_t
+//DWORD uint32_t
+TT808 tt808;
+TCPCenterD tcpd;
+TCPClientD tcpc;
+
+uint16_t TCPCenterdatelength=0;//数据中心下行长度
+
+void newpacket(uint8_t *head,uint8_t *body,uint8_t outarr[]);
+void packageData(uint8_t flag, uint8_t *head, uint8_t *body, size_t bodylength, uint8_t *escaped_data, size_t *new_length);
+void tt808test(uint8_t* Bodyxxt, size_t bodylength, uint8_t XXLSH);
+//		发送一包内容为0x30 0x7e 0x08 0x7d 0x55的数据包,则经过封装如下:0x7e 0x30 0x7d 0x02 0x08 0x7d 0x01 0x55 0x7e
+
+
+/**消息结构
+ *				标识位		消息头		消息体		校验码		标识位
+ *				0x7e		11BYTE		MORE		1BYTE		0x7e
+ *
+ */
+
+/**消息头
+ *		
+ *			   消息ID(WORD)	   消息体属性(WORD)				    终端ID(BCD[6])						消息流水号(WORD)
+ *				(0		1)		(2		3)		  (4		5		6		7		8		9)		(10		11)
+ */
+
+
+/**消息体属性
+ *		
+ *			  								消息体长度											 数据加密方式			   分包			  保留
+ *				(0		1		2		3	  4		5		6		7		8		9)		(10		11		12)		13		(14		15)
+ */
+
+//		校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节。
+void printBinary(uint16_t num) {
+    for (int i = 15; i >= 0; i--) {
+        if (num & (1u << i)) {
+            printf("1");
+        } else {
+            printf("0");
+        }
+    }
+    printf("\n");
+}
+
+
+typedef struct Node {
+    uint8_t data;
+    struct Node* next;
+} Node;
+Node* createNode(uint8_t value) {
+    Node* newNode = (Node*)malloc(sizeof(Node));
+    newNode->data = value;
+    newNode->next = NULL;
+    return newNode;
+}
+void insertAfter(Node* prevNode, uint8_t value) {
+    Node* newNode = createNode(value);
+    newNode->next = prevNode->next;
+    prevNode->next = newNode;
+}
+
+
+uint8_t escaped_data[100];  // 定义足够大的数组存储转义后的数据
+
+void escape_data(uint8_t* input, int length, uint8_t* escaped_data, size_t* new_length) {
+    *new_length = 0;
+    Node* head = createNode(input[0]);  // 创建链表头节点
+    Node* current = head;
+    escaped_data[(*new_length)++] = input[0];  // 将第一个数据直接存入
+    for (int i = 1; i < length; i++) {
+        if (input[i] == 0x7E && (i != length - 1)) {
+            escaped_data[(*new_length)++] = 0x7D;
+            escaped_data[(*new_length)++] = 0x02;
+        } 
+        else if (input[i] == 0x7D) {
+            escaped_data[(*new_length)++] = 0x7D;
+            escaped_data[(*new_length)++] = 0x01;
+        } 
+        else {
+            escaped_data[(*new_length)++] = input[i];
+        }
+    }
+    
+    // 释放链表内存
+    current = head;
+    Node* temp;
+    while (current != NULL) {
+        temp = current;
+        current = current->next;
+        free(temp);
+    }
+}
+//uint8_t escaped_data[100];  // 假设足够大来存储转义后的数据
+size_t new_length = 0;
+// 数据封装函数
+void packageData(uint8_t flag, uint8_t *head, uint8_t *body, size_t bodylength, uint8_t *escaped_data, size_t *new_length)
+{
+    // Calculate total length
+    uint8_t len = 1 + 12 + bodylength + 1 + 1; // 1 byte for flag + 10 bytes for header + body length + 1 byte for checksum + 1 byte for flag
+    uint8_t checksum = 0;   // Initialize checksum
+    
+    // Calculate checksum from message header
+    for (int i = 0; i < 12; i++) {
+        checksum ^= head[i];
+    }
+    
+    for (int i = 0; i < bodylength; i++) {
+        checksum ^= body[i];
+    }	
+    
+    // Start building the packet
+    uint8_t packet[len];
+    int index = 0;
+    packet[index++] = flag;  // Set the flag
+    // Copy message header to packet
+    for (int i = 0; i < 12; i++) {
+        packet[index++] = head[i];
+    }
+    // Copy message body to packet
+    for (size_t i = 0; i < bodylength; i++) {
+        packet[index++] = body[i];
+    }
+    packet[index++] = checksum;  // Set the checksum
+    packet[index++] = flag;      // Set the flag at the end
+    
+    int packetlength = (sizeof(packet)/sizeof(packet[0]));
+    // 执行转义处理
+    escape_data(packet, packetlength, escaped_data, new_length);
+    // 输出转义后的数据
+//    for (int i = 0; i < *new_length; i++) {
+//        printf("%02X ", escaped_data[i]);
+//    }
+//    printf("\n");
+	
+//		char TCPvalue[128];
+//		char *ptr = TCPvalue;
+//		ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",sizeof(escaped_data));
+//		for (int i = 0; i < sizeof(escaped_data); i++) {
+//			ptr += sprintf(ptr, "%02X", escaped_data[i]);
+//		}
+//		sprintf(ptr, "\"\r\n");//TCPvalue
+//		if(sendCmd_4G(TCPvalue, "+MIPSEND:", 1, 3))//发送11BYTE  MAX1460
+//		//if(sendCmd_4G("AT+MIPSEND=1,11,\"12345678900\"\r\n", "+MIPSEND:", 1, 3))//发送11BYTE  MAX1460
+//		{
+//			printf("#发送完成\r\n");
+//		}
+//	memset(cmd_replyArray,0,sizeof(cmd_replyArray));
+//	memcpy(cmd_replyArray,escaped_data,*new_length);
+}
+
+	
+
+
+void reCenter(void);
+uint16_t xxid =0 ;
+uint8_t BusinessData[256] = {0}; // 定义业务数据数组
+uint8_t TCPCenterCrc=0;
+
+/**
+  * @breaf 目前监测 U1485标志位 0x7E 0x2A 0x23 0x7E
+  */
+bool U4re =false;
+bool newmac=false;
+void TCPCenterDownward(void)//信息处理
+{
+	//MIPurc1
+	
+	/*测试 由485执行*/ //7E 1235  0000 647475303031 0001 252A 1532 64747531 02 00000000000000000402 101000000003 03 01108026 081010164318 23 1234 7E
+/*
+	xxid = U1recvBuff[1]<<8 | U1recvBuff[2];
+	
+	if (U1reFlag && U1recvBuff[0] == TT808FLAG && U1recvBuff[14] == TCPHeadBYTE && U1recvBuff[49] == TCPTAILBYTE && U1recvBuff[52] == TT808FLAG && (xxid==XXIDzdy ||xxid==XXIDxfMac1|| xxid==XXIDxfMac2||xxid==XXIDxfMac3||xxid==XXIDxfMac4)) // 业务头尾 下发MAC1
+	{
+		U1reFlag = 0;
+		TCPCenterdatelength = U1recvBuff[13]+1;//长度+1(7E)
+		
+		//HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53);	//TEST
+		
+		
+		
+		// 将业务数据存入BusinessData数组中
+		if(U1recvLength-15==TCPCenterdatelength)//消息包长度
+		{
+			//HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53);	//TEST 问询53B
+			//crc测试暂时不用
+			//TCPCenterCrc = xorBytes(&U1recvBuff[1],TCPCenterdatelength-1);
+			tcpd.crc = U1recvBuff[TCPCenterdatelength+12];//50
+			tcpd.Tcrc = U1recvBuff[TCPCenterdatelength+13];//51
+//			if(tcpd.crc == TCPCenterCrc)
+//			{
+				
+				tcpd.Xxid = (U1recvBuff[1] << 8) | U1recvBuff[2];
+				tcpd.Xxtsx = (U1recvBuff[3] << 8) | U1recvBuff[4];
+				for(int i = 0; i < 6; i++){
+					tcpd.CidNum[i] = U1recvBuff[5 + i];
+				}
+				tcpd.Xxlsh = (U1recvBuff[11] << 8) | U1recvBuff[12];
+			
+			
+			
+			
+				tcpd.workcmd = U1recvBuff[15];
+				tcpd.Cmd = U1recvBuff[16];
+				tcpd.LockID = (U1recvBuff[17] << 24) | (U1recvBuff[18] << 16) | (U1recvBuff[19] << 8) | U1recvBuff[20];
+				tcpd.Gate = U1recvBuff[21];
+				for(int i = 0; i < 8; i++){
+					tcpd.Bill[i] = U1recvBuff[22 + i];
+				}
+				tcpd.LineCode = (U1recvBuff[30] << 8) | U1recvBuff[31];
+				for(int i = 0; i < 6; i++){
+					tcpd.Key[i] = U1recvBuff[32 + i];//KEY暂存mac号
+				}
+				
+				tcpd.VaildTime = U1recvBuff[38];
+				tcpd.standby = (U1recvBuff[39] << 24) | (U1recvBuff[40] << 16) | (U1recvBuff[41] << 8) | U1recvBuff[42];
+				for(int i = 0; i < 6; i++){
+					tcpd.Time[i] = U1recvBuff[43 + i];
+				}
+				
+				U4re=true;
+				newmac=true;
+//			}
+
+		}
+	}
+
+
+*/
+
+/*参考
+	xxid = MIPurc1[1]<<8 | MIPurc1[2];
+	
+	if (u4RecvFlag && MIPurc1[0] == TT808FLAG && MIPurc1[14] == TCPHeadBYTE && MIPurc1[49] == TCPTAILBYTE && MIPurc1[52] == TT808FLAG && (xxid==XXIDzdy ||xxid==XXIDxfMac1|| xxid==XXIDxfMac2||xxid==XXIDxfMac3||xxid==XXIDxfMac4)) // 业务头尾
+	{
+		u4RecvFlag = 0;
+		TCPCenterdatelength = MIPurc1[13]+1;//长度+1(7E)
+		
+		//HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53);	//TEST
+		
+		
+		
+		// 将业务数据存入BusinessData数组中
+		if(u4length-15==TCPCenterdatelength)//消息包长度
+		{
+			//HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53);	//TEST 问询53B
+			//crc测试暂时不用
+			//TCPCenterCrc = xorBytes(&U1recvBuff[1],TCPCenterdatelength-1);
+			tcpd.crc = MIPurc1[TCPCenterdatelength+12];//50
+			tcpd.Tcrc = MIPurc1[TCPCenterdatelength+13];//51
+//			if(tcpd.crc == TCPCenterCrc)
+//			{
+				
+				tcpd.Xxid = (MIPurc1[1] << 8) | MIPurc1[2];
+				tcpd.Xxtsx = (MIPurc1[3] << 8) | MIPurc1[4];
+				for(int i = 0; i < 6; i++){
+					tcpd.CidNum[i] = MIPurc1[5 + i];
+				}
+				tcpd.Xxlsh = (MIPurc1[11] << 8) | MIPurc1[12];
+			
+			
+			
+			
+				tcpd.workcmd = MIPurc1[15];
+				tcpd.Cmd = MIPurc1[16];//30 问询  32远程施封  38远程解封
+				tcpd.LockID = (MIPurc1[17] << 24) | (MIPurc1[18] << 16) | (MIPurc1[19] << 8) | MIPurc1[20];
+				tcpd.Gate = MIPurc1[21];
+				for(int i = 0; i < 8; i++){
+					tcpd.Bill[i] = MIPurc1[22 + i];
+				}
+				tcpd.LineCode = (MIPurc1[30] << 8) | MIPurc1[31];
+				for(int i = 0; i < 6; i++){
+					tcpd.Key[i] = MIPurc1[32 + i];
+				}
+				
+				tcpd.VaildTime = MIPurc1[38];
+				
+				tcpd.standby = (MIPurc1[39] << 24) | (MIPurc1[40] << 16) | (MIPurc1[41] << 8) | MIPurc1[42];
+				for(int i = 0; i < 6; i++){
+					tcpd.Time[i] = MIPurc1[43 + i];
+				}
+				
+				tcpc.Gate = 0x00;
+				U4re=true;
+//			}
+
+		}
+	}
+
+*/
+
+
+
+
+}
+bool genghaunmac =true;
+
+extern Menu_table menu;
+void newMacchange(void)
+{
+	//conn				AT+CONN=101000000010\r\n
+	//connected			+CONNECTED:0,101000000010
+	//dis				+DISCONN:0,101000000010
+	//snnum				0010
+	
+		uint16_t mac = (tcpd.Key[4] << 8) | tcpd.Key[5];
+		char SNconn[50];
+		char *ptr = SNconn;
+		ptr += sprintf(ptr, "AT+CONN=");
+		for (int i = 0; i < 6; i++) {
+			ptr += sprintf(ptr, "%02X", tcpd.Key[i]);
+		}
+		sprintf(ptr, "\r\n");//TCPvalue
+		
+		char SNF[50];
+		char *ptr1 = SNF;
+		ptr1 += sprintf(ptr1, "+CONNECTED:0,");
+		for (int i = 0; i < 6; i++) {
+			ptr1 += sprintf(ptr1, "%02X", tcpd.Key[i]);
+		}
+		//sprintf(ptr, "\r\n");//TCPvalue
+		
+		
+		char SNname[2];
+		char *ptr2 = SNname;
+		for (int i = 4; i < 6; i++) {
+			ptr2 += sprintf(ptr2, "%02X", tcpd.Key[i]);
+		}
+		//sprintf(ptr, "\r\n");//TCPvalue		
+		
+		char SND[50];
+		char *ptr3 = SND;
+		ptr3 += sprintf(ptr3, "+DISCONN:0,");
+		for (int i = 0; i < 6; i++) {
+			ptr3 += sprintf(ptr3, "%02X", tcpd.Key[i]);
+		}
+		
+	if(xxid==0x1234)
+	{
+		
+	  //scanMac();
+	}
+	else if(xxid==0x1235)//M1
+	{
+		//xxid=0;
+		
+		
+		menu.SN1name=NULL;
+		menu.SN1=NULL;
+		menu.SN1F=NULL;
+		menu.SN1D=NULL;
+		erase_flash(Sn1StatusAddr);
+		erase_flash(Sn1Addr);
+		erase_flash(serialNum1Addr);
+		
+		
+		menu.SN1 = SNconn;//AT+CONN=*********\r\n
+		menu.SN1F = SNF;//+CONNECTED:0,101000000010
+		menu.SN1name = SNname;
+		menu.SN1D = SND;
+		Write_Information(Sn1Addr, mac);
+		//refresh=true;
+		tcpc.Gate = 0x01;
+		xxid=0;
+	
+		menu.home&=0x0<<3;
+	  //scanMac();
+	  genghaunmac=true;
+		
+	}
+	else if(xxid==0x1236)//M2
+	{
+		
+		menu.SN2name=NULL;
+		menu.SN2=NULL;
+		menu.SN2F=NULL;
+		menu.SN2D=NULL;
+		erase_flash(Sn2StatusAddr);
+		erase_flash(Sn2Addr);
+		erase_flash(serialNum2Addr);
+		
+		menu.SN2 = SNconn;//AT+CONN=*********\r\n
+		menu.SN2F = SNF;//+CONNECTED:0,101000000010
+		menu.SN2name = SNname;
+		menu.SN2D = SND;
+		Write_Information(Sn2Addr, mac);
+		//refresh=true;
+		tcpc.Gate = 0x01;
+		xxid=0;
+		
+	menu.home&=0x0<<2;
+	  genghaunmac=true;
+	  //scanMac();
+	}	
+	else if(xxid==0x1237)//M3
+	{
+
+		menu.SN3name=NULL;
+		menu.SN3=NULL;
+		menu.SN3F=NULL;
+		menu.SN3D=NULL;
+		erase_flash(Sn3StatusAddr);
+		erase_flash(Sn3Addr);
+		erase_flash(serialNum3Addr);
+		
+		
+		menu.SN3 = SNconn;//AT+CONN=*********\r\n
+		menu.SN3F = SNF;//+CONNECTED:0,101000000010
+		menu.SN3name = SNname;
+		menu.SN3D = SND;
+		Write_Information(Sn3Addr, mac);
+		//refresh=true;
+		tcpc.Gate = 0x01;
+		xxid=0;
+		
+		menu.home&=0x0<<1;
+	  genghaunmac=true;
+	  //scanMac();
+	}		
+	else if(xxid==0x1238)//M4
+	{
+
+		menu.SN4name=NULL;
+		menu.SN4=NULL;
+		menu.SN4F=NULL;
+		menu.SN4D=NULL;
+		erase_flash(Sn4StatusAddr);
+		erase_flash(Sn4Addr);
+		erase_flash(serialNum4Addr);
+		
+		menu.SN4 = SNconn;//AT+CONN=*********\r\n
+		menu.SN4F = SNF;//+CONNECTED:0,101000000010
+		menu.SN4name = SNname;
+		menu.SN4D = SND;
+		Write_Information(Sn4Addr, mac);
+		//refresh=true;
+		tcpc.Gate = 0x01;
+		xxid=0;
+		
+	menu.home &= 0x0;
+	  genghaunmac=true;
+	  //scanMac();
+	}		
+	
+	
+}
+uint8_t hext[256]={0};
+
+uint8_t cmd_replyArray[] = {0};
+uint32_t DTUID=0x64747531;
+uint16_t length;
+void wsj(void);
+extern Time time;
+void tcphuifu(void);
+
+int tcpdataLength = 0;
+void wjwd(void);
+
+void replyCenter(void)
+{
+	U4re=false;
+	if(tcpd.Cmd==0x30 || tcpd.Cmd==0x32 || tcpd.Cmd==0x38)
+	{
+		wsj();//闻讯时间
+		HAL_Delay(100);
+		//wjwd();
+		//HAL_Delay(100);
+		
+		tcpc.workcmd = tcpd.workcmd;//终端回复
+		tcpc.Cmd = tcpd.Cmd;
+		//64 74 75 31 dtu1
+		tcpc.LockID = ((DTUID << 24)&0xff) | ((DTUID << 16)&0xff) | ((DTUID << 8)&0xff) | DTUID;
+		//tcpc.Gate = 0x00;//待传入
+		
+		/* 载货清单 */
+
+		tcpc.Bill[0] = (JD_dw>>24)&0xff;//待传入
+		tcpc.Bill[1] = (JD_dw>>16)&0xff;//待传入
+		tcpc.Bill[2] = (JD_dw>>8)&0xff;//待传入
+		tcpc.Bill[3] = (JD_dw)&0xff;//待传入
+		tcpc.Bill[4] = (WD_dw>>24)&0xff;//待传入
+		tcpc.Bill[5] = (WD_dw>>16)&0xff;//待传入
+		tcpc.Bill[6] = (WD_dw>>8)&0xff;//待传入
+		tcpc.Bill[7] = (WD_dw)&0xff;//待传入
+		/* 电压 */		
+		tcpc.Voltage = 0x00;//待传入
+		
+		if(tcpc.Cmd==0x32)//施封
+		{
+			if(tcpd.VaildTime==0x01)//锁1施封
+			{
+				
+			}
+			if(tcpd.VaildTime==0x02)//锁2施封
+			{
+				
+			}
+			if(tcpd.VaildTime==0x03)//锁3施封
+			{
+				
+			}
+			if(tcpd.VaildTime==0x04)//锁4施封
+			{
+				
+			}
+		}
+		
+		if(tcpc.Cmd==0x38)//解封
+		{
+			if(tcpd.VaildTime==0x01)//锁1解封
+			{
+				
+			}
+			if(tcpd.VaildTime==0x02)//锁2解封
+			{
+				
+			}
+			if(tcpd.VaildTime==0x03)//锁3解封
+			{
+				
+			}
+			if(tcpd.VaildTime==0x04)//锁4解封
+			{
+				
+			}
+		}	
+		/* 锁状态 */
+		//tcpc.LockStatus = 0xAA;//待传入
+		tcpc.LockStatus = tt808.L1Lockstatus;
+		/* 电机状态 */
+		//tcpc.MotoStatus = 0x00;//待传入
+		tcpc.MotoStatus = tt808.L2Lockstatus;
+		/* 线路编号 */
+		tcpc.LineCode =  ((uint16_t)tt808.L3Lockstatus << 8) | tt808.L4Lockstatus;//待传入
+
+		
+//		/* 操作标识码 */
+
+		tcpc.OperationIdNum[0] = 0x00;//待传入
+		tcpc.OperationIdNum[1] = 0x00;//待传入
+		tcpc.OperationIdNum[2] = 0x00;//待传入
+		tcpc.OperationIdNum[3] = 0x00;//待传入
+		tcpc.OperationIdNum[4] = 0x00;//待传入
+		tcpc.OperationIdNum[5] = 0x00;//待传入
+		tcpc.OperationIdNum[6] = 0x00;//待传入
+		tcpc.OperationIdNum[7] = 0x00;//待传入
+		/* 设备标识码 */
+		tcpc.cmdSRC = 0x0F;//dtu设备
+		
+		/* 下发命令时间 */
+		tcpc.Time[0] = time.year;
+		tcpc.Time[1] = time.month;
+		tcpc.Time[2] = time.day;
+		tcpc.Time[3] = time.hour;
+		tcpc.Time[4] = time.minute;
+		tcpc.Time[5] = time.second;
+		
+		
+		//***
+		cmd_replyArray[1]=TCPHeadBYTE;
+		cmd_replyArray[2]=tcpc.workcmd;
+		cmd_replyArray[3]=tcpc.Cmd;
+		cmd_replyArray[4]=(tcpc.LockID>>24)&0xff;
+		cmd_replyArray[5]=(tcpc.LockID>>16)&0xff;
+		cmd_replyArray[6]=(tcpc.LockID>>8)&0xff;
+		cmd_replyArray[7]=(tcpc.LockID)&0xff;
+		cmd_replyArray[8]=tcpc.Gate;
+		memcpy(&cmd_replyArray[9],tcpc.Bill,8);
+		cmd_replyArray[17]=tcpc.Voltage;
+		cmd_replyArray[18]=tcpc.LockStatus;
+		cmd_replyArray[19]=tcpc.MotoStatus;
+		cmd_replyArray[20]=(tcpc.LineCode>>8)&0xff;
+		cmd_replyArray[21]=(tcpc.LineCode)&0xff;
+		memcpy(&cmd_replyArray[22],tcpc.OperationIdNum,8);
+		cmd_replyArray[30]=tcpc.cmdSRC;
+		memcpy(&cmd_replyArray[31],tcpc.Time,6);
+		
+		cmd_replyArray[0]=sizeof(cmd_replyArray)-1;
+		cmd_replyArray[37]=TCPTAILBYTE;
+		cmd_replyArray[38]=xorBytes(&cmd_replyArray[1],37);//第2字节开始校验
+		
+		tcpdataLength = sizeof(cmd_replyArray) / sizeof(cmd_replyArray[0]);
+	
+	
+		
+		tcphuifu();
+	}
+	
+	
+}
+
+uint8_t MIPurc[256];
+uint8_t MIPurc1[256];
+
+
+uint8_t MIPurcXXTCSJ[256];//平台下行透传数据
+bool MIPurcReFlag = false;
+uint16_t hccd = 0;
+
+char high[]={0};
+bool chuliSJ = false;
+
+
+char hex2asc(const char *hex)
+{
+	char asc = 0;
+	char a = (hex[0]>='A' && hex[0]<='F')?(hex[0]^32):hex[0];
+	char b = (hex[1]>='A' && hex[1]<='F')?(hex[1]^32):hex[1];
+	if ((a>='0' && a<='9' || a>='a' && a<='f') && (b>='0' && b<='9' || b>='a' && b<='f')){
+		asc = ((('a'<=a && a<='f')?(a-'a')+10:a-'0')<<4)|(('a'<=b && b<='f')?(b-'a')+10:b-'0');
+	}
+	return asc;
+}
+
+char *bin2hex(char *hex, const unsigned char *bin, int size)
+{
+	size_t i;
+	for(i=0; i<size; i++)
+	{
+		sprintf(hex+i*2, "%02x", bin[i]);
+	}
+	hex[i+i] = 0;
+	return hex;
+}
+
+int hex2bin(unsigned char *bin, const char *hex)
+{
+	const char *h = hex;
+	unsigned char *b = bin;
+	int rlt = 0;
+	while(*h){
+		*b++ = hex2asc(h);
+		h = h + 2;
+		rlt++;
+	}
+	return rlt;//长度
+}
+
+
+int rlt;
+
+
+
+
+
+
+char year_str[3];
+char month_str[3];
+char day_str[3]; 
+char hour_str[3]; 
+char minute_str[3];
+char second_str[3];
+void wsj(void)
+{
+	if (sendCmd_4G("AT+CCLK?\r\n", "OK", 1, 1)) 
+	{
+		
+		memcpy(year_str, &g_ML307A_8buf_Down[8], 2); // 复制两个字符
+		memcpy(month_str, &g_ML307A_8buf_Down[11], 2); 
+		memcpy(day_str, &g_ML307A_8buf_Down[14], 2); 
+		memcpy(hour_str, &g_ML307A_8buf_Down[17], 2);
+		memcpy(minute_str, &g_ML307A_8buf_Down[20], 2);
+		memcpy(second_str, &g_ML307A_8buf_Down[23], 2);
+		
+		year_str[2] = '\0'; // 添加空字符结束符
+		month_str[2] = '\0';
+		day_str[2] = '\0'; 
+		hour_str[2] = '\0'; 
+		minute_str[2] = '\0';
+		second_str[2] = '\0';
+		
+		time.year = (uint8_t)atoi(year_str); // 使用atoi函数将字符转换为数字并赋值给time.year
+		time.month = (uint8_t)atoi(month_str); 
+		time.day = (uint8_t)atoi(day_str);
+		time.hour = (uint8_t)atoi(hour_str)+8;
+		time.minute = (uint8_t)atoi(minute_str);
+		time.second = (uint8_t)atoi(second_str);
+	}
+}
+
+
+uint8_t tcpoutarr[]={0};	
+uint8_t header[12];
+void tcphuifu(void)
+{
+	if(!tcpconn)
+	{
+		if(sendCmd_4G("AT+MIPCLOSE=1\r\n", "+MIPSEND:", 1, 1))//发送11BYTE  MAX1460
+		{
+			printf("#断开连接\r\n");
+		}
+		if(sendCmd_4G("AT+MIPOPEN=1,\"TCP\",\"118.31.22.26\",8901,60,0\r\n", "+MIPOPEN: 1,0", 1, 3))//TCP连接
+		{
+			printf("#TCP连接成功\r\n");
+			if(sendCmd_4G("AT+MIPCFG=\"encoding\",1,1,1\r\n", "OK", 1, 3))//默认输入输出为ASCII,0    发16,1    接16,1
+			{
+				printf("#TCP设置完成\r\n");
+				tcpconn=true;
+			}
+		}
+	}
+
+		module4G_F=false;
+		uint16_t XXTSXdata = tcpdataLength;
+		uint8_t checksum = 0;   // Initialize checksum
+	
+		//XXTSXdata |= ( tcpdataLength | (TCPJMFSRSA<<10)); // 将长度左移3位后和加密方式进行按位或操作(001 RSA ,000 无加密)
+		XXTSXdata |= ( tcpdataLength | (TCPJMFSNULL<<10)); // 将长度左移3位后和加密方式进行按位或操作(001 RSA ,000 无加密)
+		
+		if(xxid == XXIDzdy)
+		{
+			//xxid=0;
+			header[0] 	= ((XXIDzdy>>8)&0xff);
+			header[1] 	= (XXIDzdy&0xff);
+		}
+		
+		if(xxid == XXIDxfMac1)
+		{
+			//xxid=0;
+			header[0] 	= ((XXIDxfMac1>>8)&0xff);
+			header[1] 	= (XXIDxfMac1&0xff);
+		}		
+		if(xxid == XXIDxfMac2)
+		{
+			//xxid=0;
+			header[0] 	= ((XXIDxfMac2>>8)&0xff);
+			header[1] 	= (XXIDxfMac2&0xff);
+		}	
+		if(xxid == XXIDxfMac3)
+		{
+			//xxid=0;
+			header[0] 	= ((XXIDxfMac3>>8)&0xff);
+			header[1] 	= (XXIDxfMac3&0xff);
+		}	
+		if(xxid == XXIDxfMac4)
+		{
+			//xxid=0;
+			header[0] 	= ((XXIDxfMac4>>8)&0xff);
+			header[1] 	= (XXIDxfMac4&0xff);
+		}
+		
+		
+		
+			header[2] 	= ((XXTSXdata>>8)&0xff);
+			header[3] 	= (XXTSXdata&0xff);
+			header[4] 	= 0x64;
+			header[5] 	= 0x74;
+			header[6] 	= 0x75;
+			header[7] 	= 0x30;
+			header[8] 	= 0x30;
+			header[9] 	= 0x31;
+			header[10] 	= ((tt808.LSH>>8)&0xff);
+			header[11] 	= (tt808.LSH&0xff);
+		
+		
+		
+		for (int i = 0; i < 12; i++) {
+			checksum ^= header[i];
+		}
+		
+		for (int i = 0; i < tcpdataLength; i++) {
+			checksum ^= cmd_replyArray[i];
+		}	
+		;
+		uint8_t len = 1 + 12 + tcpdataLength + 1 + 1;
+        uint8_t tcppacket[len];
+		int index = 0;
+		tcppacket[index++] = TT808FLAG;  // Set the flag
+		
+		for (int i = 0; i < 12; i++) {
+			tcppacket[index++] = header[i];
+		}
+		// Copy message body to packet
+		for (size_t i = 0; i < tcpdataLength; i++) {
+			tcppacket[index++] = cmd_replyArray[i];
+		}
+		
+		uint16_t tcpoutLength = len;
+		
+		tcppacket[index++] = checksum;  // Set the checksum
+		tcppacket[index++] = TT808FLAG;      // Set the flag at the end
+		
+		
+		char TCPvalue[256];
+		char *ptr = TCPvalue;
+		ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",tcpoutLength);
+		for (int i = 0; i < tcpoutLength; i++) {
+			ptr += sprintf(ptr, "%02X", tcppacket[i]);
+		}
+		sprintf(ptr, "\"\r\n");//TCPvalue
+		if(sendCmd_4G(TCPvalue, "+MIPSEND:", 1, 1))//发送11BYTE  MAX1460
+		{
+			printf("#发送完成\r\n");
+		}
+		
+		module4G_F=true;
+		tt808.LSH+=1;
+		memset(MIPurc1,0,rlt);
+
+}
+
+
+
+
+
+// 7E 0002 0005 0000000000000000  042A002309 03 7E
+
+
+
+
+
+
+
+uint8_t xxtnewlength=0;
+uint8_t xxtfz[100];
+uint8_t tcppacket[256];
+
+void chuli(uint16_t XXID)
+{
+
+	uint16_t XXTSXdata = xxtnewlength;
+	XXTSXdata |= ( tcpdataLength | (TCPJMFSNULL<<10)); // 将长度左移3位后和加密方式进行按位或操作(001 RSA ,000 无加密)
+	
+	header[0] 	= ((XXID>>8)&0xff);
+	header[1] 	= (XXID&0xff);
+	header[2] 	= ((XXTSXdata>>8)&0xff);
+	header[3] 	= (XXTSXdata&0xff);
+	header[4] 	= 0x00;
+	header[5] 	= 0x00;
+	header[6] 	= 0x16;
+	header[7] 	= 0x00;
+	header[8] 	= 0x00;
+	header[9] 	= 0x08;
+	header[10] 	=  ((tt808.LSH>>8)&0xff);;
+	header[11] 	=  (tt808.LSH&0xff);;
+	
+	
+	
+	
+	int index = 0;
+	tcppacket[index++] = TT808FLAG;  // Set the flag
+		
+	for (int i = 0; i < 12; i++) {
+		tcppacket[index++] = header[i];
+	}
+	// Copy message body to packet
+	for (size_t i = 0; i < xxtnewlength; i++) {
+		tcppacket[index++] = xxtfz[i];
+	}
+	tcppacket[index++] = xorBytes(&tcppacket[1],12+xxtnewlength);;  // Set the checksum
+	tcppacket[index++] = TT808FLAG;      // Set the flag at the end
+	
+	
+//	for (int i = 0; i < index; i++) {
+//		printf("%02X ", tcppacket[i]);  // 以十六进制格式打印每个元素
+//	}
+	
+	
+	
+	char TCPvalue[256];
+	char *ptr = TCPvalue;
+	ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",index);
+	for (int i = 0; i < index; i++) {
+		ptr += sprintf(ptr, "%02X", tcppacket[i]);
+	}
+	sprintf(ptr, "\"\r\n");//TCPvalue
+	if(sendCmd_4G(TCPvalue, "+MIPSEND:", 1, 1))//发送11BYTE  MAX1460
+	{
+		printf("#发送完成\r\n");
+	}
+	tt808.LSH+=1;
+}
+
+
+
+
+
+/*需要传入消息体长度sizeof(xxt)/sizeof(xxt[0]);*/
+void tt808FsFunc(uint8_t xxt[], uint8_t xxtlength)
+{
+	xxtnewlength = xxtFZ(xxt, xxtlength, xxtfz);
+
+	//chuli(XXIDzdxt);
+	chuli(XXIDzdjq);
+	
+}
+
+
+uint8_t xxtFZ(uint8_t xxt[], uint8_t xxtlength, uint8_t outXxt[])
+{
+	int index = 0;
+	uint8_t newlength = xxtlength+3;
+	
+	uint8_t newXxt[newlength];
+	newXxt[index++]=newlength;
+	newXxt[index++]=0x2A;
+    for (int i = 0; i < xxtlength; i++) {
+        newXxt[index++] = xxt[i];  // 将消息头拷贝到报文中
+    }
+	newXxt[index++]=0x23;
+	newXxt[index++]=xorBytes(&newXxt[1],newlength-1);
+	newlength = index;
+	
+	for(int i =0;i<newlength;i++)
+	{
+		outXxt[i]=newXxt[i];
+	}
+	
+	
+	
+	//test
+//	for (int i = 0; i < newlength; i++) {
+//		printf("%02X ", newXxt[i]);  // 以十六进制格式打印每个元素
+//	}
+	return  newlength;
+}
+

+ 5 - 2
Core/Src/usart.c

@@ -23,9 +23,12 @@
 /* USER CODE BEGIN 0 */
 
 #include "dtuaes.h"
-volatile uint8_t recvLength = 0;  //接收一帧数据的长度
+uint8_t recvLength = 0;  //接收一帧数据的长度
+uint8_t U1recvLength = 0;  //接收一帧数据的长度
+uint8_t U1recvBuff[2048];
+uint8_t U4recvBuff[2048];
 uint8_t recvBuff[2048];
-
+uint8_t U1reFlag = 0;
 extern Menu_table menu;
 /* USER CODE END 0 */
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 3682
MDK-ARM/dtu.uvguix.Administrator


+ 49 - 52
MDK-ARM/dtu.uvoptx

@@ -117,6 +117,11 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+          <Name></Name>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>
@@ -132,15 +137,10 @@
           <Key>ARMDBGFLAGS</Key>
           <Name></Name>
         </SetRegEntry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DLGUARM</Key>
-          <Name></Name>
-        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U69618568 -O78 -S3 -ZTIFSpeedSel3000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)</Name>
+          <Name>-U69618568 -O78 -S3 -ZTIFSpeedSel3000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -153,22 +153,7 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>btframe</ItemText>
-        </Ww>
-        <Ww>
-          <count>1</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>menu</ItemText>
-        </Ww>
-        <Ww>
-          <count>2</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>enterInterface_time</ItemText>
-        </Ww>
-        <Ww>
-          <count>3</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>g_ML307A_8buf_Down</ItemText>
+          <ItemText>MIPurcXXTCSJ</ItemText>
         </Ww>
       </WatchWindow1>
       <MemoryWindow1>
@@ -193,7 +178,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>0</periodic>
-        <aLwin>1</aLwin>
+        <aLwin>0</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>
@@ -493,6 +478,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>21</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Core\Src\tt808.c</PathWithFileName>
+      <FilenameWithoutPath>tt808.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -503,7 +500,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -515,7 +512,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -527,7 +524,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -539,7 +536,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -551,7 +548,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -563,7 +560,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -575,7 +572,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -587,7 +584,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -599,7 +596,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -611,7 +608,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -623,7 +620,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -635,7 +632,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -647,7 +644,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -659,7 +656,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -671,7 +668,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -683,7 +680,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -695,7 +692,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -707,7 +704,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -727,7 +724,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -747,7 +744,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -759,7 +756,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -771,7 +768,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -783,7 +780,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -795,7 +792,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -807,7 +804,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -819,7 +816,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -831,7 +828,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -843,7 +840,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -855,7 +852,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
MDK-ARM/dtu.uvprojx

@@ -642,6 +642,11 @@
               <FileType>1</FileType>
               <FilePath>../Core/Src/stm32f1xx_hal_timebase_tim.c</FilePath>
             </File>
+            <File>
+              <FileName>tt808.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Core\Src\tt808.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 4177 - 3876
Output/dtu.hex


+ 1 - 0
Output/dtu.lnp

@@ -19,6 +19,7 @@
 "..\output\stm32f1xx_it.o"
 "..\output\stm32f1xx_hal_msp.o"
 "..\output\stm32f1xx_hal_timebase_tim.o"
+"..\output\tt808.o"
 "..\output\stm32f1xx_hal_gpio_ex.o"
 "..\output\stm32f1xx_hal_can.o"
 "..\output\stm32f1xx_hal.o"