Ver código fonte

add modifyOledBmp

zack 1 ano atrás
pai
commit
e515428e37
15 arquivos alterados com 3370 adições e 3217 exclusões
  1. 28 5
      Core/Inc/ConfigMacros.h
  2. 4 0
      Core/Inc/interface.h
  3. 2 0
      Core/Inc/key.h
  4. 6 6
      Core/Inc/mba32a.h
  5. 1 0
      Core/Inc/ml307a.h
  6. 2 0
      Core/Inc/usart.h
  7. 9 17
      Core/Src/freertos.c
  8. 65 40
      Core/Src/interface.c
  9. 29 64
      Core/Src/key.c
  10. 75 21
      Core/Src/main.c
  11. 78 44
      Core/Src/mba32a.c
  12. 18 4
      Core/Src/ml307a.c
  13. 10 22
      Core/Src/usart.c
  14. 14 21
      MDK-ARM/dtu.uvoptx
  15. 3029 2973
      Output/dtu.hex

+ 28 - 5
Core/Inc/ConfigMacros.h

@@ -6,21 +6,33 @@
 #include "oled.h"
 
 
+#define open4G			0	
+#define openBT			1	
+#define open16			11	//开字
 #define open16			11	//开字
 #define close16			12	//关字
+
+#define Sn1StatusAddr					((uint32_t)0x8070000)  
+#define Sn2StatusAddr					((uint32_t)0x8071000)  
+#define Sn3StatusAddr					((uint32_t)0x8072000)  
+#define Sn4StatusAddr					((uint32_t)0x8073000)  
+
+#define serialNum1Addr					((uint32_t)0x8073800)  
+#define serialNum2Addr					((uint32_t)0x8074000)  
+#define serialNum3Addr					((uint32_t)0x8074800)  
+#define serialNum4Addr					((uint32_t)0x8075000)  
+
 #define resetDevAddr					((uint32_t)0x8075000)  
 #define DevstatusAddr					((uint32_t)0x8075800)  
 
-
 #define Sn1Addr							((uint32_t)0x8076000)  
 #define Sn2Addr							((uint32_t)0x8076800)  
 #define Sn3Addr							((uint32_t)0x8077700)  
 #define Sn4Addr							((uint32_t)0x8077800)  
 
-#define Sn1StatusAddr					((uint32_t)0x8078000)  
-#define Sn2StatusAddr					((uint32_t)0x8078800)  
-#define Sn3StatusAddr					((uint32_t)0x8079000)  
-#define Sn4StatusAddr					((uint32_t)0x8079800)  
+
+
+
 
 
 #define TIM_Start(htim) 				HAL_TIM_Base_Start_IT(htim)
@@ -34,6 +46,17 @@
 #define PRINT_NUUID(message) 			printf("%s不符合\n",message)
 #define PRINT_BTRESP(message) 			printf("%s错误\n",message)
 
+
+/* SYETEM init */
+#define START_PROCESS() \
+    do { \
+        printf("JL_DTU_BL01-start...\r\n"); \
+        menu.current = 0xBB; \
+        tipsflag = Starting; \
+        Jump_interface(menu); \
+        OLED_Refresh(); \
+    } while(0)
+	
 /* WDI */
 #define TOGGLE_WDI_PIN(htim_instance) \
 do { \

+ 4 - 0
Core/Inc/interface.h

@@ -24,6 +24,10 @@ extern unsigned char Mac009[];
 extern unsigned char Mac00A[];
 extern unsigned char Mac00B[];
 extern unsigned char Mac00C[];
+extern unsigned char Mac00D[];
+extern unsigned char Mac00E[];
+extern unsigned char Mac00F[];
+extern unsigned char Mac010[];
 
 
 extern bool L1bd;						//L1°ó¶¨±ê־λ

+ 2 - 0
Core/Inc/key.h

@@ -11,6 +11,8 @@ void scanMac(void);
 
 extern uint16_t S1;
 extern uint16_t S2;
+extern uint16_t S3;
+extern uint16_t S4;
 #endif /*__KEY_H*/
 
 

+ 6 - 6
Core/Inc/mba32a.h

@@ -4,21 +4,21 @@
 
 
 extern bool resetBTmodule;
+extern uint8_t DtuBtKey[16];
+extern uint8_t iv[16];
+extern uint8_t g_MBA32A_8buf[2048];
+extern uint8_t g_MBA32A_8buf_Down[2048];
+extern uint16_t u5length;
 
 
 void workinfo_W(void);
 void open_close_lock(void);
-extern uint8_t g_MBA32A_8buf[2048];
-extern uint8_t g_MBA32A_8buf_Down[2048];
 void MBA32A_Init(void);
 uint8_t sendCmd_BT(char *pCmd,char *pRes, uint32_t timeOut, uint8_t sendNum);
-extern uint16_t u5length;
 
 void USART_SendString(UART_HandleTypeDef *huart,char *str);
-
+void modifyOledBmp(void);
 void lock_searchInfo(void);
 int dtu_test(void);
-extern uint8_t DtuBtKey[16];
-extern uint8_t iv[16];
 #endif /*__MBA32A_H*/
 

+ 1 - 0
Core/Inc/ml307a.h

@@ -9,6 +9,7 @@ extern bool u4RecvFlag;
 extern uint8_t g_ML307A_8buf[2048]; 
 extern uint8_t g_ML307A_8buf_Down[2048];
 
+extern bool reset4Gmodule;
 
 void ML307A_Init(void);
 

+ 2 - 0
Core/Inc/usart.h

@@ -57,6 +57,8 @@ void MX_USART3_UART_Init(void);
 
 /* USER CODE BEGIN Prototypes */
 uint16_t read_flash_16(uint32_t addr);
+uint32_t read_flash_32(uint32_t addr);
+void erase_flash(uint32_t ADDR_FLASH);
 void Write_Information(uint32_t addr, uint16_t newValue);
 void sendCombinedArray(uint8_t *header, size_t headerLength, uint8_t *command, size_t commandLength, bool JM);
 /* USER CODE END Prototypes */

+ 9 - 17
Core/Src/freertos.c

@@ -152,6 +152,7 @@ void StartScanKeyTask(void const * argument)
     OLED_Refresh(); 
 	open_close_lock();
 	workinfo_W();
+	scanMac();
   }
   /* USER CODE END StartScanKeyTask */
 }
@@ -194,22 +195,13 @@ void StartTestTask(void const * argument)
   for(;;)
   {
     osDelay(1);
-	  if(S1==0x1111)
-	  {
-		  menu.home=0x1000;
-	  }
-	  if(S1==0x2222)
-	  {
-		  menu.home=0xF000;
-	  }
-	  if(S2==0x1111)
-	  {
-		  menu.home |= 0x0100;
-	  }
-	  if(S2==0x2222)
-	  {
-		  menu.home |= 0x0F00;
-	  }
+	modifyOledBmp();
+	if(reset4Gmodule) { 
+		reset4Gmodule = false; 
+		HAL_Delay(2000);//µÈ´ý4GÆô¶¯
+        ML307A_Init(); 
+    }	
+		  
   }
   /* USER CODE END StartTestTask */
 }
@@ -230,7 +222,7 @@ void StartloginfoTaskTask(void const * argument)
     osDelay(1000);
 	//dtu_test();
 
-		//lock_searchInfo();
+	//lock_searchInfo();
 
   }
   /* USER CODE END StartloginfoTaskTask */

+ 65 - 40
Core/Src/interface.c

@@ -5,10 +5,6 @@
   * @breaf 本页定义变量
   */
 Menu_table menu;			
-unsigned char L1[] = "L1";
-unsigned char L2[] = "L2";
-unsigned char L3[] = "L3";
-unsigned char L4[] = "L4";
 unsigned char NOSETLOCK[] = "null";
 bool refresh=false; 	
 bool L1bd = false;						//L1绑定标志位
@@ -96,41 +92,41 @@ void Jump_interface(Menu_table menu)
 
 void setLock(void)
 {
-	OLED_ShowString(20,2,"L 1",16,1);
+	OLED_ShowString(20,2,(unsigned char*)"L 1",16,1);
 	OLED_ShowChinese(50,2,20,14,1);//操
 	OLED_ShowChinese(70,2,21,14,1);//作
-	OLED_ShowString(20,17,"L 2",16,1);
+	OLED_ShowString(20,17,(unsigned char*)"L 2",16,1);
 	OLED_ShowChinese(50,17,20,14,1);//操
 	OLED_ShowChinese(70,17,21,14,1);//作
-	OLED_ShowString(20,32,"L 3",16,1);
+	OLED_ShowString(20,32,(unsigned char*)"L 3",16,1);
 	OLED_ShowChinese(50,32,20,14,1);//操
 	OLED_ShowChinese(70,32,21,14,1);//作
-	OLED_ShowString(20,47,"L 4",16,1);
+	OLED_ShowString(20,47,(unsigned char*)"L 4",16,1);
 	OLED_ShowChinese(50,47,20,14,1);//操
 	OLED_ShowChinese(70,47,21,14,1);//作
 
 	if(menu.up==3 && menu.next==0)
 	{	
-		OLED_ShowString(100,2,"<--",16,0); //L1
+		OLED_ShowString(100,2,(unsigned char*)"<--",16,0); //L1
 	}
 	else if(menu.up==2 && menu.next==1)
 	{	
-		OLED_ShowString(100,17,"<--",16,0);//L2
+		OLED_ShowString(100,17,(unsigned char*)"<--",16,0);//L2
 	}
 	else if(menu.up==1 && menu.next==2)
 	{	
-		OLED_ShowString(100,32,"<--",16,0);//L3
+		OLED_ShowString(100,32,(unsigned char*)"<--",16,0);//L3
 	}
 	else if(menu.up==0 && menu.next==3)
 	{	
-		OLED_ShowString(100,47,"<--",16,0);//L4
+		OLED_ShowString(100,47,(unsigned char*)"<--",16,0);//L4
 	}
 }
 
 void workSet(Menu_table menu)
 {
-	OLED_ShowString(4,8,"SN:",16,1);
-	OLED_ShowString(0,8,"LOCKNAME:",12,1);
+	OLED_ShowString(4,8,(unsigned char*)"SN:",16,1);
+	OLED_ShowString(0,8,(unsigned char*)"LOCKNAME:",12,1);
 	OLED_ShowChinese(55,12,0,18,1);//施
 	OLED_ShowChinese(75,12,1,18,1);//封
 	OLED_ShowChinese(55,40,2,18,1);//解
@@ -140,28 +136,28 @@ void workSet(Menu_table menu)
 	
 	if(menu.current==4)
 	{
-		OLED_ShowString(0,30,menu.SN1name,16,0);
+		OLED_ShowString(0,30,(unsigned char*)menu.SN1name,16,0);
 	}
 	if(menu.current==5)
 	{
-		OLED_ShowString(0,30,menu.SN2name,16,0);
+		OLED_ShowString(0,30,(unsigned char*)menu.SN2name,16,0);
 	}
 	if(menu.current==6)
 	{
-		OLED_ShowString(0,30,menu.SN3name,16,0);
+		OLED_ShowString(0,30,(unsigned char*)menu.SN3name,16,0);
 	}
 	if(menu.current==7)
 	{
-		OLED_ShowString(0,30,menu.SN4name,16,0);
+		OLED_ShowString(0,30,(unsigned char*)menu.SN4name,16,0);
 	}
 	
 	if(menu.up==1)
 	{	
-		OLED_ShowString(93,12,"<--",16,0);//施封
+		OLED_ShowString(93,12,(unsigned char*)"<--",16,0);//施封
 	}
 	else
 	{	
-		OLED_ShowString(93,40,"<--",16,0);//解封
+		OLED_ShowString(93,40,(unsigned char*)"<--",16,0);//解封
 	}
 		
 }
@@ -171,10 +167,10 @@ void workSet(Menu_table menu)
   */
 void Macbinding(void)
 {
-	OLED_ShowString(0,0,"MAC:",16,1);
-	OLED_ShowString(0,15,"MAC:",16,1);
-	OLED_ShowString(0,30,"MAC:",16,1);
-	OLED_ShowString(0,45,"MAC:",16,1);
+	OLED_ShowString(0,0,(unsigned char*)"MAC:",16,1);
+	OLED_ShowString(0,15,(unsigned char*)"MAC:",16,1);
+	OLED_ShowString(0,30,(unsigned char*)"MAC:",16,1);
+	OLED_ShowString(0,45,(unsigned char*)"MAC:",16,1);
 	if(menu.next<=3)
 	{
 		OLED_ShowString(32,0,Mac001,16,1);
@@ -246,7 +242,7 @@ void mainMenu(void)
 {
 	OLED_ShowChinese(10,13,20,16,1);//设
 	OLED_ShowChinese(27,13,21,16,1);//备
-	OLED_ShowString(44,13,"SN",16,1);//6*12 “SN”
+	OLED_ShowString(44,13,(unsigned char*)"SN",16,1);//6*12 “SN”
 	OLED_ShowChinese(63,13,28,16,1);//绑
 	OLED_ShowChinese(80,13,29,16,1);//定
 	OLED_ShowChinese(10,40,13,16,1);//对
@@ -255,11 +251,11 @@ void mainMenu(void)
 	OLED_ShowChinese(80,40,16,16,1);//业
 	if(menu.up==1)
 	{	
-		OLED_ShowString(100,13,"<--",16,0);//绑定
+		OLED_ShowString(100,13,(unsigned char*)"<--",16,0);//绑定
 	}
 	else if(menu.up==0)
 	{	
-		OLED_ShowString(100,40,"<--",16,0);//作业
+		OLED_ShowString(100,40,(unsigned char*)"<--",16,0);//作业
 	}
 }
 
@@ -268,33 +264,33 @@ void mainMenu(void)
   */
 void LBinding(void)
 {
-	OLED_ShowString(20,2,"L 1",16,1);
+	OLED_ShowString(20,2,(unsigned char*)"L 1",16,1);
 	OLED_ShowChinese(55,2,16,14,1);//绑
 	OLED_ShowChinese(75,2,17,14,1);//定
-	OLED_ShowString(20,17,"L 2",16,1);
+	OLED_ShowString(20,17,(unsigned char*)"L 2",16,1);
 	OLED_ShowChinese(55,17,16,14,1);//绑
 	OLED_ShowChinese(75,17,17,14,1);//定
-	OLED_ShowString(20,32,"L 3",16,1);
+	OLED_ShowString(20,32,(unsigned char*)"L 3",16,1);
 	OLED_ShowChinese(55,32,16,14,1);//绑
 	OLED_ShowChinese(75,32,17,14,1);//定
-	OLED_ShowString(20,47,"L 4",16,1);
+	OLED_ShowString(20,47,(unsigned char*)"L 4",16,1);
 	OLED_ShowChinese(55,47,16,14,1);//绑
 	OLED_ShowChinese(75,47,17,14,1);//定
 	if(menu.up==3 && menu.next==0)
 	{	
-		OLED_ShowString(100,2,"<--",16,0); //L1
+		OLED_ShowString(100,2,(unsigned char*)"<--",16,0); //L1
 	}
 	else if(menu.up==2 && menu.next==1)
 	{	
-		OLED_ShowString(100,17,"<--",16,0);//L2
+		OLED_ShowString(100,17,(unsigned char*)"<--",16,0);//L2
 	}
 	else if(menu.up==1 && menu.next==2)
 	{	
-		OLED_ShowString(100,32,"<--",16,0);//L3
+		OLED_ShowString(100,32,(unsigned char*)"<--",16,0);//L3
 	}
 	else if(menu.up==0 && menu.next==3)
 	{	
-		OLED_ShowString(100,47,"<--",16,0);//L4
+		OLED_ShowString(100,47,(unsigned char*)"<--",16,0);//L4
 	}
 	
 }
@@ -360,10 +356,39 @@ void WarningTip(void)
   */
 void home(uint32_t L_s, bool L1bd, bool L2bd, bool L3bd, bool L4bd)
 {
-	OLED_ShowString(14,29,L1,12,1);						//L1
-	OLED_ShowString(44,29,L2,12,1);						//L2
-	OLED_ShowString(74,29,L3,12,1);						//L3
-	OLED_ShowString(104,29,L4,12,1);					//L4
+	if(menu.SN1name)
+	{
+		OLED_ShowString(8,29,(unsigned char*)menu.SN1name,12,1);						//L1
+	}
+	else
+	{
+		OLED_ShowString(14,29,(unsigned char*)"L1",12,1);						//L1
+	}
+	if(menu.SN2name)
+	{
+		OLED_ShowString(38,29,(unsigned char*)menu.SN2name,12,1);						//L1
+	}
+	else
+	{
+		OLED_ShowString(44,29,(unsigned char*)"L2",12,1);						//L2
+	}
+	if(menu.SN3name)
+	{
+		OLED_ShowString(68,29,(unsigned char*)menu.SN3name,12,1);						//L1
+	}
+	else
+	{
+		OLED_ShowString(74,29,(unsigned char*)"L3",12,1);						//L3
+	}	
+	if(menu.SN4name)
+	{
+		OLED_ShowString(98,29,(unsigned char*)menu.SN4name,12,1);						//L1
+	}
+	else
+	{
+		OLED_ShowString(104,29,(unsigned char*)"L4",12,1);					//L4
+	}
+	
 	switch(L_s) {
 		case 0x0001:
 		case 0x000F:
@@ -1061,7 +1086,7 @@ void home(uint32_t L_s, bool L1bd, bool L2bd, bool L3bd, bool L4bd)
 			OLED_ShowString(8,8,NOSETLOCK,12,1);     //L1null
 			OLED_ShowString(38,8,NOSETLOCK,12,1);    //L2null
 			OLED_ShowString(68,8,NOSETLOCK,12,1);    //L3null
-			OLED_ShowString(98,8,NOSETLOCK,12,1);		 //L4null
+			OLED_ShowString(98,8,NOSETLOCK,12,1);	 //L4null
 		break;
 		}
 	}

+ 29 - 64
Core/Src/key.c

@@ -13,6 +13,8 @@ struct keys key[1]={0};
 char timeout[] = "+CONNECT TIMEOUT";
 uint16_t S1 = 0;
 uint16_t S2 = 0;
+uint16_t S3 = 0;
+uint16_t S4 = 0;
 uint8_t KEY_1_Scan(void)
 {
     static uint8_t key_state = 0;
@@ -256,6 +258,7 @@ uint8_t KEY_3_Scan(void)
 						{
 							if(menu.up==1)
 							{
+								scanMac();
 								SET_MENU_STATUS(2,3,0,2);
 							}
 							else
@@ -276,77 +279,32 @@ uint8_t KEY_3_Scan(void)
 						{
 							if(menu.up==3)//L1²Ù×÷
 							{
-//								if(sendCmd_BT(menu.SN1,menu.SN1F,2,5))//L1Á¬½Ó
-//								{
-//									//HAL_Delay(1200);
-//									printf("success\r\n");
-//									SET_MENU_STATUS(4,1,0,3);
-//									break;
-//								}
-//								if(sendCmd_BT(menu.SN1,menu.SN1D,2,5))
-//								{
-//									sendCmd_BT(menu.SN1,menu.SN1F,2,5);
-//									SET_MENU_STATUS(4,1,0,3);
-//									break;
-//								}
-//								if(sendCmd_BT(menu.SN1,timeout,2,5))
-//								{
-//									sendCmd_BT(menu.SN1,menu.SN1F,2,5);
-//									SET_MENU_STATUS(4,1,0,3);
-//									break;
-//								}
-//								else
-//								{
-//									printf("fail\r\n");
-//									break;
-//								}
 								sendCmd_BT(menu.SN1,menu.SN1F,3,3);
-								HAL_Delay(500);
+								HAL_Delay(100);
 								SET_MENU_STATUS(4,1,0,3);
 								break;
 							}
 							if(menu.up==2)//2²Ù×÷
 							{
-								if(sendCmd_BT(menu.SN2,menu.SN2F,2,3))//L2Á¬½Ó
-								{
-									//HAL_Delay(1200);
-									printf("success\r\n");
-									SET_MENU_STATUS(5,1,0,3);
-								}
-								else
-								{
-									printf("fail\r\n");
-								}
+								sendCmd_BT(menu.SN2,menu.SN2F,3,3);
+								HAL_Delay(100);
+								SET_MENU_STATUS(5,1,0,3);
 								break;
 							}
-//							if(menu.up==1)//3²Ù×÷
-//							{
-//								if(sendCmd_BT(menu.SN3,menu.SN3F,2,3))//L3Á¬½Ó
-//								{
-//									HAL_Delay(1200);
-//									printf("success\r\n");
-//									SET_MENU_STATUS(6,1,0,3);
-//								}
-//								else
-//								{
-//									printf("fail\r\n");
-//								}
-//								break;
-//							}						
-//							if(menu.up==0)//3²Ù×÷
-//							{
-//								if(sendCmd_BT(menu.SN4,menu.SN4F,2,3))//L4Á¬½Ó
-//								{
-//									HAL_Delay(1200);
-//									printf("success\r\n");
-//									SET_MENU_STATUS(7,1,0,3);
-//								}
-//								else
-//								{
-//									printf("fail\r\n");
-//								}
-//								break;
-//							}			
+							if(menu.up==1)//3²Ù×÷
+							{
+								sendCmd_BT(menu.SN3,menu.SN3F,3,3);
+								HAL_Delay(100);
+								SET_MENU_STATUS(6,1,0,3);
+								break;
+							}						
+							if(menu.up==0)//4²Ù×÷
+							{
+								sendCmd_BT(menu.SN4,menu.SN4F,3,3);
+								HAL_Delay(100);
+								SET_MENU_STATUS(7,1,0,3);
+								break;
+							}			
 						}
 						case 4:
 						case 5:
@@ -479,7 +437,7 @@ uint8_t KEY_3_Scan(void)
 									menu.SN1D="+DISCONN:0,101000000010";
 									Write_Information(Sn1Addr, 0x0010);
 								}
-								
+								//erase_flash(Sn1StatusAddr);
 								L1bd=true;
 							}
 							if(menu.PreNext==1)//L2 д
@@ -597,6 +555,7 @@ uint8_t KEY_3_Scan(void)
 									menu.SN2D="+DISCONN:0,101000000010";
 									Write_Information(Sn2Addr, 0x0010);
 								}
+								//erase_flash(Sn1StatusAddr);
 								L2bd=true;
 							}
 							if(menu.PreNext==2)//L3 д
@@ -714,6 +673,7 @@ uint8_t KEY_3_Scan(void)
 									menu.SN3D="+DISCONN:0,101000000010";
 									Write_Information(Sn3Addr, 0x0010);
 								}
+								//erase_flash(Sn1StatusAddr);
 								L3bd=true;
 							}
 							if(menu.PreNext==3)//L4 д
@@ -831,6 +791,7 @@ uint8_t KEY_3_Scan(void)
 									menu.SN4D="+DISCONN:0,101000000010";
 									Write_Information(Sn4Addr, 0x0010);
 								}
+								//erase_flash(Sn1StatusAddr);
 								L4bd=true;
 							}
 
@@ -899,6 +860,8 @@ uint8_t KEY_4_Scan(void)
 							HAL_Delay(300);
 							S1 = read_flash_16(Sn1StatusAddr);
 							S2 = read_flash_16(Sn2StatusAddr);
+							S3 = read_flash_16(Sn3StatusAddr);
+							S4 = read_flash_16(Sn4StatusAddr);
 							SET_MENU_STATUS(3,3,0,2);
 							break;
 						}	
@@ -912,6 +875,8 @@ uint8_t KEY_4_Scan(void)
 						{
 							S1 = read_flash_16(Sn1StatusAddr);
 							S2 = read_flash_16(Sn2StatusAddr);
+							S3 = read_flash_16(Sn3StatusAddr);
+							S4 = read_flash_16(Sn4StatusAddr);
 							SET_MENU_STATUS(2,3,0,2);
 							break;
 						}

+ 75 - 21
Core/Src/main.c

@@ -46,6 +46,7 @@
 /* USER CODE BEGIN PM */
 
 extern Menu_table menu;
+extern BtFrame btframe;
 extern bool refresh;
 extern TipsFlag tipsflag;
 /* USER CODE END PM */
@@ -61,6 +62,7 @@ void MX_FREERTOS_Init(void);
 /* USER CODE BEGIN PFP */
 
 void Jump_interface(Menu_table menu);
+void readLockStatusinit(void);
 /* USER CODE END PFP */
 
 /* Private user code ---------------------------------------------------------*/
@@ -114,27 +116,14 @@ int main(void)
   OLED_DISPLAY(0,0);		//color>1 反色;display>1 翻转
   IDLE_DMA_UART(&huart4);	//开启4G_DMA中断
   RXNE_UART(&huart5);		//开启BT接收中断
-  printf("hello\r\n");
-  menu.current = 0xBB; 
-  tipsflag = Starting; 
-  Jump_interface(menu); 
-  OLED_Refresh(); 
-
-  uint16_t S1bd = read_flash_16(Sn1Addr);
-  uint16_t S2bd = read_flash_16(Sn2Addr);
-  if(S1bd!=0xFFFF)
-  {
-	  L1bd=true;
-  }
-  if(S2bd!=0xFFFF)
-  {
-	  L2bd=true;
-  }
-  S1 = read_flash_16(Sn1StatusAddr);
-  S2 = read_flash_16(Sn2StatusAddr);
-  refresh=true;
-  //ML307A_Init();
+  START_PROCESS(); 			//SYETEM启动
+  readLockStatusinit();
+#if openBT==1
   MBA32A_Init();
+#endif
+#if open4G==1
+  reset4Gmodule = true;//ML307A_Init();
+#endif
   /* USER CODE END 2 */
 
   /* Call init function for freertos objects (in freertos.c) */
@@ -204,7 +193,72 @@ void SystemClock_Config(void)
 }
 
 /* USER CODE BEGIN 4 */
-
+void readLockStatusinit(void)
+{
+  uint16_t S1bd = read_flash_16(Sn1Addr);
+  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);
+  if(S1bd!=0xFFFF)
+  {
+	  L1bd=true;
+  }
+  if(S2bd!=0xFFFF)
+  {
+	  L2bd=true;
+  }
+  if(S3bd!=0xFFFF)
+  {
+	  L3bd=true;
+  }
+  if(S4bd!=0xFFFF)
+  {
+	  L4bd=true;
+  }
+  
+  if(S1LS==0xFFFFFFFF)
+  {
+	  btframe.serialNum1 = 0;
+  }	
+  else
+  {
+      btframe.serialNum1 = S1LS;
+  }
+  if(S2LS==0xFFFFFFFF)
+  {
+	  btframe.serialNum2 = 0;
+  }	
+  else
+  {
+      btframe.serialNum2 = S2LS;
+  }
+  if(S3LS==0xFFFFFFFF)
+  {
+	  btframe.serialNum3 = 0;
+  }	
+  else
+  {
+      btframe.serialNum3 = S3LS;
+  }
+  if(S4LS==0xFFFFFFFF)
+  {
+	  btframe.serialNum4 = 0;
+  }	
+  else
+  {
+      btframe.serialNum4 = S4LS;
+  }  
+  S1 = read_flash_16(Sn1StatusAddr);
+  S2 = read_flash_16(Sn2StatusAddr);
+  S3 = read_flash_16(Sn3StatusAddr);
+  S4 = read_flash_16(Sn4StatusAddr);
+  refresh=true;
+}
 
 
 /* USER CODE END 4 */

+ 78 - 44
Core/Src/mba32a.c

@@ -79,10 +79,6 @@ void Start_Read_resetFlag16(void)
 void MBA32A_Init(void)
 {
 	
-	btframe.serialNum1 = 0x00000001; 
-	btframe.serialNum2 = 0x00000001; 
-	btframe.serialNum3 = 0x00000001; 
-	btframe.serialNum4 = 0x00000001; 
 	btframe.userId 	  = 0x64747531; 
 	btframe.Autoseal  = 0xFF; \
 	printf("\t###01\tBT_init%d...\r\n", resetcount_bt); 
@@ -162,7 +158,7 @@ void MBA32A_Init(void)
 
 void USART_SendString(UART_HandleTypeDef *huart,char *str)
 {
-	printf("\r\n\CMD:\t");
+	printf("\r\nCMD:\t");
 	HAL_UART_Transmit(huart, (uint8_t*)str, strlen(str), 0xFFFF);
     HAL_UART_Transmit(&huart3, (uint8_t*)str, strlen(str), 0xFFFF);
 	
@@ -441,98 +437,81 @@ void open_close_lock(void)
 		if(menu.current==4)
 		{
 			btframe.serialNum1 += 1;
+			Write_Information(serialNum1Addr, btframe.serialNum1);
 			//Sn1StatusAddr  0x1111 开 0x2222 关
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
 				Write_Information(Sn1StatusAddr, 0x2222);
-				//lock_searchInfo();
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
+				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
 				Write_Information(Sn1StatusAddr, 0x1111);
-				//lock_searchInfo();
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
+				HAL_Delay(50);
 			}
 		}
 		if(menu.current==5)
 		{
 			btframe.serialNum2 += 1;
+			Write_Information(serialNum2Addr, btframe.serialNum2);
 			//Sn1StatusAddr  0x1111 开 0x2222 关
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
 				Write_Information(Sn2StatusAddr, 0x2222);
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
-				//lock_searchInfo();
+				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
 				Write_Information(Sn2StatusAddr, 0x1111);
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
-				//lock_searchInfo();
+				HAL_Delay(50);
 			}
 		}	
 		if(menu.current==6)
 		{
 			btframe.serialNum3 += 1;
+			Write_Information(serialNum3Addr, btframe.serialNum3);
 			//Sn1StatusAddr  0x1111 开 0x2222 关
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
-//				Write_Information(Sn3StatusAddr, 0x2222);
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
-				//lock_searchInfo();
+				Write_Information(Sn3StatusAddr, 0x2222);
+				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
-//				Write_Information(Sn3StatusAddr, 0x1111);
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
-				//lock_searchInfo();
+				Write_Information(Sn3StatusAddr, 0x1111);
+				HAL_Delay(50);
 			}
 		}
 		if(menu.current==7)
 		{
 			btframe.serialNum4 += 1;
+			Write_Information(serialNum4Addr, btframe.serialNum4);
 			//Sn1StatusAddr  0x1111 开 0x2222 关
 			if(menu.up == 1)
 			{
 				close_lock(btframe); //施封操作
-//				Write_Information(Sn4StatusAddr, 0x2222);
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
-				//lock_searchInfo();
+				Write_Information(Sn4StatusAddr, 0x2222);
+				HAL_Delay(50);
 			}
 			else if(menu.up == 0)
 			{
 				open_lock(btframe); //解封操作
-//				Write_Information(Sn4StatusAddr, 0x1111);
-				HAL_Delay(500);
-				S1 = read_flash_16(Sn1StatusAddr);
-				S2 = read_flash_16(Sn2StatusAddr);
-				//lock_searchInfo();
+				Write_Information(Sn4StatusAddr, 0x1111);
+				HAL_Delay(50);
 			}
 		}
 		
-
-		
+		S1 = read_flash_16(Sn1StatusAddr);
+		S2 = read_flash_16(Sn2StatusAddr);
+		S3 = read_flash_16(Sn3StatusAddr);
+		S4 = read_flash_16(Sn4StatusAddr);
+		HAL_Delay(100);
 		menu.enter=3;
         refresh = true;
     }
@@ -569,5 +548,60 @@ uint8_t in[16] = { 0x02, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x64, 0x74, 0x75, 0x31, 0
     return 0;
 }
 
-
+void modifyOledBmp(void)
+{
+	if (S1 == 0x1111)
+	{
+		menu.home |= 0x1000;
+	}
+		
+	if (S1 == 0x2222)
+	{
+		menu.home |= 0xF000;
+	}
+	if (S2 == 0x1111)
+	{
+		menu.home |= 0x0100;
+	}
+		
+	if (S2 == 0x2222)
+	{
+		menu.home |= 0x0F00;
+	}
+		
+	if (S3 == 0x1111)
+	{
+		menu.home |= 0x0010;
+	}
+	if (S3 == 0x2222)
+	{
+		menu.home |= 0x00F0;
+	}
+	if (S4 == 0x1111)
+	{
+		menu.home |= 0x0001;
+	}
+	if (S4 == 0x2222)
+	{
+		menu.home |= 0x000F;
+	}
+	
+	//恢复null
+//	if(S1==0xFFFF)
+//	{
+//		menu.home = menu.home & 0x0111;
+//	}
+//	if(S2==0xFFFF)
+//	{
+//		menu.home = menu.home & 0x1011;
+//	}	
+//	if(S3==0xFFFF)
+//	{
+//		menu.home = menu.home & 0x1101;
+//	}	
+//	if(S4==0xFFFF)
+//	{
+//		menu.home = menu.home & 0x1110;
+//	}
+}
 

+ 18 - 4
Core/Src/ml307a.c

@@ -7,7 +7,7 @@ bool u4RecvFlag = false;
 bool ml307aFail = false;
 uint8_t g_ML307A_8buf[2048]={0}; 
 uint8_t g_ML307A_8buf_Down[2048]={0}; 
-
+bool reset4Gmodule = false;
 
 extern UART_HandleTypeDef huart3;
 extern UART_HandleTypeDef huart4;
@@ -17,7 +17,7 @@ uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum);
 void ML307A_Init(void)
 {
 	
-	HAL_Delay(2000);
+	//HAL_Delay(2000);
 	INIT_4G_FRAME();
 	
 	if(!sendCmd_4G("AT\r\n","OK",1,1))
@@ -32,12 +32,12 @@ void ML307A_Init(void)
 	}
 	else
 	{
-		HAL_Delay(2000);
+		//HAL_Delay(2000);
 		
 		if (sendCmd_4G("AT+CPIN?\r\n", "+CME ERROR: 10", 1, 1)) // 00检测是否有SIM卡 <+CPIN: READY\r\nOK>
 		{
 			printf("\tERROR!-->未检测到SIM卡\r\n");
-			OLED_ShowString(42,50,"NO_SIM",12,0);
+			OLED_ShowString(42,50,(unsigned char*)"NO_SIM",12,0);
 		}
 
 	}
@@ -69,6 +69,20 @@ uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum)
 
 
 
+/**
+ @brief 重启模块
+ @param 无
+ @return 无
+*/
+void ML307AReset(void)
+{
+	reset4Gmodule=true;
+	resetcount_4g+=1;
+	printf("4G Module_Reset\n");    
+	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
+	HAL_Delay(5000);
+	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
+}
 
 
 

+ 10 - 22
Core/Src/usart.c

@@ -631,6 +631,11 @@ uint16_t read_flash_16(uint32_t addr){
     return data;
 }
 
+uint32_t read_flash_32(uint32_t addr){
+    uint32_t data = *(volatile uint32_t*)addr;     // 从Flash中读取4个字节
+    return data;
+}
+
 void erase_flash(uint32_t ADDR_FLASH){                //进行擦除
     FLASH_EraseInitTypeDef erase_init;
     erase_init.TypeErase = FLASH_TYPEERASE_PAGES;  // 擦除类型为页擦除
@@ -640,37 +645,20 @@ void erase_flash(uint32_t ADDR_FLASH){                //
     HAL_FLASH_Unlock();  // 解锁Flash
     HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase_init, &page_error);  // 执行擦除操作
     HAL_FLASH_Lock();  // 上锁Flash
-    if(status == HAL_OK){
-        if(ADDR_FLASH == resetDevAddr) {
-			//可添加复位标志
-        }
-    }
+
 }
 
 void Write_Information(uint32_t addr, uint16_t newValue) {
 	erase_flash(addr);
     HAL_FLASH_Unlock();  // 解锁Flash
-	
-    if (addr == resetDevAddr) {  // 写入地址到Flash
-        newValue = 0xAAAA;
-        HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
-        if (status == HAL_OK) {
-			//复位写入成功
-        }
-    }    
-	else if(addr == DevstatusAddr)
+	if(addr== serialNum1Addr || addr== serialNum2Addr || addr== serialNum3Addr || addr== serialNum4Addr)
 	{
-        newValue = menu.home;
-        HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
-        if (status == HAL_OK) {
-			//复位写入成功
-        }
+		HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, newValue);
 	}
-	else if(addr == Sn1Addr || addr == Sn2Addr || addr == Sn3Addr || addr == Sn4Addr || addr==Sn1StatusAddr || addr==Sn2StatusAddr || addr==Sn3StatusAddr || addr==Sn4StatusAddr)
+	else
 	{
-        HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
+		HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, newValue);
 	}
-
 	HAL_FLASH_Lock();  // 上锁Flash
 }
 

+ 14 - 21
MDK-ARM/dtu.uvoptx

@@ -153,32 +153,25 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>in</ItemText>
-        </Ww>
-        <Ww>
-          <count>1</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>menu</ItemText>
-        </Ww>
-        <Ww>
-          <count>2</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>S1</ItemText>
-        </Ww>
-        <Ww>
-          <count>3</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>S2</ItemText>
+          <ItemText>btframe</ItemText>
         </Ww>
       </WatchWindow1>
       <MemoryWindow1>
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>Sn1StatusAddr</ItemText>
+          <ItemText>Sn1Addr</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
+      <MemoryWindow2>
+        <Mm>
+          <WinNumber>2</WinNumber>
+          <SubType>0</SubType>
+          <ItemText>Sn1StatusAddr</ItemText>
+          <AccSizeX>0</AccSizeX>
+        </Mm>
+      </MemoryWindow2>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>
@@ -233,7 +226,7 @@
 
   <Group>
     <GroupName>Application/MDK-ARM</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -477,7 +470,7 @@
 
   <Group>
     <GroupName>Drivers/STM32F1xx_HAL_Driver</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -701,7 +694,7 @@
 
   <Group>
     <GroupName>Drivers/CMSIS</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -721,7 +714,7 @@
 
   <Group>
     <GroupName>Middlewares/FreeRTOS</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

Diferenças do arquivo suprimidas por serem muito extensas
+ 3029 - 2973
Output/dtu.hex