Pārlūkot izejas kodu

1.基础版本 7.4.0.0 基本功能调试通过

yidongFan 1 nedēļu atpakaļ
vecāks
revīzija
0a714cb26b
41 mainītis faili ar 1756 papildinājumiem un 1126 dzēšanām
  1. 36 10
      BoardInterface/onechip_devinf_define.h
  2. 4 3
      BoardInterface/onechip_include_header.h
  3. 5 1
      BoardInterface/onechip_load_inf.c
  4. 4 4
      BoardInterface/onechip_load_inf.h
  5. 0 2
      Core/Inc/stm32f1xx_it.h
  6. 0 6
      Core/Src/dma.c
  7. 94 29
      Core/Src/main.c
  8. 0 30
      Core/Src/stm32f1xx_it.c
  9. 4 4
      Core/Src/tim.c
  10. 0 39
      Core/Src/usart.c
  11. 140 82
      DriverInterface/ESP32_WROOM_32D.c
  12. 239 84
      DriverInterface/communication.c
  13. 21 4
      DriverInterface/communication.h
  14. 45 25
      DriverInterface/onchip_flash.c
  15. 134 8
      DriverInterface/rgb381.c
  16. 1 0
      DriverInterface/rgb381.h
  17. 95 60
      DriverInterface/state_mini.c
  18. 11 5
      DriverInterface/state_mini.h
  19. 4 194
      DriverInterface/uart_rcv.c
  20. 211 0
      DriverInterface/user_heater.c
  21. 47 0
      DriverInterface/user_heater.h
  22. 103 236
      DriverInterface/usr_lysis.c
  23. 62 5
      DriverInterface/usr_lysis.h
  24. 17 8
      DriverInterface/usr_motor.c
  25. 1 1
      DriverInterface/usr_motor.h
  26. 43 42
      DriverInterface/van_BSP_Com_Pwm.c
  27. 1 1
      DriverInterface/van_BSP_Com_Pwm.h
  28. 36 11
      DriverInterface/van_BSP_ESPUart.c
  29. 42 24
      DriverInterface/van_BSP_Scanner.c
  30. 1 1
      DriverInterface/van_BSP_Scanner.h
  31. 73 0
      DriverInterface/ws2812.c
  32. 15 22
      MDK-ARM/mini7_V2.uvguix.Administrator
  33. 66 13
      MDK-ARM/mini7_V2.uvoptx
  34. 7 2
      MDK-ARM/mini7_V2.uvprojx
  35. 30 66
      MDK-ARM/startup_stm32f103xe.lst
  36. 25 46
      mini7_V2.ioc
  37. 2 4
      tshell/van_bsp_debug_shell.c
  38. 9 6
      tshell/van_bsp_debug_shell.h
  39. 7 0
      tshell/van_bsp_debug_uart.c
  40. 107 47
      tshell/van_com_algorithm.c
  41. 14 1
      tshell/van_com_algorithm.h

+ 36 - 10
BoardInterface/onechip_devinf_define.h

@@ -4,7 +4,12 @@
 
 #include "oneChip_basic_define.h"
 #include "state_mini.h"
+#include "user_heater.h"
+#include "usr_lysis.h"
+#define OFFLINE_TIME 20*60  /*一分钟*/
 
+
+#define CMD_BUF_SIZE (128)	// 调试串口缓冲区长度
 typedef enum {
 	ONECHIP_DEV_STATE_NONE,
 	ONECHIP_DEV_STATE_POWEROFF,
@@ -59,11 +64,13 @@ typedef struct {
 	DeviceBasicInfdef devdesc;
 	unsigned int  ms10_flag;
 	unsigned int  ms_conter;	
+	unsigned int  resendFlag;	
 	unsigned int  conter10ms;		
 	unsigned int  deal_espFlag;		
 	unsigned int  reccmd_conter;	
 	unsigned int  s1_flag;			
-	unsigned int  s10_flag;		
+	unsigned int  s10_flag;			
+	unsigned int  upheart_flag;		
 	unsigned int  test_flag;	
 	unsigned int  sysLoad_flag;	
 	unsigned int  trigger_Tick;	
@@ -87,6 +94,8 @@ typedef struct {
 	void * rgb_band_port;
 	uint16_t  run_led_pin;	
 	void * run_led_port;	
+	uint16_t  beep_pin;	
+	void * beep_port;	
 	uint8_t amplifState;
 	uint8_t lysisState;
 	uint8_t updateSt;
@@ -94,23 +103,34 @@ typedef struct {
 	uint8_t lysis_error_code; //错误码 
 	uint8_t updateError;
 	uint8_t updateQR;
+	uint32_t resendeQRtimer;
+	uint32_t QRBeepTimeer;
 	
 	ProcessStateMachine_t psmMaster;
 	ProcessStateMachine_t psmSlave;
-
+	heat_ctrl_def heaterMaster;
+	heat_ctrl_def heaterSlave;
+    lysis_ctr_def lysis;
 	float lysis_offset;
 	float lysis_overHeat;
 	float lysis_overHeatTime;
 	float lysis_Kp;
 	float lysis_Ki;
 	float lysis_Kd;
-	float    presetTempVal;   //拉升温度
-	uint32_t presetTempTime;   //拉升保持时间
-	float    setTempVal;      //设定温度
-	float    holdTemp;       //稳定温度
-	float	tempOffset;		//温度补偿
-	uint32_t preHeatTime;	//上电预热时间,min
-	float readyTemp;		//就绪温度
+	
+	float amplif_Kp;
+	float amplif_Ki;
+	float amplif_Kd;
+ 	float PreHeatTime;	  //上电预热时间,min
+    float holdTemp;	      //待机温度
+    float readyTemp;	  //就绪温度	
+    float PresetTempVal;  //拉升温度	
+    float PresetTempTime; //拉升保持时间
+    float adJTarget;	  //低温温度
+    float SetTempVal;     //目标温度
+
+
+
 	uint32_t log_level;		//日志等级
 	uint32_t skip_CheckOrRun;		//插入光变化检测
 	float adjtemp;		//调整温度
@@ -124,7 +144,7 @@ typedef struct {
 	char wifiname[WIFI_AP_NAME_MAX_LEN];
 	char password[WIFI_AP_PWD_MAX_LEN];
 	char TCP_IP_Addr[16];
-	unsigned char TCP_IP_PORT[8];
+	char TCP_IP_PORT[8];
 	char SN[8];
 	uint32_t checksum;		//插入光变化检测
 	
@@ -134,6 +154,12 @@ typedef struct {
 
 ONECHIP_GLOBAL_DEF oneChipSysdef sysinf;
 
+ONECHIP_GLOBAL_DEF uint8_t g_cmd_rx_buf[CMD_BUF_SIZE];
+ONECHIP_GLOBAL_DEF uint32_t  cmd_rx_last;
+ONECHIP_GLOBAL_DEF uint32_t  cmd_rx_header;
+ONECHIP_GLOBAL_DEF CmdMessage  uart0_massage;
+ONECHIP_GLOBAL_DEF uint8_t  uart0_data[CMD_BUF_SIZE];
 
+ONECHIP_GLOBAL_DEF test_result_struct result;
 #endif //__ONECHIP_BASIC_DEFINE_H_
 

+ 4 - 3
BoardInterface/onechip_include_header.h

@@ -13,25 +13,26 @@
 #include "tim.h"
 #include "usart.h"
 #include "gpio.h"
-#include "onechip_basic_define.h"
 #include "onechip_devinf_define.h"
 #include "van_bsp_debug_shell.h"
 #include "van_bsp_debug_uart.h"
 #include "onechip_load_inf.h"
 #include "van_com_algorithm.h"
+#include "onechip_basic_define.h"
 #include "pt1000.h"
 #include "cJSON.h"
 #include "VAN_ITCallBack.h"
 #include "van_BSP_Com_Pwm.h"
+#include "user_heater.h"
 #include "state_mini.h"
+#include "usr_motor.h"
+#include "usr_lysis.h"
 #include "ws2812.h"
 #include "rgb381.h"
 #include "communication.h"
 #include "van_BSP_Scanner.h"
 #include "van_BSP_ESPUart.h"
 #include "ESP32_WROOM_32D.h"
-#include "usr_motor.h"
-#include "usr_lysis.h"
 #include "onchip_flash.h"
 #endif //__ONECHIP_LOAD_INF_H_
 

+ 5 - 1
BoardInterface/onechip_load_inf.c

@@ -147,9 +147,13 @@ void dev_load_allinf (void)
 	sysinf.run_led_port = MINI7_V2_SYS_B_GPIO_Port;	
 	sysinf.rgb_band_pin = MINI7_V2_indicator_light_Pin;	
 	sysinf.rgb_band_port = MINI7_V2_indicator_light_GPIO_Port;
+	sysinf.beep_pin = MINI7_V2_BEEPER_Pin;	
+	sysinf.beep_port = MINI7_V2_BEEPER_GPIO_Port;
 	sysinf.ms_conter = 0;
+	sysinf.heaterMaster.pwdId = MINI7_SUB_FUN_HEATER1;
+	sysinf.lysis.pwdId = MINI7_SUB_FUN_HEATER2;
+	sysinf.pc_link_timeout = OFFLINE_TIME;
 }
-
 /**********************************************************************************
 Func	Name: con_sysinf_debugUart
 Descriptions: 设置调试串口

+ 4 - 4
BoardInterface/onechip_load_inf.h

@@ -5,10 +5,10 @@
 #define HARD_VERSION_1    (0x01)//硬件版本号
 #define HARD_VERSION_2    (0x00)//硬件版本号
 
-#define SOFT_VERSION_1  1	//软件版本号
-#define SOFT_VERSION_2  0	//软件版本号
-#define SOFT_VERSION_3  2	//软件版本号
-#define SOFT_VERSION_4  8	//软件版本号
+#define SOFT_VERSION_1  7	//软件版本号
+#define SOFT_VERSION_2  4	//软件版本号
+#define SOFT_VERSION_3  0	//软件版本号
+#define SOFT_VERSION_4  0	//软件版本号
 
 
 

+ 0 - 2
Core/Inc/stm32f1xx_it.h

@@ -58,8 +58,6 @@ void SysTick_Handler(void);
 void DMA1_Channel1_IRQHandler(void);
 void DMA1_Channel4_IRQHandler(void);
 void DMA1_Channel5_IRQHandler(void);
-void DMA1_Channel6_IRQHandler(void);
-void DMA1_Channel7_IRQHandler(void);
 void EXTI9_5_IRQHandler(void);
 void TIM2_IRQHandler(void);
 void USART1_IRQHandler(void);

+ 0 - 6
Core/Src/dma.c

@@ -53,12 +53,6 @@ void MX_DMA_Init(void)
   /* DMA1_Channel5_IRQn interrupt configuration */
   HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);
-  /* DMA1_Channel6_IRQn interrupt configuration */
-  HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0);
-  HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
-  /* DMA1_Channel7_IRQn interrupt configuration */
-  HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 0, 0);
-  HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
   /* DMA2_Channel3_IRQn interrupt configuration */
   HAL_NVIC_SetPriority(DMA2_Channel3_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(DMA2_Channel3_IRQn);

+ 94 - 29
Core/Src/main.c

@@ -34,7 +34,7 @@
 
 /* Private typedef -----------------------------------------------------------*/
 /* USER CODE BEGIN PTD */
-
+#define SAMPLE_TIME 10000
 /* USER CODE END PTD */
 
 /* Private define ------------------------------------------------------------*/
@@ -51,6 +51,7 @@
 
 /* USER CODE BEGIN PV */
 
+
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
@@ -67,23 +68,41 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
     /* 检查触发中断的定时器是否为 TIM2 */
     if (htim->Instance == TIM2) {
         sysinf.ms_conter++;
+					if(sysinf.ms_conter%1000 == 5){
+						sysinf.resendFlag = 1;
+					} 
 				 if(sysinf.ms_conter%10 == 0){
 					sysinf.ms10_flag = 1;
 					 sysinf.conter10ms++;
 					if(sysinf.ms_conter%1000 == 0){
 						sysinf.s1_flag = 1;
+						if(sysinf.ms_conter%SAMPLE_TIME == 0){
+							sysinf.samp_flag = 1;
+						}
+            
 						if(sysinf.ms_conter%10000 == 0){
 							sysinf.s10_flag = 1;
-						}
+						}            
 					}
-					Motor_mix_work();
+					 Motor_mix_work();
+				 }
+				 if(sysinf.ms_conter%100 == 1){          
+            float temp = getADC_Chanel_value(0);
+            sysinf.heaterMaster.pid.realtemp = temp + sysinf.heaterMaster.offset;
+            heater_work(&sysinf.heaterMaster);
+				 }
+				 if(sysinf.ms_conter%100 == 2){
+            lysis_work();
 				 }
 				 if(sysinf.ms_conter%100 == 1){
 					 sysinf.deal_espFlag=1;
-				 }
-				 
+				 }         
 				 if(sysinf.ms_conter%50 == 0){
 					 light_ctrl();
+
+						if(sysinf.ms_conter%(OFFLINE_TIME/2) == 0){
+							sysinf.upheart_flag = 1;
+						}
 				 }
 				 
     }
@@ -140,10 +159,6 @@ int main(void)
   light_refresh(COLOR_YELLOW, COLOR_YELLOW);
 	con_sysinf_debugUart((void *)&huart1);
   Van_Debug_UART_Init((UART_HandleTypeDef *)sysinf.debugUart);
-	if (HAL_TIM_Base_Start_IT(&htim2) != HAL_OK) {
-			/* 启动失败,可在此处添加错误处理 */
-			Error_Handler();
-	}
 	ADC_Inner_start();
 	load_com_pwm_Cfg(&sysinf.devdesc);
 	sysinf.scannerUart = &huart4;
@@ -157,31 +172,41 @@ int main(void)
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
 	
-	Van_Device_Printf(VAN_LOG_CRITICAL, "\n-----------------------------\n\r");
-	Van_Device_Printf(VAN_LOG_CRITICAL,"*			  build %s %s						   *\n",__DATE__,__TIME__);
-	Van_Device_Printf(VAN_LOG_CRITICAL, "ATCG ControlBoard\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "\n-----------------------------\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT,"*			  build %s %s						   *\n",__DATE__,__TIME__);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "ATCG ControlBoard\n\r");
 #ifdef ONE_CHIP_GIT_SHA
-	Van_Device_Printf(VAN_LOG_CRITICAL, "git sha: %s\n\r", ONE_CHIP_GIT_SHA);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "git sha: %s\n\r", ONE_CHIP_GIT_SHA);
 #endif  
-	Van_Device_Printf(VAN_LOG_CRITICAL, "desversion 0x%x \n\r",sysinf.devdesc.desversion);
-	Van_Device_Printf(VAN_LOG_CRITICAL, "dev type:%d  ver:%d\n\r",sysinf.devdesc.deveice_type,sysinf.devdesc.deveice_ver);
-	Van_Device_Printf(VAN_LOG_CRITICAL, "structure type:%d	structure ver:%d\n\r",sysinf.devdesc.structure_type,sysinf.devdesc.structure_ver);
-	Van_Device_Printf(VAN_LOG_CRITICAL, "hard type:%d  hard ver :%d \n\r",sysinf.devdesc.hardware_type,sysinf.devdesc.hardware_ver);
-	Van_Device_Printf(VAN_LOG_CRITICAL, "Soft Version: V%d.%d.%d.%d\n\r",SOFT_VERSION_1, SOFT_VERSION_2, SOFT_VERSION_3, SOFT_VERSION_4);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "desversion 0x%x \n\r",sysinf.devdesc.desversion);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "dev type:%d  ver:%d\n\r",sysinf.devdesc.deveice_type,sysinf.devdesc.deveice_ver);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "structure type:%d	structure ver:%d\n\r",sysinf.devdesc.structure_type,sysinf.devdesc.structure_ver);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "hard type:%d  hard ver :%d \n\r",sysinf.devdesc.hardware_type,sysinf.devdesc.hardware_ver);
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "Soft Version: V%d.%d.%d.%d\n\r",SOFT_VERSION_1, SOFT_VERSION_2, SOFT_VERSION_3, SOFT_VERSION_4);
   if(sysinf.resetByIwdg){
-	Van_Device_Printf(VAN_LOG_CRITICAL, "**************************************************************************\n\r");
-	Van_Device_Printf(VAN_LOG_CRITICAL, "*                                                                        *\n\r");
-	Van_Device_Printf(VAN_LOG_CRITICAL, "*                                iwdg reset                              *\n\r");
-	Van_Device_Printf(VAN_LOG_CRITICAL, "*                                                                        *\n\r");
-	Van_Device_Printf(VAN_LOG_CRITICAL, "**************************************************************************\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "**************************************************************************\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "*                                                                        *\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "*                                iwdg reset                              *\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "*                                                                        *\n\r");
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "**************************************************************************\n\r");
   }
   cfg_param_init();
-	if(	SensorSelfCheck()){
-		Van_Device_Printf(VAN_LOG_CRITICAL, "SensorSelfCheck failed\n\r");
-	}else{
-		Van_Device_Printf(VAN_LOG_CRITICAL, "SensorSelfCheck pass\n\r");
+  Motor_Init();
+  updatParm_lysis();
+  updatParm_heater_master();
+  check_heater_master_needPreheat();
+	if (HAL_TIM_Base_Start_IT(&htim2) != HAL_OK) {
+			/* 启动失败,可在此处添加错误处理 */
+			Error_Handler();
 	}
+	// if(	SensorSelfCheck()){
+	// 	Van_Device_Printf(VAN_LOG_ALLPRINT, "SensorSelfCheck failed\n\r");
+	// }else{
+	// 	Van_Device_Printf(VAN_LOG_ALLPRINT, "SensorSelfCheck pass\n\r");
+	// }
 	
+   sysinf.psmMaster.state = SW_Read_To_Board_Selftest;
+
   while (1)
   {
     /* USER CODE END WHILE */
@@ -189,17 +214,57 @@ int main(void)
     /* USER CODE BEGIN 3 */
 		svanner_receive_analysis();
   	Van_Debug_UART1_test();
+    if(((cmd_rx_last + CMD_BUF_SIZE - cmd_rx_header) % CMD_BUF_SIZE) >= 8){
+		    uint32_t  uart0_recOK = DecodeNew(&uart0_massage,uart0_data,g_cmd_rx_buf, &cmd_rx_header,cmd_rx_last,CMD_BUF_SIZE);
+        if(uart0_recOK){
+            uart0_recOK = 0;
+            sysinf.pc_channel_recv  = PC_CONNECT_TYPE_UART;
+            sysinf.pc_link_timeout = 0;
+            uart0_massage.data = (char *)uart0_data;            
+            deal_mUnion_cmd(&uart0_massage);
+            query_pc_cmd(&uart0_massage);
+          }
+      }
+
 		if(sysinf.deal_espFlag){
 			sysinf.deal_espFlag =0;
 			WIFI_process();
 		}
 		if(	sysinf.s1_flag == 1){
 			sysinf.s1_flag = 0;
-			HAL_GPIO_TogglePin((GPIO_TypeDef *)sysinf.run_led_port, sysinf.run_led_pin); /*green*/
+			HAL_GPIO_TogglePin((GPIO_TypeDef *)sysinf.run_led_port, sysinf.run_led_pin); /*green*/      
+      update_work();
+      resetSampleData(&sysinf.psmMaster);
+		}
+    if(sysinf.resendFlag == 1 ){
+      sysinf.resendFlag  = 0;      
+      reSend_QR();	
+      resend_error_update();
+      re_send_state();
+    }
+		if(	sysinf.ms10_flag == 1){
+			sysinf.ms10_flag = 0;
+      if(sysinf.QRBeepTimeer){
+        sysinf.QRBeepTimeer --;
+        if(sysinf.QRBeepTimeer == 0){
+            HAL_GPIO_WritePin((GPIO_TypeDef *)sysinf.beep_port, sysinf.beep_pin,GPIO_PIN_RESET);
+        }
+      }		
+		}
+
+		if(	sysinf.upheart_flag == 1){
+			sysinf.upheart_flag = 0;
+      if((sysinf.pc_channel_recv  == PC_CONNECT_TYPE_NULL)||(sysinf.pc_channel_recv == PC_CONNECT_TYPE_WIFI && sysinf.pc_link_timeout > (OFFLINE_TIME/3)) ){
+			  send_Devinf_pc();
+      }	       
 		}
 		if(	sysinf.s10_flag == 1){
-			sysinf.s10_flag = 0;
+			sysinf.s10_flag = 0;	      
+			if(sysinf.pc_link_timeout > OFFLINE_TIME){
+				send_Devinf_pc();
+			}
 		}
+    usr_state_machine(&sysinf.psmMaster,&sysinf.heaterMaster);
   }
   /* USER CODE END 3 */
 }

+ 0 - 30
Core/Src/stm32f1xx_it.c

@@ -61,8 +61,6 @@ extern TIM_HandleTypeDef htim2;
 extern DMA_HandleTypeDef hdma_uart4_rx;
 extern DMA_HandleTypeDef hdma_usart1_rx;
 extern DMA_HandleTypeDef hdma_usart1_tx;
-extern DMA_HandleTypeDef hdma_usart2_rx;
-extern DMA_HandleTypeDef hdma_usart2_tx;
 extern UART_HandleTypeDef huart4;
 extern UART_HandleTypeDef huart1;
 extern UART_HandleTypeDef huart2;
@@ -250,34 +248,6 @@ void DMA1_Channel5_IRQHandler(void)
   /* USER CODE END DMA1_Channel5_IRQn 1 */
 }
 
-/**
-  * @brief This function handles DMA1 channel6 global interrupt.
-  */
-void DMA1_Channel6_IRQHandler(void)
-{
-  /* USER CODE BEGIN DMA1_Channel6_IRQn 0 */
-
-  /* USER CODE END DMA1_Channel6_IRQn 0 */
-  HAL_DMA_IRQHandler(&hdma_usart2_rx);
-  /* USER CODE BEGIN DMA1_Channel6_IRQn 1 */
-
-  /* USER CODE END DMA1_Channel6_IRQn 1 */
-}
-
-/**
-  * @brief This function handles DMA1 channel7 global interrupt.
-  */
-void DMA1_Channel7_IRQHandler(void)
-{
-  /* USER CODE BEGIN DMA1_Channel7_IRQn 0 */
-
-  /* USER CODE END DMA1_Channel7_IRQn 0 */
-  HAL_DMA_IRQHandler(&hdma_usart2_tx);
-  /* USER CODE BEGIN DMA1_Channel7_IRQn 1 */
-
-  /* USER CODE END DMA1_Channel7_IRQn 1 */
-}
-
 /**
   * @brief This function handles EXTI line[9:5] interrupts.
   */

+ 4 - 4
Core/Src/tim.c

@@ -48,7 +48,7 @@ void MX_TIM1_Init(void)
   htim1.Instance = TIM1;
   htim1.Init.Prescaler = 63;
   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
-  htim1.Init.Period = 65535;
+  htim1.Init.Period = 1000;
   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
   htim1.Init.RepetitionCounter = 0;
   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@ -61,7 +61,7 @@ void MX_TIM1_Init(void)
   {
     Error_Handler();
   }
-  if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
+  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
   {
     Error_Handler();
   }
@@ -71,14 +71,14 @@ void MX_TIM1_Init(void)
   {
     Error_Handler();
   }
-  sConfigOC.OCMode = TIM_OCMODE_TIMING;
+  sConfigOC.OCMode = TIM_OCMODE_PWM1;
   sConfigOC.Pulse = 0;
   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
-  if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
+  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
   {
     Error_Handler();
   }

+ 0 - 39
Core/Src/usart.c

@@ -30,8 +30,6 @@ UART_HandleTypeDef huart2;
 DMA_HandleTypeDef hdma_uart4_rx;
 DMA_HandleTypeDef hdma_usart1_rx;
 DMA_HandleTypeDef hdma_usart1_tx;
-DMA_HandleTypeDef hdma_usart2_rx;
-DMA_HandleTypeDef hdma_usart2_tx;
 
 /* UART4 init function */
 void MX_UART4_Init(void)
@@ -257,39 +255,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
-    /* USART2 DMA Init */
-    /* USART2_RX Init */
-    hdma_usart2_rx.Instance = DMA1_Channel6;
-    hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
-    hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
-    hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
-    hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
-    hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
-    hdma_usart2_rx.Init.Mode = DMA_NORMAL;
-    hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
-    if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
-    {
-      Error_Handler();
-    }
-
-    __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
-
-    /* USART2_TX Init */
-    hdma_usart2_tx.Instance = DMA1_Channel7;
-    hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
-    hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
-    hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
-    hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
-    hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
-    hdma_usart2_tx.Init.Mode = DMA_NORMAL;
-    hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
-    if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
-    {
-      Error_Handler();
-    }
-
-    __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
-
     /* USART2 interrupt Init */
     HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
     HAL_NVIC_EnableIRQ(USART2_IRQn);
@@ -363,10 +328,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
     */
     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
 
-    /* USART2 DMA DeInit */
-    HAL_DMA_DeInit(uartHandle->hdmarx);
-    HAL_DMA_DeInit(uartHandle->hdmatx);
-
     /* USART2 interrupt Deinit */
     HAL_NVIC_DisableIRQ(USART2_IRQn);
   /* USER CODE BEGIN USART2_MspDeInit 1 */

+ 140 - 82
DriverInterface/ESP32_WROOM_32D.c

@@ -10,7 +10,8 @@ extern int Flag3S;
 #define g_uMsgCmdFrameLen (6)
 extern uint8_t Devicenum;
 extern uint8_t g_wifi_rx_buf[WIFI_RX_BUF_SIZE];
-extern uint8_t g_wifi_rx_len;
+extern uint32_t g_wifi_rx_last;
+extern uint32_t g_wifi_rx_head;
 uint8_t wifi_tx_buf[WIFI_TX_BUF_SIZE];
 uint16_t wifi_tx_len;
 
@@ -30,7 +31,8 @@ static int resendtime = 0;
 uint16_t WriteComm2(char *data, uint16_t len)
 {
     //return UART_Write(UART2, data, len);
-	HAL_UART_Transmit_DMA((UART_HandleTypeDef *)sysinf.ESPUart,(const uint8_t *)data, len);
+    HAL_UART_Transmit((UART_HandleTypeDef *)sysinf.ESPUart,(const uint8_t *)data, len,1000);
+	// HAL_UART_Transmit_DMA((UART_HandleTypeDef *)sysinf.ESPUart,(const uint8_t *)data, len);
 	return 0;
 }
 
@@ -43,7 +45,7 @@ void ESP32_Send_AT_Cmd(char *cmd,uint32_t time)
     strcpy(buff, cmd);
     strcat(buff, "\r\n");
 
-    Van_Device_Printf(VAN_LOG_NOTICE,"\nW--> %s", buff); 
+    Van_Device_Printf(VAN_LOG_WIFI,"\nW--> %s", buff); 
 
   	WriteComm2(buff, strlen(buff));
 
@@ -182,7 +184,7 @@ void ESP32_STOPTCP ( ENUM_ID_NO_TypeDef id )
 {
   char cCmd [60];
   my_sprintf ( cCmd,sizeof(cCmd), "AT+CIPCLOSE=%d", id);
-  ESP32_Send_AT_Cmd ( cCmd,  5000 );
+  ESP32_Send_AT_Cmd ( cCmd,  20000 );
 }
 
 /*退出透传*/
@@ -224,7 +226,7 @@ int WIFI_Send_Data(uint8_t *data, uint16_t len, uint8_t flag)
         return -3;
 
 	if(len > WIFI_TX_BUF_SIZE){
-		 Van_Device_Printf(VAN_LOG_NOTICE,"WIFI_Send len:%d error ", len);
+		 Van_Device_Printf(VAN_LOG_WIFI,"WIFI_Send len:%d error ", len);
 		return -1;
 	}
     memcpy(&wifi_tx_buf[wifi_tx_len], data, len);
@@ -322,29 +324,80 @@ void WIFI_set_CloseConnect(void)
 	wifi_state = WIFI_CLOSE;  
 }
 
+// //在内存中查找字符串
+// char* find_str(void *src, int size, char *str)
+// {
+// 	char *p = (char*)src;
+// 	int len = strlen((const char *)str);
+
+// 	if(len < 1)
+// 		return p;
+
+// 	for(int i = 0; i < size; i++)
+// 	{
+// 		if(p[i] == *str)
+// 		{
+// 			if( 0 == memcmp(&p[i], str, len))
+// 			{
+// 				return &p[i];
+// 			}
+// 		}
+// 	}
+
+// 	return NULL;
+// }
+
+
+
 //在内存中查找字符串
-char* find_str(void *src, int size, char *str)
-{
-	char *p = (char*)src;
-	int len = strlen((const char *)str);
+char* find_str_loop(void *src, int size, uint32_t *start, uint32_t end, char *str) {
+    if (src == NULL || start == NULL || str == NULL || size <= 0)
+        return NULL;
 
-	if(len < 1)
-		return p;
+    unsigned char *buf = (unsigned char*)src;
+    int head = *start;
+    int len = strlen(str);
 
-	for(int i = 0; i < size; i++)
-	{
-		if(p[i] == *str)
-		{
-			if( 0 == memcmp(&p[i], str, len))
-			{
-				return &p[i];
-			}
-		}
-	}
+    // 空串直接返回当前位置(不移动头指针)
+    if (len == 0) {
+        return (char*)(buf + head);
+    }
 
-	return NULL;
-}
+    // 计算有效数据长度
+    int valid_len;
+    if (end >= head)
+        valid_len = end - head;
+    else
+        valid_len = (size - head) + end;
+
+    // 若有效数据长度小于目标串长度,不可能匹配
+    if (valid_len < len)
+        return NULL;
+
+    // 从 head 开始遍历所有可能的起始位置(不包括 end)
+    int pos = head;
+    while (pos != end) {
+        // 检查从 pos 开始的 len 个字节是否与 str 匹配
+        int i;
+        for (i = 0; i < len; i++) {
+            int idx = (pos + i) % size;
+            if (buf[idx] != (unsigned char)str[i])
+                break;
+        }
+        if (i == len) {  // 完全匹配
+            // 更新头指针为匹配串之后的位置
+            *start = (pos + len) % size;
+            return (char*)(buf + pos);
+        }
+        // 移动到下一个起始位置
+        pos = (pos + 1) % size;
+        // 如果移动后到达 end,提前终止(有效数据遍历完毕)
+        // 但 while 条件会处理,可省略
+    }
 
+    // 未找到
+    return NULL;
+}
 
 /********************************************************************
  *                         WIFI_recv_deal()
@@ -359,16 +412,16 @@ char* find_str(void *src, int size, char *str)
 void WIFI_recv_deal(void)
 {
     char *p;
-    int data_len = g_wifi_rx_len;
-    int udp_data_len = 0;
+    int data_len = g_wifi_rx_last>g_wifi_rx_head?(g_wifi_rx_last-g_wifi_rx_head):(WIFI_RX_BUF_SIZE+g_wifi_rx_last-g_wifi_rx_head);
+    // int udp_data_len = 0;
     char* data = (char*)g_wifi_rx_buf;
-    if(g_wifi_rx_len < 5)
+    if(data_len < 5)
         return;
 
     //判断是否接收完成
     if(wifi_state > WIFI_LISTEN)
     {
-        if(data[data_len-1] != '\n' && data[data_len-2] != '\n')
+        if(data[g_wifi_rx_last-1] != '\n' && data[g_wifi_rx_last-2] != '\n')
         {
             return;
         }
@@ -379,12 +432,14 @@ void WIFI_recv_deal(void)
 	//指令模式
     case WIFI_POWEROFF:
     case WIFI_ERROR:
-        if(NULL != find_str(data, data_len , "ready") || NULL != find_str(data, data_len , "boot"))
+        if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last,"ready") ||
+            NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last,"boot"))
 		{
 			wifi_state = WIFI_POWERON;
             wifi_ack_delay = 0;
 			memset(wifi_tx_buf,0,sizeof(wifi_tx_buf));
 			wifi_tx_len = 0;
+            //  wifi_receive_clear();
 		} 
         break;
     case WIFI_POWERON:
@@ -395,9 +450,9 @@ void WIFI_recv_deal(void)
     case WIFI_GET_IP:
     case WIFI_SETMUX:
     case WIFI_LISTEN:		
-    	Van_Device_Printf(VAN_LOG_NOTICE,"\nW<-- %s", data);
-        if(NULL != find_str(data, data_len , "OK\r\n"))
+        if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "OK\r\n"))
 		{
+    	    Van_Device_Printf(VAN_LOG_WIFI,"\nW<-- %s", data);
             wifi_ack_delay = 0;	
 			if(WIFI_LISTEN == wifi_state){
 				/*上电需要广播地址*/			
@@ -410,43 +465,51 @@ void WIFI_recv_deal(void)
 				        ESP32_Send_AT_Cmd ( cStr,  3000 );
 					}
 					sysinf.pc_link_timeout = 0;	
+                    sysinf.pc_channel_recv  = PC_CONNECT_TYPE_WIFI; 
 				}	
 			}
 			wifi_state++;
-			resendtime = 0;
+			resendtime = 0;            
+            HAL_Delay(1000);			
+            // wifi_receive_clear();	
 		}
         break;
-    case WIFI_CWLAP:		
-    	Van_Device_Printf(VAN_LOG_NOTICE,"\nW<-- %s", data);
-        if((NULL != find_str(data, data_len , "OK\r\n")) ||
-					(NULL != find_str(data, data_len , sysinf.wifiname)))
+    case WIFI_CWLAP:{
+        char* strStart = find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last,sysinf.wifiname);
+        uint32_t apHeader = g_wifi_rx_head;
+        if(NULL != strStart)
 		{
-            wifi_ack_delay = 0;		
-			/*char APname [70];
-            my_sprintf ( APname, sizeof(APname), "\"%s\"", sysinf.wifiname);*/
-			char* strStart = find_str(data, data_len ,sysinf.wifiname); 
-			if(NULL != strStart){
-			 strStart+=strlen(sysinf.wifiname);
-			 strStart = find_str(strStart, data_len ,",\""); 
-			 strStart += 2;/*跳过,\*/
-			 memcpy(&MAC_ADDR[0], strStart, 17);
-			 MAC_ADDR[18] = 0;
-			 wifi_state++;
-			}			
+            if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "OK\r\n")){   
+                /*循环始终需要OK,找到OK后,恢复APhead位置,重新搜寻mac*/    
+                g_wifi_rx_head =  apHeader;       
+                Van_Device_Printf(VAN_LOG_WIFI,"\nW<-- %s", data);
+                wifi_ack_delay = 0;		
+                strStart+=strlen(sysinf.wifiname);
+                strStart =find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last,",\""); 
+                unsigned int startPos = ((unsigned int)strStart-(unsigned int)g_wifi_rx_buf + 2)%WIFI_RX_BUF_SIZE;/*跳过,\*/
+                for(unsigned i=0;i<17;i++){
+                    MAC_ADDR[i] = g_wifi_rx_buf[(i+startPos)%WIFI_RX_BUF_SIZE]; 
+                }
+                MAC_ADDR[18] = 0;
+                wifi_state++; 
+            }
+				
+            //  wifi_receive_clear();		
 		}
+    }        
         break;
     //数据模式
     case WIFI_TRANS:
         //收到AT+CIPSEND回应,可发送数据  
-        if(NULL != find_str(data, data_len , "CLOSED"))			
+        if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "CLOSED"))			
 		{      
-    		Van_Device_Printf(VAN_LOG_NOTICE,"\nW<-- %d %s", g_wifi_rx_len,data);
- 		   wifi_state = WIFI_LISTEN;
+    		Van_Device_Printf(VAN_LOG_WIFI,"\nW<-- %d %s", data_len,data);
+ 		    wifi_state = WIFI_LISTEN;
              wifi_ack_delay = 0;//从发送写指令,到此才算发送完成            
  			broadDevFlag = 0;
 		}
-		else if	((NULL != find_str(data, data_len , "ERROR"))||
-			(NULL != find_str(data, data_len , "SEND FAIL")))
+		else if	((NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "ERROR"))||
+			(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last,"SEND FAIL")))
 		{    
 			if(resendtime < MAX_RESEND_TIME){				
 				char cStr [40] = {0};
@@ -457,57 +520,52 @@ void WIFI_recv_deal(void)
 				wifi_state = WIFI_POWEROFF;
 				wifi_ack_delay = 0;
 			}
-			
-		} else if(NULL != find_str(data, data_len , "SEND OK"))
+			//  wifi_receive_clear();
+		} else if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "SEND OK"))
 		{
         	//收到AT+CIPSEND回应,可发送数据
-		    Van_Device_Printf(VAN_LOG_NOTICE,"\nW--> SEND OK", wifi_tx_len); 
+		    Van_Device_Printf(VAN_LOG_WIFI,"\n--> SEND OK", wifi_tx_len); 
             wifi_ack_delay = 0;//从发送写指令,到此才算发送完成
             wifi_tx_len = 0;
 			resendtime = 0;
             wifi_tx_len = 0;
 			memset(wifi_tx_buf, 0, sizeof(wifi_tx_buf));
+            //  wifi_receive_clear();
 		}
-		 else if(NULL != find_str(data, data_len , "OK\r\n"))
+		 else if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "OK\r\n"))
 		{
-		    Van_Device_Printf(VAN_LOG_NOTICE,"\nW--> %d", wifi_tx_len); 
-			WriteComm2((char *)wifi_tx_buf, wifi_tx_len);
+            //  wifi_receive_clear();
+		    Van_Device_Printf(VAN_LOG_WIFI,"\n--> OK W %d", wifi_tx_len); 
+			WriteComm2((char *)wifi_tx_buf, wifi_tx_len+1);
             wifi_ack_delay = 3000;
 		}
 
-		if(NULL != find_str(data, data_len , "DISCONNECT"))
+		if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "DISCONNECT"))
 		{
-		    Van_Device_Printf(VAN_LOG_NOTICE,"\nW--> %s", data); 
+		    Van_Device_Printf(VAN_LOG_WIFI,"\nW--> %s", data); 
 			wifi_state = WIFI_POWEROFF;
             wifi_ack_delay = 0;
 		}
         
         //收到PC数据
-        p = find_str(data, data_len , "+IPD,0,");
+        p = find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "+IPD,0,");
         if(NULL != p)
 		{
-			Van_Device_Printf(VAN_LOG_NOTICE,"\nW<-- %d", g_wifi_rx_len);
-            //计算数据长度(sscanf函数有问题!)
-            p += sizeof("+IPD,0");
-            udp_data_len = atoi(p);
-
-            //数据
-            p = strchr(p, ':') +1;
-
-            if( p - data  > data_len - udp_data_len)    //未接收完成
-            {
-                p = find_str(data, data_len , "+IPD,0,");
-                memset(data, 0 ,p - data);
-                return;
-            }
-
+            int iProcLen = DecodeNew(&uart0_massage,uart0_data,g_wifi_rx_buf, &g_wifi_rx_head,g_wifi_rx_last,WIFI_RX_BUF_SIZE);
+            if (iProcLen > 0)   {                        
+                sysinf.pc_channel_recv  = PC_CONNECT_TYPE_WIFI;            
+                sysinf.pc_link_timeout = 0;
+								uart0_massage.data = (char *)uart0_data;    
+                query_pc_cmd(&uart0_massage);
+            }    
+            //  wifi_receive_clear();
  //           set_pc_chanel_recv(1);
  //   	    b2b_recv_data(p, udp_data_len);
 		}
 
         break;    
     case WIFI_CLOSE:{
-        if(NULL != find_str(data, data_len , "CLOSED\r\n"))
+        if(NULL != find_str_loop(g_wifi_rx_buf, WIFI_RX_BUF_SIZE ,&g_wifi_rx_head, g_wifi_rx_last, "CLOSED\r\n"))
 		{
 			wifi_state = WIFI_LISTEN;
             wifi_ack_delay = 0;	
@@ -653,7 +711,7 @@ void WIFI_send_deal(void)
 			}
         break;
     case WIFI_CLOSE:
-        ESP32_STOPTCP(Multiple_ID_0);
+        ESP32_STOPTCP(Single_ID_0);
         break;
     
     default:
@@ -668,10 +726,10 @@ void WIFI_send_deal(void)
 void WIFI_process()
 {
 
-		if(sysinf.pc_channel_recv == 2  &&  wifi_state > WIFI_SETMUX){
-			/*串口状态下,不走wifi处理*/
-			return;
-		}
+    if(sysinf.pc_channel_recv == 2  &&  wifi_state > WIFI_SETMUX){
+        /*串口状态下,不走wifi处理*/
+        return;
+    }
     WIFI_recv_deal();
 
     WIFI_send_deal();

+ 239 - 84
DriverInterface/communication.c

@@ -6,11 +6,102 @@
 char DeviceNum[64] = "mini7 2312230001 v1.1, ";
 uint8_t pc_send_wait = 0;     //数据发送等待,0可以立即发送;>0正在发送请等待
 uint8_t pc_send_cmd = 0;     //当前发送cmd
+
 static unsigned char seq  =0;
 
+
+extern uint8_t wifi_tx_buf[WIFI_TX_BUF_SIZE];
+extern uint16_t wifi_tx_len;
+
+unsigned int check_to_pc_busy(void){
+	/*判断是否可以发送,缓冲区为空或者索引为0*/
+	CmdMessage *pMessage = (CmdMessage *)wifi_tx_buf;
+	if(pMessage->seq == 0 || pMessage->len == 0){
+		return 1;
+	}
+	return 0;	
+}
+
+/********************************************************************
+ *    uint16_t data_send_to_pc(enum pc_cmd_type cmd, char *data, uint16_t len)
+ *
+ *描述:发生数据到PC
+ *参数:Devicenum 0-发至主机,1发至从机
+ *返回:无
+ *其他:无
+ *--------------------------------------------------------------------
+ *记录:
+ ********************************************************************/
+CmdMessage msg;	
+int data_send_to_pc(pc_cmd_type cmd, char *data, unsigned short len)
+{
+    uint16_t check;
+    int ret = -1;
+    msg.head = 0x55aa;
+    msg.seq = CDM_FRAME_TYPE_REQ;
+    msg.cmd = cmd;
+    msg.tail = 0x5a;
+    msg.len = len;
+    msg.data = data;
+
+	if((len+8) > WIFI_TX_BUF_SIZE){
+		 Van_Device_Printf(VAN_LOG_COMM,"send_to_pc :%x  len:%d error ", cmd, len);
+		 return  ret;
+	}
+	if(sysinf.pc_channel_recv  == PC_CONNECT_TYPE_NULL  && cmd != PC_CMD_SETIP){
+				/*无链接情况,只考虑*/
+				return ret;
+	}			
+	if((sysinf.pc_channel_recv  == PC_CONNECT_TYPE_WIFI  && PC_CMD_DATASCOPE == cmd)|| /*网口不上报数据*/
+		(sysinf.pc_channel_recv  == PC_CONNECT_TYPE_UART  && PC_CMD_SETIP == cmd))     /*串口不广播UDP*/{
+		return  ret;
+	}	
+    switch(cmd)
+    {
+        case PC_CMD_QRCODE:
+        case PC_CMD_DATA_UPLOAD:
+        case PC_CMD_REPORT_RESULT:
+			seq++;
+			if(0xff == seq){
+				seq =1;
+			}
+            msg.seq = seq;
+            break;
+        default:    //应答
+            break;
+    }
+	check = checkSum((const unsigned char *)&msg.seq, 4);
+	check += checkSum((const unsigned char *)data, len);
+	msg.checksum = check & 0xFF;
+	msg.tail = (check >> 8);	
+	if(check_to_pc_busy()){		
+		memcpy(&wifi_tx_buf[0], (uint8_t*)&msg, MSG_CMDFRAME_LEN);
+		memcpy(&wifi_tx_buf[MSG_CMDFRAME_LEN], data, len);
+		memcpy(&wifi_tx_buf[MSG_CMDFRAME_LEN+len],  (uint8_t*)&check, 2);
+		wifi_tx_len = MSG_CMDFRAME_LEN+len+2;	
+	}else{
+		return ret;
+	}	
+	if((sysinf.pc_channel_recv  == PC_CONNECT_TYPE_WIFI || cmd == PC_CMD_SETIP ) && PC_CMD_SETWIFI != cmd)
+	{			
+		return WIFI_ReSend();
+	}
+	else
+	{	
+    Van_Debug_UART_Send_DMA((unsigned char *)wifi_tx_buf, wifi_tx_len); //将收到的信息发送出		
+		memset(wifi_tx_buf, 0, sizeof(wifi_tx_buf));
+	}
+   return 0;
+}
+
+
 void PackDeviceNum(void){		
 	int len = 0;
 	memset((uint8_t *)&DeviceNum, 0 ,sizeof(DeviceNum));
+    uint32_t uid[3];
+    uid[0] = HAL_GetUIDw0(); // 读取低32位[reference:16]
+    uid[1] = HAL_GetUIDw1(); // 读取中间32位[reference:17]
+    uid[2] = HAL_GetUIDw2(); // 读取高32位[reference:18]
 #ifdef ONECHIP_MINI_ONE
 	my_sprintf(&DeviceNum[len],sizeof(DeviceNum), "Mini7-one,V%d.%d.%d.%d",SOFT_VERSION_1,SOFT_VERSION_2,SOFT_VERSION_3,SOFT_VERSION_4);	
 #else 
@@ -22,13 +113,33 @@ void PackDeviceNum(void){
 #endif //ONECHIP_MINI_ONE
 	strcat(DeviceNum, ",");
 	len = strlen(DeviceNum);
-	// hex_to_ascii(get_uid(), &DeviceNum[len], 12);	//uid
-	// strcat(DeviceNum, ",");
+	hex_to_ascii((const void *)uid, &DeviceNum[len], 12);	//uid
+	strcat(DeviceNum, ",");
 	strcat(DeviceNum, (const char *)sysinf.SN);
 	strcat(DeviceNum, " ");
 	Van_Device_Printf(VAN_LOG_INFO,"DeviceNum:%s\n", DeviceNum);
 }
 
+
+/********************************************************************
+ *    uint16_t send_Devinf_pc(void)
+ *
+ *描述:发送设备信息到主机,便于主机下法TCP信息
+ *参数:无
+ *返回:无
+ *其他:无
+ *--------------------------------------------------------------------
+ *记录:
+ ********************************************************************/
+void send_Devinf_pc(void)
+{
+
+    uint16_t len = 0;
+	len =  strlen(DeviceNum);
+	data_send_to_pc(PC_CMD_SETIP,DeviceNum,len);
+
+}
+
 /********************************************************************
  * int handshake_action(unsigned char cmd, unsigned char *parg)
  *
@@ -112,38 +223,6 @@ int SN_action(unsigned char cmd, unsigned char *parg)
 }
 
 
-/********************************************************************
- * int dev_check_start_action(unsigned char cmd, unsigned char *parg)
- *
- *描述:设备检测开始上报命令处理
- *参数:无
- *返回:无
- *其他:无
- *--------------------------------------------------------------------
- *记录:
- ********************************************************************/
-// int check_start_action(unsigned char cmd, unsigned char *parg)
-//{
-//
-//	return 0;
-// }
-
-/********************************************************************
- * int check_result_action(unsigned char cmd, unsigned char *parg)
- *
- *描述:设备检测结果上报命令处理
- *参数:无
- *返回:无
- *其他:无
- *--------------------------------------------------------------------
- *记录:
- ********************************************************************/
-// int check_result_action(unsigned char cmd, unsigned char *parg)
-//{
-//
-//	return 0;
-// }
-
 /********************************************************************
  * int seq_selftest_action(unsigned char cmd, unsigned char *parg)
  *
@@ -171,12 +250,12 @@ int seq_selftest_action(unsigned char cmd, unsigned char *parg)
  ********************************************************************/
 int confirm_result_action(unsigned char cmd, unsigned char *parg)
 {
-    if(0 == memcmp(parg,sysinf.psmMaster.card_param_info.pid, 10 )){
-         sysinf.psmMaster.state  = SW_move_card;
-    }else if (0 == memcmp(parg,sysinf.psmSlave.card_param_info.pid, 10 ))
-    {
-         sysinf.psmSlave.state  = SW_move_card;
-    }
+    // if(0 == memcmp(parg,sysinf.psmMaster.card_param_info.pid, 10 )){
+    //      sysinf.psmMaster.state  = SW_move_card;
+    // }else if (0 == memcmp(parg,sysinf.psmSlave.card_param_info.pid, 10 ))
+    // {
+    //      sysinf.psmSlave.state  = SW_move_card;
+    // }
     return 0;
 }
 
@@ -208,7 +287,7 @@ int default_pc_response(CmdMessage *pMsg, unsigned char result)
  ********************************************************************/
 int handshake_response(CmdMessage *pMsg, unsigned char result)
 {
-	int len = 0;
+	unsigned short len = 0;
 	PackDeviceNum();
 	len = strlen(DeviceNum);
 	return data_send_to_pc((pc_cmd_type)pMsg->cmd, (char*)DeviceNum, len);
@@ -217,7 +296,12 @@ int handshake_response(CmdMessage *pMsg, unsigned char result)
 	
 int AskState_response(CmdMessage *pMsg, unsigned char result)
 {
-   	data_send_to_pc(PC_CMD_ASKSTATE, (char *)sysinf.SN, sizeof(stateinfDef));  
+        stateinfDef st;
+        st.amplifState =sysinf.amplifState;
+        st.lysisState =sysinf.lysisState;
+        memcpy(st.SN, &sysinf.SN, 7);
+
+   	data_send_to_pc(PC_CMD_ASKSTATE, (char *)&st, sizeof(stateinfDef));  
     return 0;  
 }
 
@@ -241,13 +325,13 @@ int ans_response(CmdMessage *pMsg, unsigned char result)
 	/*清空需要上位机应答的消息*/
 	switch(pMsg->cmd){
 		case PC_CMD_REPORT_REEOR:
-			sysinf.updateError = 0;
+			sysinf.updateError = 0;  
 			break;
 		case PC_CMD_UPDATESTATE:
 			sysinf.updateSt = 0;
 			break;
 		case PC_CMD_QRCODE:
-			sysinf.updateQR = 0;                
+			sysinf.updateQR = false;                
 			break;
 		case PC_CMD_DATA_UPLOAD:{
 			unsigned char *data = (unsigned char *)pMsg->data;			
@@ -289,7 +373,7 @@ int ans_response(CmdMessage *pMsg, unsigned char result)
 int confirm_qrcode_action(unsigned char cmd, unsigned char *parg)
 {
     //先判断主模块,优先给主模块,扫描上报上报也是相同处理    
-    svanner_receive_Rec_IDLE(sysinf.scannerUart);
+    svanner_receive_Rec_Start(sysinf.scannerUart);
     if(*parg == 1)
     {
         if((sysinf.psmMaster.state == SW_Scan_Qrcode || sysinf.psmMaster.state == SW_Chip_Id  ))   //主机空闲,给自己
@@ -379,9 +463,12 @@ int set_IP_action(uint8_t cmd, uint8_t *parg)
 int send_temp_parm(uint8_t cmd, uint8_t *parg)
 {
 	/*设置温度*/
+    sysinf.lysis.idletemp =  *(float *)(parg+4);
+    sysinf.lysis.pid.goal =  *(float *)(parg+8);
+    sysinf.lysis.worktime =  *(float *)(parg+12);
+    sysinf.lysis.worktime *= 10;
+    sysinf.lysis.recGoalFlag = 1;
 	return 1;
-		
-	
 }
 int setTemp_response(CmdMessage *pMsg, uint8_t result)
 {
@@ -503,42 +590,22 @@ void query_pc_cmd(CmdMessage *pMsg)
             	pc_resend_del(pMsg->seq);
                 Van_Device_Printf(VAN_LOG_INFO,"\n<-- pc cmd %x %d \n", pMsg->cmd, pMsg->seq);
             }
-			pMsg->data[pMsg->len] = 0;
+						pMsg->data[pMsg->len] = 0;
             unsigned char ret = mPCActionPack[i].action(mPCActionPack[i].cmd, (unsigned char *)pMsg->data);
             if (mPCActionPack[i].response)
             {
                 mPCActionPack[i].response(pMsg, ret);
             }
-			if(!(sysinf.pc_channel_recv == 1 && !sysinf.connectTcpFlag)){				
-    			sysinf.pc_link_timeout = 0;    //确保TCP通信上在变灯
-			}
+			
             break;
         }
     }
 }
 
-unsigned int check_to_pc_busy(void){
-	return 0;
-	
-}
 
 
 
 
-/********************************************************************
- *    uint16_t data_send_to_pc(enum pc_cmd_type cmd, char *data, uint16_t len)
- *
- *描述:发生数据到PC
- *参数:Devicenum 0-发至主机,1发至从机
- *返回:无
- *其他:无
- *--------------------------------------------------------------------
- *记录:
- ********************************************************************/
-unsigned short data_send_to_pc(pc_cmd_type cmd, char *data, unsigned short len)
-{
-   return 0;
-}
 
 
 /********************************************************************
@@ -556,37 +623,93 @@ int con_heat_action(uint8_t cmd, uint8_t *parg )
 //    CmdMessage *pMsg = (CmdMessageDef *)parg;
     CmdMessage *pMsg = (CmdMessage *)parg;;
     miniConfigPram *pram = (miniConfigPram *)pMsg->data;
+    uint8_t * pdata = (uint8_t *)pMsg->data;
     switch(pMsg->cmd){
+        case UINON_CMD_MOTORMOVE:{	
+            
+			sysinf.timeinner =  *(float *)(pMsg->data+4) * 100;
+			sysinf.swingspeed =  *(float *)(pMsg->data+8);
+			sysinf.swingtime =  *(float *)(pMsg->data+12) * 100;
+			sysinf.swingtimeRight =  *(float *)(pMsg->data+16) * 100;
+			sysinf.swingtimePause =  *(float *)(pMsg->data+20) * 100;	
+			if((1 == *(int *)(pMsg->data+pMsg->len - 4))){
+				cfg_save_cfg_param();	
+				Motor_Init();
+			}else{				
+				Motor_mix(sysinf.timeinner,sysinf.swingspeed,sysinf.swingtime,sysinf.swingtimeRight,sysinf.swingtimePause);
+			}		
+		    data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,  pMsg->len);
+        }break;			
+        case UINON_CMD_MOTORTRETURN:{		
+            Motor_reset();
+            data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
+        }break;			
         case UINON_CMD_THEROM_GET:{		
-            char data[28];
+            char data[40];
             *(float *)(data+0) = 0;
             *(float *)(data+4) = sysinf.lysis_offset;	
             *(float *)(data+8) = sysinf.lysis_overHeat;	
             *(float *)(data+12) = sysinf.lysis_overHeatTime;	
             *(float *)(data+16) = sysinf.lysis_Kp;	
             *(float *)(data+20) = sysinf.lysis_Ki;	
-            *(float *)(data+24) = sysinf.lysis_Kd;	
+            *(float *)(data+24) = sysinf.lysis_Kd;		
+            *(float *)(data+28) = sysinf.lysis.pid.goal;	
+            *(float *)(data+32) = sysinf.lysis.idletemp;	
+            *(float *)(data+36) = sysinf.lysis.worktime/10;	
             pMsg->data = data;
             pMsg->len = sizeof(data);
             data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
         }break;			
-        case UINON_CMD_THEROM_OFFSET:{					
-            sysinf.lysis_offset =  *(float *)(pMsg->data+4);	
-            
-            sysinf.lysis_Kp  = *(float *)(parg+4);
-            sysinf.lysis_Ki = *(float *)(parg+8);
-            sysinf.lysis_Kd     = *(float *)(parg+12);
-            sysinf.lysis_overHeat  = *(float *)(parg+16);
-            sysinf.lysis_overHeatTime = *(float *)(parg+20);
-            sysinf.lysis_offset  = *(float *)(parg+24);
-
+        case UINON_CMD_THEROM_OFFSET:{		
+					
+            sysinf.lysis_Kp  = *(float *)(pdata+4);
+            sysinf.lysis_Ki = *(float *)(pdata+8);
+            sysinf.lysis_Kd     = *(float *)(pdata+12);
+            sysinf.lysis_overHeat  = *(float *)(pdata+16);
+            sysinf.lysis_overHeatTime = *(float *)(pdata+20);
+            sysinf.lysis_offset  = *(float *)(pdata+24);
+					
+            data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
+            updatParm_lysis();
+            cfg_save_cfg_param();
+        }break;		
+        case UINON_CMD_AMPLIF_GET:{		
+            char data[44];
+            *(float *)(data+0) = 0;
+            *(float *)(data+4) = sysinf.amplif_Kp;	
+            *(float *)(data+8) = sysinf.amplif_Ki;	
+            *(float *)(data+12) = sysinf.amplif_Kd;	
+            *(float *)(data+16) = sysinf.PreHeatTime;	
+            *(float *)(data+20) = sysinf.holdTemp;	
+            *(float *)(data+24) = sysinf.readyTemp;		
+            *(float *)(data+28) = sysinf.PresetTempVal;	
+            *(float *)(data+32) = sysinf.PresetTempTime;	
+            *(float *)(data+36) = sysinf.adJTarget;	
+            *(float *)(data+40) = sysinf.SetTempVal;	
+            pMsg->data = data;
+            pMsg->len = sizeof(data);
+            data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
+        }break;			
+        case UINON_CMD_AMPLIF_SET:{		
+					
+            sysinf.amplif_Kp  = *(float *)(pdata+4);
+            sysinf.amplif_Ki = *(float *)(pdata+8);
+            sysinf.amplif_Kd     = *(float *)(pdata+12);
+            sysinf.PreHeatTime  = *(float *)(pdata+16);
+            sysinf.holdTemp = *(float *)(pdata+20);
+            sysinf.readyTemp  = *(float *)(pdata+24);
+            sysinf.PresetTempVal  = *(float *)(pdata+28);
+            sysinf.PresetTempTime  = *(float *)(pdata+32);
+            sysinf.adJTarget  = *(float *)(pdata+36);
+            sysinf.SetTempVal  = *(float *)(pdata+40);
+					
             data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
-            updatParm_therm();
+            updatParm_heater_master();
             cfg_save_cfg_param();
         }break;
         case UINON_CMD_THEROM_GOAL:{					
             float goal =  *(float *)(pMsg->data+4) ;
-            Set_therm(goal);
+            set_lysis(goal);
             data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
         }break;
         // case UINON_CMD_THEROM_CHECK:{
@@ -597,7 +720,14 @@ int con_heat_action(uint8_t cmd, uint8_t *parg )
     return 0;
 }
 const struct PCActionPack mUnionActionPack[] =
-    {
+    {   {
+            .cmd = UINON_CMD_MOTORMOVE,
+            .action = con_heat_action,
+        },
+        {
+            .cmd = UINON_CMD_MOTORTRETURN,
+            .action = con_heat_action,
+        },
         {
             .cmd = UINON_CMD_TEMP_ADJ,
             .action = con_heat_action,
@@ -634,6 +764,14 @@ const struct PCActionPack mUnionActionPack[] =
             .cmd = UINON_CMD_THEROM_GET,
             .action = con_heat_action,
         },
+        {
+            .cmd = UINON_CMD_AMPLIF_SET,
+            .action = con_heat_action,
+        },
+        {
+            .cmd = UINON_CMD_AMPLIF_GET,
+            .action = con_heat_action,
+        },
         {
             .cmd = UINON_CMD_THEROM_PID,
             .action = con_heat_action,
@@ -673,3 +811,20 @@ void deal_mUnion_cmd(CmdMessage *pMsg)
 		}
 	}
 }
+
+
+void update_work(void) {
+   float temp;
+   unsigned int st;
+
+	char data[20];
+    get_master_st(&temp,&st); 
+	*(unsigned int *)(data+0) = st;
+	*(float *)(data+4) =temp;
+    get_lysis_st(&temp,&st);
+	*(unsigned int *)(data+8) = st; 
+	*(float *)(data+12) = temp;
+	// data_send_to_pc(PC_CMD_UPDATETEMP, data,sizeof(data));
+    Van_Device_Printf(VAN_LOG_TEMP,"st:%d %f %d %f\n\r",sysinf.psmMaster.state,sysinf.heaterMaster.pid.realtemp,sysinf.lysis.thermostat_st,sysinf.lysis.pid.realtemp);
+	return ;
+}

+ 21 - 4
DriverInterface/communication.h

@@ -5,6 +5,18 @@
 
 
 
+typedef  enum 
+{
+    PC_CONNECT_TYPE_NULL = 0x00,
+    PC_CONNECT_TYPE_WIFI = 0x01,
+    PC_CONNECT_TYPE_UART = 0x02,
+}PC_CONNECT_TYPE_TYPE;
+enum cmd_frame_type
+{
+	CDM_FRAME_TYPE_REQ,
+	CDM_FRAME_TYPE_RESP
+};
+
 typedef  enum 
 {
     PC_CMD_HANDSHAKE = 0x01,
@@ -22,6 +34,7 @@ typedef  enum
 	PC_CMD_UPDATESTATE = 0x11,
 	PC_CMD_ASKSTATE = 0x12,
 	PC_CMD_SETSTATE = 0x13,/*设置强制改变模块状态*/
+	PC_CMD_UPDATETEMP = 0x14,/*设置强制改变模块状态*/
 	UINON_CMD_TEMP_ADJ = 0x40, /*校准参数*/
 	UINON_CMD_TEMP_PID = 0x41, /*PID参数*/
 	UINON_CMD_TEMP_ADJ_GET = 0x42, /*校准参数*/
@@ -40,6 +53,9 @@ typedef  enum
 	UINON_CMD_THEROM_OVERHEAT = 0x55,
 	UINON_CMD_THEROM_OVERCOOL = 0x56,
 	UINON_CMD_THEROM_GET = 0x58,
+	UINON_CMD_AMPLIF_GET = 0x59,
+	UINON_CMD_AMPLIF_SET = 0x5a,
+
 }pc_cmd_type;
 typedef struct _sysinf
 {
@@ -48,7 +64,7 @@ typedef struct _sysinf
 	unsigned char lysisState;
   unsigned char updateSt;
 }stateinfDef;
-
+#define MSG_CMDFRAME_LEN (6)
 typedef struct 
 {
     unsigned short head;
@@ -99,9 +115,10 @@ typedef struct _miniConfigPram {
     }Pram;
 } miniConfigPram;
 
-
-
+void deal_mUnion_cmd(CmdMessage *pMsg);
 void query_pc_cmd(CmdMessage *pMsg);
 unsigned int check_to_pc_busy(void);
-unsigned short data_send_to_pc(pc_cmd_type cmd, char *data, unsigned short len);
+int data_send_to_pc(pc_cmd_type cmd, char *data, unsigned short len);
+void update_work(void) ;
+void send_Devinf_pc(void);
 #endif

+ 45 - 25
DriverInterface/onchip_flash.c

@@ -9,6 +9,8 @@
 
 #define onechip_name  "Onechip602"
 #define onechip_pswd  "onechip1003"
+#define onechip_IP  "192.168.1.10"
+#define onechip_PORT  "8003"
 #define default_SN  "2603001"
 
 
@@ -106,10 +108,21 @@ void Flash_WriteBuffer(uint32_t start_addr, uint8_t *pBuffer, uint32_t NumToWrit
     
     // 2. 依次写入每个半字
     for (uint32_t i = 0; i < NumToWrite; i=i+4) {
-        Flash_WriteWord(start_addr + i * 4, pBuffer[i]);
+        Flash_WriteWord(start_addr + i, *(uint32_t *)(pBuffer+i));
+    }
+}
+/**
+ * @brief 向Flash写入多个半字数据(自动处理擦除)
+ * @param start_addr 起始地址
+ * @param pBuffer    数据缓冲区
+ * @param NumToWrite 要写入的半字数量
+ */
+void Flash_ReadBuffer(uint32_t start_addr, uint8_t *pBuffer, uint32_t NumToWrite){
+    
+    for (uint32_t i = 0; i < NumToWrite; i=i+4) {
+		*(uint32_t *)(pBuffer+i) = *(__IO uint32_t*)(start_addr + i);
     }
 }
-
 
 /********************************************************************
 *                         checksum_calc()
@@ -125,7 +138,7 @@ void Flash_WriteBuffer(uint32_t start_addr, uint8_t *pBuffer, uint32_t NumToWrit
 uint32_t checksum_calc(uint8_t *pdata, uint8_t len)
 {
 	uint8_t *tmp     = pdata;
-	uint8_t checksum = 0;
+	uint32_t checksum = 0;
 
 	for(uint8_t i = 0; i < len; i++)
 	{
@@ -170,12 +183,24 @@ uint32_t checksum_calc1(uint8_t *wdata, int len)
 ********************************************************************/
 void cfg_load_default_param(void)
 {
-	sysinf.presetTempVal = 72;
-	sysinf.presetTempTime = 5;
-	sysinf.setTempVal    = 68;
-	sysinf.holdTemp = 65.5;
-	sysinf.tempOffset = 2.5f;
-	sysinf.preHeatTime = 1;
+	sysinf.lysis_offset = 0;
+	sysinf.lysis_overHeat = 3;
+	sysinf.lysis_overHeatTime    = 10;
+	sysinf.lysis_Kp = 5;
+	sysinf.lysis_Ki = 0.01;
+	sysinf.lysis_Kd = 0;
+
+
+
+	sysinf.amplif_Kp = 20;
+	sysinf.amplif_Ki = 0.05;
+	sysinf.amplif_Kd    = 0;
+
+	sysinf.PresetTempVal = 72;
+	sysinf.PresetTempTime = 5;
+	sysinf.SetTempVal    = 68;
+	sysinf.holdTemp = 63.5;
+	sysinf.PreHeatTime = 1;
 	sysinf.readyTemp = 65.5;
 	sysinf.adjtemp = -0.5;
 	sysinf.log_level = 0;
@@ -189,6 +214,8 @@ void cfg_load_default_param(void)
 	sysinf.runLoopSpeed = 80;
 	strcpy(sysinf.wifiname, onechip_name);
 	strcpy(sysinf.password, onechip_pswd);
+	strcpy(sysinf.TCP_IP_Addr, onechip_IP);
+	strcpy(sysinf.TCP_IP_PORT, onechip_PORT);
 	memset(sysinf.SN, 0 ,sizeof(sysinf.SN));
 	strcpy(sysinf.SN, default_SN);
 }
@@ -207,21 +234,11 @@ uint8_t cfg_param_verify(void)
 {
 	
     unsigned char pramlen = sizeof(oneChipSysdef) - offsetof(oneChipSysdef, lysis_offset);
+    uint32_t saveCrc = *(uint32_t *)(CFG_PARAM_START_ADDR + (pramlen-4));
+    uint32_t calCrc = checksum_calc((uint8_t *)CFG_PARAM_START_ADDR, (pramlen-4));
 
-	if((uint32_t)checksum_calc((uint8_t *)CFG_PARAM_START_ADDR, (pramlen-4)) != *(uint32_t *)(CFG_PARAM_START_ADDR + (pramlen-4)))
-	{
-		return 0;
-	}
-	else
-	{
-		if(memcmp((uint8_t *)&sysinf.lysis_offset, (uint8_t *)CFG_PARAM_START_ADDR, pramlen) == 0)
-		{
-			return 1;
-		}
-		else
-		{
-			return 0;
-		}
+	if((saveCrc == calCrc) && (saveCrc != 0xffffffff))	{
+		Flash_ReadBuffer(CFG_PARAM_START_ADDR,(uint8_t *)&sysinf.lysis_offset, pramlen);
 	}
 }
 
@@ -259,16 +276,19 @@ uint8_t cfg_param_init(void)
 	uint8_t rlt = 0;
 
  	unsigned char pramlen = sizeof(oneChipSysdef) - offsetof(oneChipSysdef, lysis_offset);
+    uint32_t saveCrc = *(uint32_t *)(CFG_PARAM_START_ADDR + (pramlen-4));
+    uint32_t calCrc = checksum_calc((uint8_t *)CFG_PARAM_START_ADDR, (pramlen-4));
 
-	if((uint32_t)checksum_calc((uint8_t *)CFG_PARAM_START_ADDR, (pramlen-4)) != *(uint32_t *)(CFG_PARAM_START_ADDR + (pramlen-4)))
+	if((saveCrc == calCrc) && (saveCrc != 0xffffffff))
 	{
+		Flash_ReadBuffer(CFG_PARAM_START_ADDR,(uint8_t *)&sysinf.lysis_offset,  pramlen);
 		return 0;
 	}
 	else
 	{
 		cfg_load_default_param();
 		rlt = cfg_save_cfg_param();
-		Van_Device_Printf(VAN_LOG_CRITICAL, "读取参数出错,加载默认参数\r\n");
+		Van_Device_Printf(VAN_LOG_ERROR, "load parm err,please checking....\r\n");
 	}
 
 	return rlt;

+ 134 - 8
DriverInterface/rgb381.c

@@ -10,6 +10,11 @@
 #define I2C_TIMEOUT_1000MS  16000000  // 定义超时时间(毫秒)
 #define CARD_NO_ALIGN 3
 #define CARD_NO_MIN 10
+/****************Result define*******************/
+#define ResultInvalid     0 	//无效
+#define ResultNegative    1 	//阴
+#define ResultPositive    2 	//阳
+
 ColorSensor CS[CS_MAX] = {0};	//检测孔
 
 uint8_t SensorState1=0,SensorState2=0,SensorState3=0,SensorState4=0,SensorState5=0,
@@ -425,15 +430,136 @@ void sample_calc_tt(void)
 		Get_Tt(&CS[i]);
 	}
 }
+void SingleChannelJudge(ColorSensor *CS)
+{
+	if(CS->TtMin < CS->Tt && CS->Tt < CS->TtMax)
+	{
+		CS->Result=ResultPositive;
+	}
+	else
+	{
+		CS->Result=ResultNegative;
+	}
+
+}
+void SystemResaultJudge(void)
+{
+	int nc_index = 0;	//内参
+	uint8_t *p = &result.hole1_result;	//孔结果
+
+	result.Devicenum = 0;
+	strcpy(result.card_num,sysinf.psmMaster.card_param_info.pid);
+//	result.card_num = card_param_info.pid;
+
+	result.hole1_item = sysinf.psmMaster.card_param_info.hole_info[0].item;
+	result.hole2_item = sysinf.psmMaster.card_param_info.hole_info[1].item;
+	result.hole3_item = sysinf.psmMaster.card_param_info.hole_info[2].item;
+	result.hole4_item = sysinf.psmMaster.card_param_info.hole_info[3].item;
+	result.hole5_item = sysinf.psmMaster.card_param_info.hole_info[4].item;
+	result.hole6_item = sysinf.psmMaster.card_param_info.hole_info[5].item;
+	result.hole7_item = sysinf.psmMaster.card_param_info.hole_info[6].item;
+	result.hole8_item = sysinf.psmMaster.card_param_info.hole_info[7].item;
+	result.hole9_item = sysinf.psmMaster.card_param_info.hole_info[8].item;
+	result.hole10_item = sysinf.psmMaster.card_param_info.hole_info[9].item;
+
+	result.hole1_Tt[0] = (uint8_t)CS[0].Tt;
+	result.hole1_Tt[1] = (uint8_t)((CS[0].Tt-(uint8_t)CS[0].Tt)*100);
+	result.hole2_Tt[0] = (uint8_t)CS[1].Tt;
+	result.hole2_Tt[1] = (uint8_t)((CS[1].Tt-(uint8_t)CS[1].Tt)*100);
+	result.hole3_Tt[0] = (uint8_t)CS[2].Tt;
+	result.hole3_Tt[1] = (uint8_t)((CS[2].Tt-(uint8_t)CS[2].Tt)*100);
+	result.hole4_Tt[0] = (uint8_t)CS[3].Tt;
+	result.hole4_Tt[1] = (uint8_t)((CS[3].Tt-(uint8_t)CS[3].Tt)*100);
+	result.hole5_Tt[0] = (uint8_t)CS[4].Tt;
+	result.hole5_Tt[1] = (uint8_t)((CS[4].Tt-(uint8_t)CS[4].Tt)*100);
+	result.hole6_Tt[0] = (uint8_t)CS[5].Tt;
+	result.hole6_Tt[1] = (uint8_t)((CS[5].Tt-(uint8_t)CS[5].Tt)*100);
+	result.hole7_Tt[0] = (uint8_t)CS[6].Tt;
+	result.hole7_Tt[1] = (uint8_t)((CS[6].Tt-(uint8_t)CS[6].Tt)*100);
+	result.hole8_Tt[0] = (uint8_t)CS[7].Tt;
+	result.hole8_Tt[1] = (uint8_t)((CS[7].Tt-(uint8_t)CS[7].Tt)*100);
+	result.hole9_Tt[0] = (uint8_t)CS[8].Tt;
+	result.hole9_Tt[1] = (uint8_t)((CS[8].Tt-(uint8_t)CS[8].Tt)*100);
+	result.hole10_Tt[0] = (uint8_t)CS[9].Tt;
+	result.hole10_Tt[1] = (uint8_t)((CS[9].Tt-(uint8_t)CS[9].Tt)*100);
+
+	//判断孔结果
+	for (int i = 0; i < CS_MAX; i++)
+	{
+		SingleChannelJudge(&CS[i]);
+		*p = CS[i].Result;
+		p += 5;
+	}
+
+	
+	//找id == -1
+	for(nc_index = 0; nc_index < 10; nc_index++)
+	{
+		if(sysinf.psmMaster.card_param_info.hole_info[nc_index].item == 0xFF)
+			break;
+	}
+	if(nc_index == 10)
+	{
+		nc_index = 0;
+	}
+	
+	//判断最终检测结果
+	p = &result.hole1_item_result;	//检测结果
+	if(CS[nc_index].Result == ResultPositive)	//内参结果为阳
+	{
+		for (int i = 0; i < CS_MAX; i++)
+		{
+			if(CS[i].Result==ResultPositive)	//孔结果为阳,最终结果为阳
+			{
+				*p = ResultPositive;
+			}
+			else	//否则,最终结果为阴
+			{
+				*p = ResultNegative;
+			}
+			p += 5;
+		}
+	}
+	else	//内参结果为阴
+	{
+		for (int i = 0; i < CS_MAX; i++)
+		{
+			if(CS[i].Result==ResultPositive)	//孔结果为阳,最终结果为阳
+			{
+				*p = ResultPositive;
+			}
+			else	//否则,最终结果无效
+			{
+				*p = ResultInvalid;
+			}
+			p += 5;
+		}
+	}
 
+	//内参自身检测结果,等于孔结果
+	p = &result.hole1_item_result;	//检测结果
+	p += 5*nc_index;
+	*p = CS[nc_index].Result;
+
+
+
+}
 void sample_calc_result(void)
 {
-	// for (int i = 0; i < CS_MAX; i++)
-	// {	
-	// 	//从二维码获取Tt范围	
-	// 	CS[i].TtMax = card_param_info.hole_info[i].TtMax[0] + card_param_info.hole_info[i].TtMax[1] / 100.0f;
-	// 	CS[i].TtMin = card_param_info.hole_info[i].TtMin[0] + card_param_info.hole_info[i].TtMin[1] / 100.0f;
-	// }
-
-	// SystemResaultJudge();
+	for (int i = 0; i < CS_MAX; i++)
+	{	
+		//从二维码获取Tt范围	
+		CS[i].TtMax = sysinf.psmMaster.card_param_info.hole_info[i].TtMax[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMax[1] / 100.0f;
+		CS[i].TtMin = sysinf.psmMaster.card_param_info.hole_info[i].TtMin[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMin[1] / 100.0f;
+	}
+
+	 SystemResaultJudge();
+}
+void calc_balance(void)
+{
+	// 获取插卡前白平衡值
+	for (int i = 0; i < CS_MAX; i++)
+	{
+		Get_GAIN(&CS[i]);
+	}
 }

+ 1 - 0
DriverInterface/rgb381.h

@@ -128,6 +128,7 @@ void sample_calibrate_calc(uint32_t times);
 void sample_calc_avg_std(void);
 void sample_calc_tt(void);
 void sample_calc_result(void);
+void calc_balance(void);
 /**************************************************/
 
 #endif /* RGB381_H_ */

+ 95 - 60
DriverInterface/state_mini.c

@@ -15,16 +15,26 @@ uint8_t datasope_flag = 0;
 
 str_error_info_t error_info = {0};    //错误信息
 uint32_t error_delay = 0;    //错误持续时长
-test_result_struct result = {0};
+// test_result_struct result = {0};
 heat_ctrl_struct g_heat_ctrl = {0};
-CFG_PARAM_STRUCT g_cfg = {0};
-ProcessStateMachine_t psm;
+
 int TrigStateCheck(void)
 {
-	 return (HAL_GPIO_ReadPin(MINI7_V2_BCK_S1_GPIO_Port,MINI7_V2_BCK_S1_Pin)) ? 1 : 0; // 检查PF5引脚值
+	 return (HAL_GPIO_ReadPin(MINI7_V2_DEC_S1_GPIO_Port,MINI7_V2_DEC_S1_Pin)) ? 1 : 0; // 
+}
+uint32_t get_master_st(float *temp,unsigned int *st) {
+	*temp = sysinf.heaterMaster.pid.realtemp;
+	*st = sysinf.psmMaster.state;
+	return 0;
 }
 
 
+uint32_t get_slave_st(float *temp,unsigned int *st) {
+	*temp = sysinf.heaterSlave.pid.realtemp;
+	*st = sysinf.psmSlave.state;
+	return 0;
+}
+
 uint8_t is_command(uint16_t controlword, Controlword_t command_to_check)
 {
     return (controlword) == command_to_check;
@@ -38,20 +48,15 @@ void updateData(ProcessStateMachine_t *psm)
 	if (check_to_pc_busy()){		
 		psm->cursendok = 0;
 		psm->sendTime = 3;
-		if(psm->DataSendHeader != psm->DataSendLast){ 
-			if(psm->sendTime >15 ){
+		if(psm->DataSendHeader != psm->DataSendLast){ 			
 				/*1.5s 无应答,或者当前发送完成*/
-				uint8_t data[55] = {0};
+				char data[55] = {0};
 				memcpy(&data[1], psm->card_param_info.pid, 10);
 				memcpy(&data[11],&psm->DataBufRDR[psm->DataSendHeader], 40);
 				memcpy(&data[51],&psm->sendconter, 4);
 				if(0 == data_send_to_pc(PC_CMD_DATA_UPLOAD, data, sizeof(data))){
-					Van_Device_Printf(VAN_LOG_NOTICE, "send Header:%d last:%d  sendconter:0x%x \n",psm->DataSendHeader, psm->DataSendLast,psm->sendconter);
-					psm->sendTime = 0;
+					Van_Device_Printf(VAN_LOG_WIFI, "send Header:%d last:%d  sendconter:0x%x \n",psm->DataSendHeader, psm->DataSendLast,psm->sendconter);
 				}
-				
-                
-			}		
 		}else{
 			/*无数据,有结果*/
 			if(psm->updateresult){
@@ -78,7 +83,7 @@ void updateData_next(unsigned int recdex,unsigned char * part)
 		psm->cursendok = 1;
 		if(psm->DataSendHeader != psm->DataSendLast){ 
 			psm->sendconter++;		
-			Van_Device_Printf(VAN_LOG_NOTICE,"send ok Header:%d sendconter:0x%x \n",psm->DataSendHeader, psm->sendconter);
+			Van_Device_Printf(VAN_LOG_WIFI,"send ok Header:%d sendconter:0x%x \n",psm->DataSendHeader, psm->sendconter);
 			/*主模块又消息,更新头,发下一条*/
 			psm->DataSendHeader++;
 			if(psm->DataSendHeader == MAX_DATA_BUF_SIZE){
@@ -87,16 +92,11 @@ void updateData_next(unsigned int recdex,unsigned char * part)
 		}
 	}
 }
-void resetSampleData(void){
-	if(sysinf.psmMaster.sendTime){
-		sysinf.psmMaster.sendTime--;
-		if(sysinf.psmMaster.sendTime==0){						
-			sysinf.psmMaster.cursendok = 1;
-		}
-	}else if(sysinf.psmSlave.sendTime){
-		sysinf.psmSlave.sendTime--;
-		if(sysinf.psmSlave.sendTime==0){						
-			sysinf.psmSlave.cursendok = 1;
+void resetSampleData(ProcessStateMachine_t *psm){
+	if(psm->sendTime){
+		psm->sendTime--;
+		if(psm->sendTime==0){						
+			psm->cursendok = 1;
 		}
 	}
 }
@@ -107,6 +107,7 @@ void clean_reult_next(unsigned char * part)
 	if(psm){			
 		psm->updateresult = 0;			
 		psm->cursendok = 1;
+        psm->controlword = result_move_card;  
 	}
 }
 
@@ -127,19 +128,21 @@ uint8_t error_set(uint8_t error)
         return error;
 
     if(error == ERROR_SAMP_MOVE_CARD)   //检测中拔卡,需等待60S才能消除
-        error_delay = 60;
-
+    {
+       error_delay = 60; 
+    }    
     error_info.error_code = error;
     error_info.id = 0;
+    sysinf.updateError = 1;
 
-    Van_Device_Printf(VAN_LOG_ERROR, "error_set: %d %d %d\n", 0, error, psm.state);
+    Van_Device_Printf(VAN_LOG_ERROR, "error_set: %d %d %d\n", 0, error,sysinf.psmMaster.state);
     memcpy(error_info.SN, &sysinf.SN, 7);
 	error_info.SN[7] = 0;
     error_info.error_report = 1;
     data_send_to_pc(PC_CMD_REPORT_REEOR, (char*)&error_info, sizeof(str_error_info_t));
     
    if(error != ERROR_MOTOR_FIALED){
-	   psm.state = SW_Fault;
+	   sysinf.psmMaster.state = SW_Fault;
 	//    mcu_ack_ctrl.re_send_card = ACK_TIMEOUT;
 	//    Card_State_Send(HEAT_OFF);			  //降温至40°C,不开风扇
    }  
@@ -160,13 +163,50 @@ void error_clear(void)
 	error_info.error_report = 0;
 }
 
-void usr_state_machine(ProcessStateMachine_t *sts)
+
+void resend_error_update(void){
+	 if(sysinf.updateError == 1){
+		data_send_to_pc(PC_CMD_REPORT_REEOR, (char*)&error_info, sizeof(str_error_info_t));
+	 }
+}
+void re_send_state(void){
+	 if(sysinf.updateSt == 1){
+        stateinfDef st;
+        st.amplifState =sysinf.amplifState;
+        st.lysisState =sysinf.lysisState;
+        memcpy(st.SN, &sysinf.SN, 7);
+        data_send_to_pc(PC_CMD_UPDATESTATE, (char *)&st, sizeof(stateinfDef));  
+	 }
+}
+  
+
+
+void updateAmplifState(uint8_t newset){
+    if(sysinf.amplifState != newset){
+        sysinf.amplifState = newset;
+        sysinf.updateSt = 1;
+    }
+}
+void updateLysisState(uint8_t newset){
+    if(sysinf.lysisState != newset){
+        sysinf.lysisState = newset;
+        sysinf.updateSt = 1;
+    }
+
+}
+
+void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
 {
     sts->statusword = 0x0000;
     static uint8_t state = 0;
     static uint32_t delay = 0;
     //采样前,3秒发一次加热指令
-
+    if((sts->state < SW_Chip_Id) && (sts->state != SW_Fault)){
+        if (TrigStateCheck() == CardON){            
+            error_set(ERROR_NO_QRCODE);
+            updateAmplifState(SYS_STATE_ERROR_HM);
+        }
+    }
     switch (sts->state)
     {
     // 所有板卡准备自检,包含通道预加热
@@ -181,25 +221,6 @@ void usr_state_machine(ProcessStateMachine_t *sts)
 
         break;
     }
-    // // 跳过握手准备阶段
-    // case SW_Ready_To_Shake_On:
-    // {
-    //     //从机直接进入等待温度
-    //     if (Devicenum)  
-    //     {
-    //         controlword = Hand_Shake_cmd;
-    //     }
-
-    //     //主机需等待PC握手
-    //     if (is_command(controlword, Hand_Shake_cmd))
-    //     {
-    //         *(sts->statusword) |= SW_Target_reached;
-    //         sts->state = SW_Target_reached;
-    //     }
-
-    //     break;
-    // }
-    // 故障
     case SW_Fault:
     {
         // 没有预热完成前插卡检测
@@ -236,17 +257,17 @@ void usr_state_machine(ProcessStateMachine_t *sts)
     // 等温度稳定后
     case SW_Target_reached:
     {
-        if (g_heat_ctrl.temp_stable_sta == 1)
+        if (heater->temp_stable_sta == 1)
         {
             sts->controlword = Target_reached_cmd;
-
+             updateAmplifState(SYS_STATE_READY); 
         	/*************lxx-add-20232.11.30****************/
             if (SensorSelfCheck() == SystemError)
         	{
                 error_set(ERROR_SENSOR_SELF_CHECK);
         	}
         }
-		if ((g_cfg.skip_CheckOrRun & SKIP_HEATONCHECK_OK))
+		if ((sysinf.skip_CheckOrRun & SKIP_HEATONCHECK_OK))
         {
            /*跳过温度判断*/
             sts->controlword = Target_reached_cmd;
@@ -276,10 +297,12 @@ void usr_state_machine(ProcessStateMachine_t *sts)
         // }
         if (is_command(sts->controlword, Scan_Qrcode_cmd))
         {
+            calc_balance();
             sts->statusword |= SW_Chip_Id;
             sts->state = SW_Chip_Id;
+             updateAmplifState(SYS_STATE_CHECK); 
         }
-		if((g_cfg.skip_CheckOrRun & SKIP_SCANQRCODE)){
+		if((sysinf.skip_CheckOrRun & SKIP_SCANQRCODE)){
 	            sts->statusword |= SW_Chip_Id;
 	            sts->state = SW_Chip_Id;
 		}
@@ -290,20 +313,24 @@ void usr_state_machine(ProcessStateMachine_t *sts)
     {
         if (TrigStateCheck() == CardON)
         {
-			// DelayMS(1000);/*插卡后延时1s检测*/
-			if(!(g_cfg.skip_CheckOrRun & SKIP_CHECK_CARDINSERT)){
+			HAL_Delay(1000);/*插卡后延时1s检测*/
+			if(!(sysinf.skip_CheckOrRun & SKIP_CHECK_CARDINSERT)){
 				if(check_first_zero() == 1)break;
 			}
 			{				
 	            sts->controlword = Qrcode_publish_cmd;
 	            // mcu_ack_ctrl.re_send_card = ACK_TIMEOUT;
 	            // Card_State_Send(HEAT_ON);
+                
+        	    sysinf.heaterMaster.HeatState = SysPreHeatUP;
+                sysinf.heaterMaster.timenum=0;
 	            g_heat_ctrl.temp_stable_sta=0;
 	            g_card_tick_s = 0;
 				if (is_command(sts->controlword, Qrcode_publish_cmd))
 				{
 					sts->statusword |= SW_Sample_timeout;
 					sts->state = SW_Sample_timeout;
+                     updateAmplifState(SYS_STATE_RUNING); 
 				}
 				};
         }
@@ -312,7 +339,11 @@ void usr_state_machine(ProcessStateMachine_t *sts)
     // 采样,30min定时
     case SW_Sample_timeout:
     {
-    	if(((g_heat_ctrl.temp_stable_sta==2)||(g_cfg.skip_CheckOrRun & SKIP_HEATONCHECK_OK))&& sts->sampleStart == 0)
+         if (TrigStateCheck() == CardOFF){            
+            error_set(ERROR_SAMP_MOVE_CARD);
+            updateAmplifState(SYS_STATE_ERROR_HM);
+        }
+    	if(((heater->temp_stable_sta==2)||(sysinf.skip_CheckOrRun & SKIP_HEATONCHECK_OK))&& sts->sampleStart == 0)
     	{
 			// 启动定时器计时
 			sts->sampleTimes = 0;
@@ -359,7 +390,7 @@ void usr_state_machine(ProcessStateMachine_t *sts)
 			}
 //			if ((!(g_cfg.skip_CheckOrRun & SKIP_HEATONCHECK_OK) || g_cfg.skip_CheckOrRun & SKIP_FARSTRUN)){		
 //			}		
-			if (!(g_cfg.skip_CheckOrRun & SKIP_FARSTRUN)){
+			if (!(sysinf.skip_CheckOrRun & SKIP_FARSTRUN)){
 				sts->sampleTimes++;
 			}
 			
@@ -367,7 +398,7 @@ void usr_state_machine(ProcessStateMachine_t *sts)
 			if (sts->sampleTimes >= sampleTotalTimes)
 			{
 //				sampleTimes = 0;
-				if(0==(g_cfg.skip_CheckOrRun & SKIP_FARSTRUN)){
+				if(0==(sysinf.skip_CheckOrRun & SKIP_FARSTRUN)){
 					sts->sampleStart = 0;
 					sts->controlword = result_report_cmd;
 				}
@@ -380,7 +411,7 @@ void usr_state_machine(ProcessStateMachine_t *sts)
         {
             sts->statusword |= SW_result_report;
             sts->state = SW_result_report;
-            // sample_calc_result();
+             sample_calc_result();
             delay = 0;
             // datasope_flag = 0;
             
@@ -427,6 +458,7 @@ void usr_state_machine(ProcessStateMachine_t *sts)
         {
             sts->statusword |= SW_move_card;
             sts->state = SW_move_card;
+             updateAmplifState(SYS_STATE_WORKEND);
         }
         break;
     }
@@ -446,8 +478,10 @@ void usr_state_machine(ProcessStateMachine_t *sts)
             datasope_flag = 0;
             sts->heat_timeout = 0;
             memset(&sts->card_param_info, 0 ,sizeof(sts->card_param_info));
-        	// Card_State_Send(HEAT_OFF);              //降温至40°C,不开风扇
-            sts->controlword = Board_Selftest_cmd;
+        	sysinf.heaterMaster.HeatState = SystemPreHeat;
+            sysinf.heaterMaster.temp_stable_sta = 0;
+            sts->controlword = Board_Selftest_cmd; 
+             updateAmplifState(SYS_STATE_PREPARE); 
         }
         break;
     }
@@ -474,4 +508,5 @@ void usr_state_machine(ProcessStateMachine_t *sts)
         state = sts->state;
         Van_Device_Printf(VAN_LOG_NOTICE,"\nstate:%d \n", state);
     }
+    updateData(sts);
 }

+ 11 - 5
DriverInterface/state_mini.h

@@ -8,6 +8,7 @@
 #ifndef __STATE_MINI_H
 #define __STATE_MINI_H
 
+#include "user_heater.h"
 #define MAX_DATA_BUF_SIZE  36
 #define SystemChecking    0
 #define SystemOK          1
@@ -32,9 +33,9 @@
 typedef enum StatusWord
 {
     // 所有板卡准备自检,包含通道预加热
-    SW_Read_To_Board_Selftest = -1,
+    SW_Read_To_Board_Selftest = 0,
     // 准备和PC握手
-    SW_Ready_To_Shake_On = 0,
+    // SW_Ready_To_Shake_On = 0,
     // 故障
     SW_Fault = 1,
     // 获取温度,两通道通道加热
@@ -233,11 +234,16 @@ typedef struct ProcessStateMachine
 	str_card_param_info_t card_param_info; 
 } ProcessStateMachine_t;
 
-
+void resend_error_update(void);
+void re_send_state(void);
+uint32_t get_master_st(float *temp,unsigned int *st);
+uint32_t get_slave_st(float *temp,unsigned int *st);
+void updateAmplifState(uint8_t newset);
+void updateLysisState(uint8_t newset);
 void updateData_next(unsigned int recdex,unsigned char * part);
 void clean_reult_next(unsigned char * part);
-void resetSampleData(void);
 uint8_t error_set(uint8_t error);
 void error_clear(void);
-void usr_state_machine(ProcessStateMachine_t *sts);
+void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater);
+void resetSampleData(ProcessStateMachine_t *psm);
 #endif

+ 4 - 194
DriverInterface/uart_rcv.c

@@ -50,8 +50,6 @@ enum SLAVE_MCU_Ctr_UP_type
 
 uint8_t g_uart2_rcv_start = 0;
 uint8_t g_uart2_rcv_complete_flg = 0;
-uint8_t g_uart2_rx_buf[DEBUG_BUF_SIZE] = {0};
-uint8_t g_uart2_tx_buf[BUF_SIZE] = {0};
 uint16_t g_uart2_rx_len = 0;
 uint8_t g_uart2_frame_overtime_cnt = 0;
 uint16_t g_uart2_rcv_cmd = 0;
@@ -72,11 +70,9 @@ uint8_t g_uart0_tx_buf[DEBUG_BUF_SIZE] = {0};
 uint8_t g_uart0_rx_buf[BUF_SIZE] = {0};
 uint8_t g_uart0_rx_len = 0;
 uint8_t g_uart0_frame_overtime_cnt = 0;
-struct CmdMessage  uart0_massage;
-uint8_t  uart0_data[DEBUG_BUF_SIZE];
+
 uint32_t  uart0_header = 0;
 uint32_t  uart0_last = 0;
-uint32_t  uart0_recOK = 0;
 
 unsigned int haveheaderflag = 0;
 
@@ -153,19 +149,7 @@ void debug_receive_int_handle1(void)
 	}
 }
 
-void debug_receive_int_handle2(void)
-{
-	while (UART_GET_RX_EMPTY(UART2) == 0)
-	{
-		unsigned char recChar = UART_READ(UART2);
-		if(haveheaderflag <= QR_REC_STATE_HEADER){
-			
-			if (g_uart2_rx_len >= DEBUG_BUF_SIZE)
-				g_uart2_rx_len = 0;
-			g_uart2_rx_buf[g_uart2_rx_len++] = recChar;
-		}
-	}
-}
+
 
 /********************************************************************
  *                         UART02_IRQHandler()
@@ -361,127 +345,6 @@ int DecodeNew(struct CmdMessage *pMessage, uint8_t *pdata, const uint8_t *pInBuf
 }
 
 
-/********************************************************************
- *                         uart0_rcv_frame_analysis()
- *
- *描述:接收帧解析
- *参数:无
- *返回:无
- *其他:无
- *--------------------------------------------------------------------
- *记录:
- ********************************************************************/
-void uart0_rcv_data_analysis(void)
-{
-	float kp, ki, kd;
-	uint8_t false = 0;
-	struct CmdMessage msg;
-	uint16_t result =0;
-	struct light_band_para_t light;
-	msg.len = 2;
-	msg.data = (char*)&result;
-
-	if(uart0_recOK == false){
-		return;
-	} 
-	uart0_recOK = false;
-	if(uart0_massage.seq == MINI7_MASSAGE_TYPE_MCUTOMCU){
-		switch (uart0_massage.cmd){
-			case SLAVE_MCU_CMD_PARAM:{
-				g_heat_ctrl.PresetTempVal = *(float *)&uart0_data[0];
-				g_heat_ctrl.PresetTempTime = *(int *)&uart0_data[4];
-				g_heat_ctrl.SetTempVal = *(float *)&uart0_data[8];
-				g_heat_ctrl.HoldTemp = *(float *)&uart0_data[12];
-				g_heat_ctrl.TempOffset = *(float *)&uart0_data[16];		
-				g_heat_ctrl.PreHeatTime = *(uint32_t *)&uart0_data[20];
-				g_heat_ctrl.ReadyTempVal = *(float *)&uart0_data[24];	
-				if(g_heat_ctrl.PresetTempVal < 90 && g_heat_ctrl.SetTempVal < 90)	
-				{
-					combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_CMD_PARAM,MINI7_TAIL_FALG)
-					msg.len = strlen(sys_info);
-					msg.data = sys_info;
-					sendMsgtoMasterMcu(&msg);
-				}	
-			}
-				break;
-			case SLAVE_MCU_CMD_HEAT:{
-				g_heat_ctrl.heat_state = uart0_data[0];			
-				combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_CMD_HEAT,MINI7_TAIL_FALG)
-				sendMsgtoMasterMcu(&msg);
-			}
-				break;
-			case SLAVE_MCU_CMD_LIGHT_CTR:{
-				memcpy(&light, uart0_data, sizeof(struct light_band_para_t));
-    			light_set(light.mode, light.speed, light.color, 0);
-				memcpy(&light, uart0_data+sizeof(struct light_band_para_t), sizeof(struct light_band_para_t));
-    			light_set(light.mode, light.speed, light.color, 1);
-
-				combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_CMD_LIGHT_CTR,MINI7_TAIL_FALG)
-				sendMsgtoMasterMcu(&msg);
-			}
-				break;
-		    case SLAVE_MCU_CMD_QRSCANNER_CTR:{
-				}
-			break;
-			case SLAVE_MCU_CMD_FAN:{				
-				g_heat_ctrl.fan_state = uart0_data[0];
-				if (g_heat_ctrl.fan_state == 1)
-				{
-					PB4 = 1;
-				}
-				else{
-					PB4 = 0;
-				}			
-				combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_CMD_FAN,MINI7_TAIL_FALG)
-				sendMsgtoMasterMcu(&msg);	
-			}
-				break;
-		    case SLAVE_MCU_CMD_CARD_ST:{
-				g_heat_ctrl.card_state = uart0_data[0];	
-				combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_CMD_CARD_ST,MINI7_TAIL_FALG)				
-//				/*进入稳定状态,调整目标温度*/
-			    if(g_heat_ctrl.card_state &&  uart0_massage.len >= 8){
-					float cabinTem =  *(float *)&uart0_data[4];
-					float adj =  *(float *)&uart0_data[8];
-					if(cabinTem < ENV_ADJ_THRESHOLD){
-						g_heat_ctrl.adJTarget = adj;
-					}else{
-						g_heat_ctrl.adJTarget = 0;
-					}
-				}
-				sendMsgtoMasterMcu(&msg);
-			}
-			break;
-		    case SLAVE_MCU_CMD_PID:{
-				kp = *(float *)&uart0_data[0];
-				ki = *(float *)&uart0_data[4];
-				kd = *(float *)&uart0_data[8];	
-    			PID_set(&pid1, kp, ki, kd);	
-				combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_CMD_PID,MINI7_TAIL_FALG)
-				sendMsgtoMasterMcu(&msg);
-			}
-			break;
-		    case SLAVE_MCU_UP_QR:{
-		    	/*扫描结果上报成功,清除缓存*/
-				memset(g_uart2_rx_buf, 0 ,sizeof(g_uart2_rx_buf));
-				g_uart2_rx_len = 0;
-				haveheaderflag = QR_REC_STATE_EMPTY;
-						
-//		    light_set(MODE_NORMAL, 250, COLOR_YELLOW, 0);
-//		    light_set(MODE_NORMAL, 250, COLOR_YELLOW, 1);
-			}
-			break;
-		    case SLAVE_MCU_UP_QR_PARAM:{
-				qr_check_delay = 0;
-				haveheaderflag = QR_REC_STATE_SENDQR;
-//			    light_set(MODE_NORMAL, 250, COLOR_GREEN, 0);
-//			    light_set(MODE_NORMAL, 250, COLOR_GREEN, 1);
-			}
-			break;
-		}
-	}
-}
-
 
 /********************************************************************
  *                         heater_state_upload()
@@ -543,60 +406,8 @@ void send_param(void){
 	msg.data = (char*)&m_str_card_param_info;
 	sendMsgtoMasterMcu(&msg);
 }
-void send_QR_inf(void){	
-	struct CmdMessage msg;	
-	combine_cmdMessage(msg,MINI7_HEADER_FALG,MINI7_MASSAGE_TYPE_MCUTOMCU,SLAVE_MCU_UP_QR,MINI7_TAIL_FALG)
-	msg.len = g_uart2_rx_len;
-	msg.data = g_uart2_rx_buf;
-	sendMsgtoMasterMcu(&msg);
-}
 
-/*上报二维码信息*/
-void sendQR_inf(void){
-	if((haveheaderflag == QR_REC_STATE_SENDPRAM) && (qr_check_delay%2==0)){
-		send_param();
-	}
-	if((haveheaderflag == QR_REC_STATE_SENDQR) && (qr_check_delay%2==0)){
-		send_QR_inf();
-	}
-}
-/*发送完成,清除标记,清除缓冲区*/
-//void sendQR_send_ok(void)
-//{
-//	memset(g_uart2_rx_buf, 0 ,sizeof(g_uart2_rx_buf));
-//	g_uart2_rx_len = 0;
-//	qr_check_delay = QR_CHECH_STATE_FIRST;
-//}
-void uart2_rcv_frame_analysis(void)
-{
-	if(haveheaderflag <= QR_REC_STATE_HEADER){		
-		if (('{' == g_uart2_rx_buf[0])&&(g_uart2_rx_len>10))
-		{
-			if(haveheaderflag != QR_REC_STATE_HEADER){
-				haveheaderflag = QR_REC_STATE_HEADER;
-				qr_check_delay = 0;
-				
-//			    light_set(MODE_NORMAL, 250, COLOR_RED, 0);
-//			    light_set(MODE_NORMAL, 250, COLOR_RED, 1);
-			}
-			if(0 == parse_qrcode_info(&m_str_card_param_info, g_uart2_rx_buf)){
-				haveheaderflag = QR_REC_STATE_SENDPRAM; 	
-				qr_check_delay = 0;
-//			    light_set(MODE_NORMAL, 250, COLOR_BLUE, 0);
-//			    light_set(MODE_NORMAL, 250, COLOR_BLUE, 1);
-			}
-		}
-		if((qr_check_delay == QR_CHECH_STATE_WAITING) ||('{' != g_uart2_rx_buf[0] && g_uart2_rx_len > 0)){
-			/*码头为 '{' 延时解码不对,清空 */
-			/*解码完成 */
-			/*码头不为 '{' 非法,清空*/
-			memset(g_uart2_rx_buf, 0 ,sizeof(g_uart2_rx_buf));
-			g_uart2_rx_len = 0;
-			qr_check_delay =  0;
-			haveheaderflag = QR_REC_STATE_EMPTY;		
-		}
-	}
-}
+
 
 /********************************************************************
  *                         trigmode_select_sensor()
@@ -651,8 +462,7 @@ void data_out_original(void)
 	g_uart2_tx_buf[8] = 0xCD;
 	UART_Write(UART2, g_uart2_tx_buf, 9);
 	HAL_Delay(100);
-	memset(g_uart2_rx_buf, 0, sizeof(g_uart2_rx_buf));
-	g_uart2_rx_len = 0;
+
 }
 
 int parse_qrcode_info(str_card_param_info_t *info, char *qrcode_str)

+ 211 - 0
DriverInterface/user_heater.c

@@ -0,0 +1,211 @@
+
+#include "onechip_include_header.h"
+
+#define HEATER_NEED_PREHEAT    37.0
+
+#define HEATER_MIN_TEMP  15.0
+#define  HEATER_MAX_TEMP 95.0
+#define HEATER_MIN_ERROR_TEMP  5.0
+#define  HEATER_MAX_ERROR_TEMP 115.0
+uint32_t get_heater_master_st(float *temp,unsigned int *st) {
+	*temp = sysinf.heaterMaster.pid.realtemp + sysinf.heaterMaster.offset;
+	*st = sysinf.heaterMaster.HeatState;
+	return 0;
+}
+
+
+uint32_t get_heater_slave_st(float *temp,unsigned int *st) {
+	*temp = sysinf.heaterSlave.pid.realtemp + sysinf.heaterSlave.offset;
+	*st = sysinf.heaterSlave.HeatState;
+	return 0;
+}
+
+uint32_t check_heater_master_needPreheat(void) {
+        
+    float temp = getADC_Chanel_value(0);
+    sysinf.heaterMaster.pid.realtemp = temp + sysinf.heaterMaster.offset;
+    if(sysinf.heaterMaster.pid.realtemp < HEATER_NEED_PREHEAT){
+        sysinf.heaterMaster.needpreheat = 1;
+        sysinf.heaterMaster.HeatState = SysPreHeatUP;
+        sysinf.heaterMaster.stabletime = 0;
+    }else{
+        sysinf.heaterMaster.needpreheat = 0;
+        sysinf.heaterMaster.HeatState = SystemPreHeat;
+    }
+	return 0;
+}
+
+void updatParm_heater_master(void) {
+	sysinf.heaterMaster.PreHeatTime = sysinf.PreHeatTime;
+	sysinf.heaterMaster.HoldTemp = sysinf.holdTemp;
+	sysinf.heaterMaster.readyTemp =  sysinf.readyTemp;
+	sysinf.heaterMaster.PresetTempVal = sysinf.PresetTempVal;
+	sysinf.heaterMaster.PresetTempTime = sysinf.PresetTempTime*10;
+	sysinf.heaterMaster.adJTarget =  sysinf.adJTarget;
+	sysinf.heaterMaster.SetTempVal =  sysinf.SetTempVal;
+	sysinf.heaterMaster.pid.Kp = sysinf.amplif_Kp;
+	sysinf.heaterMaster.pid.Ki = sysinf.amplif_Ki ;
+	sysinf.heaterMaster.pid.Kd = sysinf.amplif_Kd;
+
+
+
+
+}
+
+void heater_work(heat_ctrl_def *heater)
+{
+    if(heater->needpreheat){
+        heater->stabletime ++;
+        if(heater->stabletime > heater->PreHeatTime * 600){
+            /*提前预热阶段完成,进入正式控温流程*/
+            sysinf.heaterMaster.needpreheat = 0;
+            sysinf.heaterMaster.HeatState = SystemPreHeat;
+            sysinf.heaterMaster.stabletime = 0;  
+        }
+    }
+    
+    if((heater->pid.realtemp < HEATER_MIN_TEMP) || (heater->pid.realtemp > HEATER_MAX_TEMP)){
+        /*稍后添加*/
+         com_pwm_Set(heater->pwdId,0);  
+         heater->HeatState = SystemPreHeat;
+         return;
+
+    }
+    if((heater->pid.realtemp < HEATER_MIN_ERROR_TEMP) || (heater->pid.realtemp > HEATER_MAX_ERROR_TEMP)){
+        /*稍后添加*/
+         com_pwm_Set(heater->pwdId,0);  
+         heater->HeatState = SysERRORHeat;
+         error_set(ERROR_HEAT_SELF_CHECK);
+         return;
+
+    }
+    heater->timenum ++;
+    switch (heater->HeatState)
+    {
+        case SystemPreHeat:{
+            heater->pid.goal = heater->HoldTemp;  
+            if(heater->pid.realtemp -  heater->HoldTemp  > 0.6){
+                com_pwm_Set(heater->pwdId,0);                   
+                heater->pid.integral = 0;	  
+                heater->timenum = 0;       
+            }else{
+                PIDRealize(&heater->pid);
+                com_pwm_Set(heater->pwdId,heater->pid.variate);                
+                if(heater->timenum>=60*10)//system led turn red while the temperature could not heat up to PresetTemp over 10min
+                {
+                    if((heater->pid.realtemp<heater->HoldTemp))
+                    {
+                        com_pwm_Set(heater->pwdId,0);
+                        /*TODO 加热模块故障*/
+                        error_set(ERROR_HEAT_TIMEOUT);
+                        heater->HeatState = SysERRORHeat;
+                        return;
+                    }
+                }
+            }
+            
+                //稳定条件,大于待机温度-0.5度,并且小于就绪温度
+            if(heater->pid.realtemp > ( heater->HoldTemp  - 0.5) && heater->pid.realtemp < heater->readyTemp)
+            {
+                if(heater->stabletime++ > 10)
+                {
+                    heater->temp_stable_sta = 1;
+                    heater->HeatState = SystemIdle;
+                }
+            }
+            else
+            {
+                heater->temp_stable_sta = 0;
+                heater->stabletime = 0;
+            }
+        }break;
+        case SystemIdle:{                
+            PIDRealize(&heater->pid);
+            com_pwm_Set(heater->pwdId,heater->pid.variate);
+        }break;
+        case SysPreHeatUP: {
+            com_pwm_Set(heater->pwdId,100);
+            if((heater->pid.realtemp>=(heater->PresetTempVal-1)))
+            {
+                heater->timenum=0;
+                heater->HeatState=SysPreKepTemp;
+                heater->pid.integral = 0;
+                heater->pid.goal = heater->PresetTempVal;
+            }
+            if(heater->timenum>=60*10)//system led turn red while the temperature could not heat up to PresetTemp over 10min
+            {
+                if((heater->pid.realtemp<heater->PresetTempVal))
+                {
+                    /*TODO 加热模块故障*/
+                    com_pwm_Set(heater->pwdId,0);                    
+                    error_set(ERROR_HEAT_TIMEOUT);
+                    heater->HeatState = SysERRORHeat;
+                    return;
+                }
+            }
+        }
+        break;
+        case SysPreKepTemp:{            
+            PIDRealize(&heater->pid);
+            com_pwm_Set(heater->pwdId,heater->pid.variate);
+            if(heater->timenum>=heater->PresetTempTime)//time of duration while initial segment constant temperature stage,timenum*1S
+            {
+                heater->timenum=0;
+                heater->HeatState=SysPreCoolDown;
+                com_pwm_Set(heater->pwdId,0);
+            }
+        }
+        break;
+        case SysPreCoolDown: {
+            if(heater->pid.realtemp<=(heater->SetTempVal-1))
+            {
+                heater->HeatState=SysPreConTemp;
+                heater->overtempnum = 0;
+                heater->timenum=0;
+                heater->targetAfterAdj = heater->adJTarget + heater->SetTempVal;
+                heater->pid.integral = 0;
+                heater->pid.goal = heater->targetAfterAdj ;
+
+            }
+            heater->stabletime = 0;
+        }
+        break;
+        
+        case SysPreConTemp:{        
+            PIDRealize(&heater->pid);
+            com_pwm_Set(heater->pwdId,heater->pid.variate);
+            if(heater->timenum>=20)
+            {
+                /*system report error while the difference of the temperature over 5℃  3times*/
+                if(fabs(heater->pid.realtemp-heater->SetTempVal)>5)
+                {
+                    heater->overtempnum++;
+                    if(heater->overtempnum>=3)
+                    {
+                        com_pwm_Set(heater->pwdId,0);
+                        error_set(ERROR_HEAT_TIMEOUT);
+                        heater->HeatState = SysERRORHeat;
+                        return;
+                    }
+                    else
+                    {
+                        heater->overtempnum = 0;
+                    }
+                }
+                else if(fabs(heater->pid.realtemp- (heater->targetAfterAdj))<=0.5)
+                {
+                    if(heater->stabletime++ >10)
+                    {
+                        heater->temp_stable_sta = 2;    //二次加热稳定
+                    }
+                }
+                else{
+                    heater->stabletime = 0;
+                }
+            }
+        }
+        break;
+        default:
+            break;
+    }    
+}

+ 47 - 0
DriverInterface/user_heater.h

@@ -0,0 +1,47 @@
+#ifndef  __USER_TEATER_H
+#define  __USER_TEATER_H
+
+#include "van_com_algorithm.h"
+
+#define SystemPreHeat     1
+#define SystemIdle        2
+#define SysPreHeatUP      3
+#define SysPreKepTemp     4
+#define SysPreCoolDown    5
+#define SysPreConTemp     6
+#define SysNorHeatUP      7
+#define SysNorHeatHold     8
+#define SysERRORHeat     10
+
+
+typedef struct
+{
+	unsigned char   heat_state;            		//串口控制加热状态
+	unsigned char   temp_stable_sta;            	//加热稳定状态
+	unsigned char   fan_state;   					//风扇状态
+	unsigned char   card_state;   				//插卡状态
+    unsigned int  stabletime;
+	float     SetTempVal;
+	unsigned int  PresetTempTime;
+	float     PresetTempVal;
+    float readyTemp;	  //就绪温度
+	float    HoldTemp;       //稳定温度
+	float	offset;		//温度补偿
+	unsigned int   PreHeatTime;					//上电预热时间,min
+	float     adJTarget;					//根据环境温度,修正目标温度
+    unsigned int timenum;
+    unsigned int HeatState;	  
+    unsigned int overtempnum;
+    float     targetAfterAdj;	       
+    pid_def  pid;	
+    unsigned int pwdId; 
+    unsigned int needpreheat;  
+}heat_ctrl_def;
+
+
+uint32_t get_heater_master_st(float *temp,unsigned int *st);
+uint32_t get_heater_slave_st(float *temp,unsigned int *st);
+uint32_t check_heater_master_needPreheat(void);
+void updatParm_heater_master(void);
+void heater_work(heat_ctrl_def *heater);
+#endif

+ 103 - 236
DriverInterface/usr_lysis.c

@@ -35,153 +35,34 @@ extern uint32_t conter10ms;
 #define GOTO_IDLE_GAP  3000 
 
 
-typedef enum Heat_state {
-  PID_IDLE,
-  PID_OVERHEAT,
-  PID_OVERHEATLAST,
-  PID_OVERCOOL,
-  PID_OVERCOOLLAST,
-  PID_ADJ,
-  PID_STAB,
-  PID_ERROR,
-} pid_state_def;
-
-typedef enum {
-  THERMOSTAT_NOR,     // 正常
-  THERMOSTAT_COOL_EER,    //制冷坏
-  THERMOSTAT_HEAT_EER, // 加热坏
-  THERMOSTAT_SENSER_EER,     // 传感器坏
-  THERMOSTAT_TUBEEXIST_EER,     //存在试管
-  THERMOSTAT_TUBENOEXIST_EER,     //不存在试管
-} THERMOSTAT_ERR_State;
-
-
-
-typedef enum THERMO_state {
-  THERMOSTAT_PWRON,
-  THERMOSTAT_CHECK,
-  THERMOSTAT_WARM,
-  THERMOSTAT_IDLE,
-  THERMOSTAT_INSERT,
-  THERMOSTAT_NOTICE,
-  THERMOSTAT_WORK,
-  THERMOSTAT_END,
-  THERMOSTAT_ERROR,
-} thermostat_state_def;
-
-
-typedef struct
-{
-	float realtemp;       
-    float goal;     
-	float offset;               
-    float overHeat;       
-    float overHeatTime;          
-    float overCool;       
-    float overCoolTime;       
-    float idletemp;  	      
-    float worktime;  		     
-    float err;            
-    float err_last;       
-    float Kp,Ki,Kd;       
-    float variate;        
-    float integral;       
-    float cabinTem;    
-	pid_state_def pid_st; 
-	unsigned int pid_stable;   
-	unsigned int pid_stable_time;   
-	thermostat_state_def thermostat_st;
-	THERMOSTAT_ERR_State eerst;
-}PID_def;
-
 
 int32_t tupeExist = 0;
 
-int32_t ylsis_stFistin;
 
-PID_def therm;
+
 extern void light_band_set(uint8_t mode_select, uint16_t speed_ms, uint32_t rgb_color);
 
 volatile uint32_t g_u32AdcIntFlag;   //adc simple finish flag
 
-int32_t recGoalFlag = 0;
 
 uint32_t Read_Tupe(void) {
-  return (HAL_GPIO_ReadPin(MINI7_V2_TUBE_SW_GPIO_Port,MINI7_V2_TUBE_SW_Pin)) ? 1 : 0; // 检查PF5引脚值
+  return (HAL_GPIO_ReadPin(MINI7_V2_TUBE_SW_GPIO_Port,MINI7_V2_TUBE_SW_Pin)) ? 0 : 1; // 检查PF5引脚值
 }
 
-/**
- * @brief	   SetMotorPwm
- *
- * @param		value between 0-100
- *
- * @return		None
- *
- * @details
- */
-void SetThermPwm( int32_t value) {
-  /* Start PWM counter */
-
-}
 
 
 
-void updatParm_therm(void) {
-	therm.offset = sysinf.lysis_offset;
-	therm.overHeat = sysinf.lysis_overHeat;
-	therm.overHeatTime =  sysinf.lysis_overHeatTime;
-	therm.Kp = sysinf.lysis_Kp;
-	therm.Ki = sysinf.lysis_Ki ;
-	therm.Kd = sysinf.lysis_Kd;
+void updatParm_lysis(void) {
+	sysinf.lysis.offset = sysinf.lysis_offset;
+	sysinf.lysis.overHeat = sysinf.lysis_overHeat;
+	sysinf.lysis.overHeatTime =  sysinf.lysis_overHeatTime;
+	sysinf.lysis.pid.Kp = sysinf.lysis_Kp;
+	sysinf.lysis.pid.Ki = sysinf.lysis_Ki ;
+	sysinf.lysis.pid.Kd = sysinf.lysis_Kd;
 }
 
 
 
-
-void NTCGetVoltage(float *ActualTemp)
-{
-    int32_t  i32ConversionData;
-	float NTCVoltage;   
-	float Rt=0; 		 //NTC电阻
-	float R=10000; 	  //10K固定阻值电阻
-	float T0=273.15+25;  //转换为开尔文温度
-	//float B=3950;		//B值 25°
-	float B=3980;		  //B值 >50°
-	float Ka=273.15;	  //K值
-	float temp;
-	float VR=0;   //电压值
-
-
-
-    /* Get the conversion result */
-	// i32ConversionData = ADC_GET_CONVERSION_DATA(ADC, THERM_ADC_CHN);
-	NTCVoltage=(i32ConversionData*3300/4096);
-	VR=NTCVoltage/1000.00;
-	Rt=8.05664*i32ConversionData;
-	temp=1/(1/T0+log(Rt/R)/B)-Ka+0.3; //计算温度
-	*ActualTemp=temp;
-}
-
-
-float PIDRealize(PID_def *pid)
-{
-	pid->err=pid->goal-pid->realtemp;
-	pid->variate=pid->Kp*pid->err+pid->Ki*pid->integral+pid->Kd*(pid->err-pid->err_last);
-	pid->err_last=pid->err;
-	if(pid->variate>100)
-	{
-		pid->variate=100;
-	}else{			
-		pid->integral+=pid->err;
-	}
-	if(pid->variate<0)
-	{
-		pid->variate=0;
-	}
-    return pid->variate;
-}
-
-
 /**
  * @brief	   Motor_Init
  *
@@ -193,23 +74,22 @@ float PIDRealize(PID_def *pid)
  */
 uint32_t Therm_Check(void) {
   float firstTemp,heattemp;
-
-  NTCGetVoltage(&firstTemp);
+  firstTemp = getADC_Chanel_value(1);
   if(firstTemp < MIN_TEMPERATUARE || firstTemp > MAX_TEMPERATUARE){
-  		SetThermPwm(0);
+  		com_pwm_Set(sysinf.lysis.pwdId,100);
 		return  THERMOSTAT_SENSER_EER;		
   }  
-  SetThermPwm(HEAT_TEST_PWR);
+  com_pwm_Set(sysinf.lysis.pwdId,HEAT_TEST_PWR);
   HAL_Delay(HEAT_TEST_TIME);
-  NTCGetVoltage(&heattemp);  
-  SetThermPwm(0);
+  heattemp = getADC_Chanel_value(1);
+  com_pwm_Set(sysinf.lysis.pwdId,0);
   if((heattemp - firstTemp) < HEAT_WORK_THD){
 		return  THERMOSTAT_HEAT_EER;	
   }
   return THERMOSTAT_NOR;
 }
 /**
- * @brief	   Set_therm
+ * @brief	   set_lysis
  *
  * @param		goal 目标温度
  *
@@ -217,22 +97,22 @@ uint32_t Therm_Check(void) {
  *
  * @details   设置目标温度。
  */
-void Set_therm(float goal) {
-   therm.goal = goal;
-   if(goal > (therm.overHeat + therm.realtemp )){
-		therm.pid_st = PID_OVERHEAT;
-		therm.goal += therm.overHeat;
+void set_lysis(float goal) {
+   sysinf.lysis.pid.goal = goal;
+   if(goal > (sysinf.lysis.overHeat + sysinf.lysis.pid.realtemp )){
+		sysinf.lysis.pid_st = PID_OVERHEAT;
+		sysinf.lysis.pid.goal += sysinf.lysis.overHeat;
    }else{
-		therm.pid_st = PID_ADJ;
+		sysinf.lysis.pid_st = PID_ADJ;
    }
-   therm.integral = 0;
-   therm.pid_stable = 0;
+   sysinf.lysis.pid.integral = 0;
+   sysinf.lysis.pid_stable = 0;
 }
 void Close_therm(float goal) {  
-   therm.pid_st = PID_IDLE;
-   therm.integral = 0;
-   therm.pid_stable = 0;
-   SetThermPwm(0);
+   sysinf.lysis.pid_st = PID_IDLE;
+   sysinf.lysis.pid.integral = 0;
+   sysinf.lysis.pid_stable = 0;
+  com_pwm_Set(sysinf.lysis.pwdId,0);
 }
 
 /**
@@ -246,15 +126,16 @@ void Close_therm(float goal) {
  */
 uint32_t Pid_work(void) {
   static uint32_t chrConter = 0;
-  float temp;
-  PID_def *ptherm = &therm;
-
-  NTCGetVoltage(&temp);
-  ptherm->realtemp = temp + ptherm->offset;
+  lysis_ctr_def *ptherm = &sysinf.lysis;
+  float temp = getADC_Chanel_value(1);  
+  
+  ptherm->pid.realtemp = temp + ptherm->offset;
   switch(ptherm->pid_st){
 	case PID_OVERHEAT:{
-		PIDRealize(ptherm);
-		if (ptherm->realtemp  > (ptherm->goal - OVER_HEAT_EDGE)){
+		PIDRealize(&ptherm->pid);
+		
+        com_pwm_Set(ptherm->pwdId,ptherm->pid.variate);
+		if (ptherm->pid.realtemp  > (ptherm->pid.goal - OVER_HEAT_EDGE)){
 			ptherm->pid_st = PID_OVERHEATLAST;
 			chrConter = 0;		   
 		}
@@ -264,15 +145,15 @@ uint32_t Pid_work(void) {
 		if (chrConter  > ptherm->overHeatTime){
 			ptherm->pid_st = PID_ADJ;
 			/*PID功率值维持不变*/
-			ptherm->integral = (ptherm->overHeat*ptherm->Kp)/ptherm->Ki;	
-			ptherm->integral += (ptherm->variate)/ptherm->Ki;	
-			therm.goal -= therm.overHeat;
+			ptherm->pid.integral = (ptherm->overHeat*ptherm->pid.Kp)/ptherm->pid.Ki;	
+			ptherm->pid.integral += (ptherm->pid.variate)/ptherm->pid.Ki;	
+			ptherm->pid.goal -= ptherm->overHeat;
 			chrConter = 0;
 		}
 	}break;
 	case PID_ADJ:{
-		PIDRealize(ptherm);
-		if ((ptherm->realtemp  > (ptherm->goal - OVER_HEAT_EDGE)) && (ptherm->realtemp  < (ptherm->goal + OVER_HEAT_EDGE))){
+		PIDRealize(&ptherm->pid);
+		if ((ptherm->pid.realtemp  > (ptherm->pid.goal - OVER_HEAT_EDGE)) && (ptherm->pid.realtemp  < (ptherm->pid.goal + OVER_HEAT_EDGE))){
 			if(chrConter < HEAT_STABLE_TIME){
 				chrConter ++;
 			}
@@ -287,154 +168,140 @@ uint32_t Pid_work(void) {
 	}break;
 	default:
 		ptherm->pid_st = PID_IDLE;
-		ptherm->variate = 0;
+		ptherm->pid.variate = 0;
 		break;
-  }
-  SetThermPwm(ptherm->variate);
-//	char data[20];
-//	*(int *)(data+0) = ptherm->thermostat_st;
-//	*(float *)(data+4) = ptherm->realtemp;
-//	*(float *)(data+8) = ptherm->variate; 
-//	*(float *)(data+12) = ptherm->integral;
-//	*(float *)(data+16) = ptherm->err;
-//	b2b_send_to_pc(PC_CMD_DATASCOPE, data, sizeof(data)); 
+  }  
+  com_pwm_Set(sysinf.lysis.pwdId,ptherm->pid.variate);
+//   com_pwm_Set(sysinf.lysis.pwdId,80);
   return 0;
-
 }
 
-uint32_t Therm_updat_work(void) {
-  PID_def *ptherm = &therm;
-	char data[20];
-	*(int *)(data+0) = (ptherm->pid_st + (ptherm->thermostat_st << 8));
-	*(float *)(data+4) = ptherm->realtemp;
-	*(float *)(data+8) = ptherm->variate; 
-	*(float *)(data+12) = ptherm->integral;
-	*(float *)(data+16) = ptherm->err;
-	// b2b_send_device(B2B_CMD_DATASCOPE, data, sizeof(data),0);  
+uint32_t get_lysis_st(float *temp,unsigned int *st) {
+
+	*temp = sysinf.lysis.pid.realtemp;
+	*st = sysinf.lysis.thermostat_st;
 	return 0;
 }
-uint32_t Therm_work(void) {
+uint32_t lysis_work(void) {
   float temp;
   static uint32_t last10ms;
-  PID_def *ptherm = &therm;
+  lysis_ctr_def *ptherm = &sysinf.lysis;
 
-  NTCGetVoltage(&temp);
-  ptherm->realtemp = temp + ptherm->offset;
+  temp = getADC_Chanel_value(1);
+  ptherm->pid.realtemp = temp + ptherm->offset;
   switch(ptherm->thermostat_st){
 	case THERMOSTAT_PWRON:{
 		
   		static float firstTemp;
-		if(ylsis_stFistin){
-			ylsis_stFistin = false;
-			sysinf.lysisState = SYS_STATE_PREPARE; 
-			NTCGetVoltage(&firstTemp);
+		if(ptherm->firstin){
+			ptherm->firstin = false;
+			updateLysisState(SYS_STATE_PREPARE);sysinf.lysisState = SYS_STATE_PREPARE; 
+			firstTemp = getADC_Chanel_value(1);
 			if(firstTemp < MIN_TEMPERATUARE || firstTemp > MAX_TEMPERATUARE){
 			 	error_set(ERROR_TEMPSENSOR_EER);
 				ptherm->thermostat_st = THERMOSTAT_ERROR;
-				ylsis_stFistin = true;	
+				ptherm->firstin = true;	
 			 }else{
-				 Set_therm(firstTemp+30);
+				 set_lysis(firstTemp+30);
 				 last10ms = conter10ms;
 			 }  
 			
 		}else{
-			float heattemp;
-			NTCGetVoltage(&heattemp); 
-			 if((heattemp - firstTemp) > HEAT_WORK_THD){
+			float heattemp = getADC_Chanel_value(1); 
+			if((heattemp - firstTemp) > HEAT_WORK_THD){
 					ptherm->thermostat_st = THERMOSTAT_WARM;
-					ylsis_stFistin = true;
+					ptherm->firstin = true;
 					ptherm->pid_st = PID_IDLE;
 			  }
 
 			if((conter10ms-last10ms)> HEAT_TEST_TIME){
 				/*超时判断*/
 				ptherm->thermostat_st = THERMOSTAT_ERROR;
-				sysinf.lysisState = SYS_STATE_ERROR_HW;
+				updateLysisState(SYS_STATE_ERROR_HW);
 				error_set(ERROR_HEATFUC_EER);
-				ylsis_stFistin = true;
+				ptherm->firstin = true;
 			}
 		}	
 	}break;
 	case THERMOSTAT_NOTICE:{
-		if(ylsis_stFistin){
+		if(ptherm->firstin){
 			/*上电或者预热状态存在管管,停止加热*/			
-			sysinf.lysisState = SYS_STATE_ERROR_HW; 
-			error_set(ERROR_TUPE_EXIST); 
-			Set_therm( 0);
-			ylsis_stFistin = false;
+			updateLysisState(SYS_STATE_ERROR_HM);
+			set_lysis( 0);
+			ptherm->firstin = false;
 		}else{			
 		    if(Read_Tupe() == 0){
 			/*管管移除,进入到预热状态*/
 				ptherm->thermostat_st = THERMOSTAT_WARM;
 				error_clear();
-				ylsis_stFistin = true;
+				ptherm->firstin = true;
 			}
 		}	    	
 	}break;
 		
 	case THERMOSTAT_WARM:{
-		if(ylsis_stFistin){
+		if(ptherm->firstin){
 			
-			sysinf.lysisState = SYS_STATE_PREPARE; 
-			ylsis_stFistin = false;
+			updateLysisState(SYS_STATE_PREPARE);
+			ptherm->firstin = false;
 			if(ptherm->idletemp < 0.1){
 				/*预热参数配置为0,无需要预热*/
 				ptherm->thermostat_st = THERMOSTAT_IDLE;
-				ylsis_stFistin = true;
+				ptherm->firstin = true;
 			}else{				
-				Set_therm(ptherm->idletemp);
+				set_lysis(ptherm->idletemp);
 			}
 		}else{
 			/*预热到位,进入空闲状态*/
-			if(ptherm->realtemp > (ptherm->idletemp - HEAT_ARRIVE_EDGE)){
+			if(ptherm->pid.realtemp > (ptherm->idletemp - HEAT_ARRIVE_EDGE)){
 				ptherm->thermostat_st = THERMOSTAT_IDLE;
-				ylsis_stFistin = true;
+				ptherm->firstin = true;
 			}
 //		    if(Read_Tupe()){
 //				/*预热插管管,进入提示状态*/
 //				ptherm->thermostat_st = THERMOSTAT_NOTICE;
-//				ylsis_stFistin = TRUE;
+//				ptherm->firstin = TRUE;
 //			}
 		}
 	}break;
 	case THERMOSTAT_IDLE:{
-		if(ylsis_stFistin){			
-			sysinf.lysisState = SYS_STATE_READY; 	
-			ylsis_stFistin = false;
+		if(ptherm->firstin){			
+			updateLysisState(SYS_STATE_READY);
+			ptherm->firstin = false;
 			Close_therm(0);
-			recGoalFlag = 0;
+			ptherm->recGoalFlag = 0;
 			
 		}else{	
-		    if(recGoalFlag){
-				Set_therm(ptherm->goal);	
-				recGoalFlag = 0;
+		    if(ptherm->recGoalFlag){
+				set_lysis(ptherm->pid.goal);	
+				ptherm->recGoalFlag = 0;
 			}
 			if(ptherm->pid_stable){
 				ptherm->thermostat_st = THERMOSTAT_INSERT;
-				ylsis_stFistin = true;	
+				ptherm->firstin = true;	
 			}
 //		    if(Read_Tupe()){
 //				/*预热插管管,进入提示状态*/
 //				ptherm->thermostat_st = THERMOSTAT_NOTICE;
-//				ylsis_stFistin = TRUE;
+//				ptherm->firstin = TRUE;
 //			}
 		}
 	}break;
 	case THERMOSTAT_INSERT:{
-		if(ylsis_stFistin){			
-			sysinf.lysisState = SYS_STATE_CHECK; 
-			ylsis_stFistin = false;
+		if(ptherm->firstin){			
+			updateLysisState(SYS_STATE_CHECK);
+			ptherm->firstin = false;
 		}else{	
 		    if(Read_Tupe()){
 				ptherm->thermostat_st = THERMOSTAT_WORK;
-				ylsis_stFistin = true;		
+				ptherm->firstin = true;		
 				}
 		}
 	}break;
 	case THERMOSTAT_WORK:{
-		if(ylsis_stFistin){	
-			sysinf.lysisState = SYS_STATE_RUNING; 
-			ylsis_stFistin = false;
+		if(ptherm->firstin){	
+			updateLysisState(SYS_STATE_RUNING);
+			ptherm->firstin = false;
 			ptherm->pid_stable_time = 0;
 		}else{
 //		    if(Read_Tupe()){
@@ -446,7 +313,7 @@ uint32_t Therm_work(void) {
 //					ptherm->thermostat_st = THERMOSTAT_ERROR;
 //					error_set(ERROR_TUPE_MOVE); 
 //					last10ms = conter10ms;	
-//					ylsis_stFistin = TRUE;			
+//					ptherm->firstin = TRUE;			
 //				}
 //			}
 //			if(ptherm->pid_stable)
@@ -454,15 +321,15 @@ uint32_t Therm_work(void) {
 				ptherm->pid_stable_time ++;
 				if(ptherm->pid_stable_time > ptherm->worktime){
 					ptherm->thermostat_st = THERMOSTAT_END;
-					ylsis_stFistin = true;		
+					ptherm->firstin = true;		
 				}
 			}
 		}
 	}break;
 	case THERMOSTAT_END:{
-		if(ylsis_stFistin){
-			sysinf.lysisState = SYS_STATE_WORKEND; 
-			ylsis_stFistin = false;
+		if(ptherm->firstin){
+			updateLysisState(SYS_STATE_WORKEND);
+			ptherm->firstin = false;
 			Close_therm(0);
 			last10ms = conter10ms;
 		}else{			
@@ -470,20 +337,20 @@ uint32_t Therm_work(void) {
 //			if(Read_Tupe() == 0){
 			/*管管移除,进入到预热状态*/
 				ptherm->thermostat_st = THERMOSTAT_WARM;
-				ylsis_stFistin = true;
+				ptherm->firstin = true;
 			}
 		}
 	}break;
 	case THERMOSTAT_ERROR:{
-		if(ylsis_stFistin){
-			ylsis_stFistin = false;
+		if(ptherm->firstin){
+			ptherm->firstin = false;
 			Close_therm(0);
 		}else{	
 			if(ptherm->eerst == THERMOSTAT_TUBENOEXIST_EER){
 				if((conter10ms-last10ms)> EER_NOEXIST_TIME_GAP){			
 					ptherm->thermostat_st = THERMOSTAT_IDLE;
 					error_clear();
-					ylsis_stFistin = true;		
+					ptherm->firstin = true;		
 				}
 			}	
 		}
@@ -495,9 +362,9 @@ uint32_t Therm_work(void) {
 }
 
 uint32_t Close_Therm_work(void) {
-  PID_def *ptherm = &therm;
+  lysis_ctr_def *ptherm = &sysinf.lysis;
   ptherm->thermostat_st = THERMOSTAT_END;
-  ylsis_stFistin = true;
+  ptherm->firstin = true;
   return 0;
 }
 

+ 62 - 5
DriverInterface/usr_lysis.h

@@ -8,6 +8,7 @@
 #ifndef USR_LYSIS_H_
 #define USR_LYSIS_H_
 
+#include "van_com_algorithm.h"
 /*************************************/
 
 #define TUPE_OPTIC_PORT PF//光开
@@ -31,11 +32,67 @@ typedef enum {
 	COOL_DOWN = 1,
 }HEAT_DIR;
 
-void updatParm_therm(void);
-void Set_therm(float goal) ;
-uint32_t Therm_work(void);
-uint32_t Therm_updat_work(void);
-uint32_t Close_Therm_work(void);
 
+typedef enum Heat_state {
+  PID_IDLE,
+  PID_OVERHEAT,
+  PID_OVERHEATLAST,
+  PID_OVERCOOL,
+  PID_OVERCOOLLAST,
+  PID_ADJ,
+  PID_STAB,
+  PID_ERROR,
+} pid_state_def;
+
+typedef enum {
+  THERMOSTAT_NOR,     // 正常
+  THERMOSTAT_COOL_EER,    //制冷坏
+  THERMOSTAT_HEAT_EER, // 加热坏
+  THERMOSTAT_SENSER_EER,     // 传感器坏
+  THERMOSTAT_TUBEEXIST_EER,     //存在试管
+  THERMOSTAT_TUBENOEXIST_EER,     //不存在试管
+} THERMOSTAT_ERR_State;
+
+
+
+typedef enum THERMO_state {
+  THERMOSTAT_PWRON,
+  THERMOSTAT_CHECK,
+  THERMOSTAT_WARM,
+  THERMOSTAT_IDLE,
+  THERMOSTAT_INSERT,
+  THERMOSTAT_NOTICE,
+  THERMOSTAT_WORK,
+  THERMOSTAT_END,
+  THERMOSTAT_ERROR,
+} thermostat_state_def;
+
+
+typedef struct
+{
+	float offset;               
+    float overHeat;       
+    float overHeatTime;          
+    float overCool;       
+    float overCoolTime;       
+    float idletemp;  	      
+    float worktime;  		     
+    pid_def  pid;	
+	unsigned int pwdId;
+    float cabinTem;    
+	pid_state_def pid_st; 
+	unsigned int pid_stable;   
+	unsigned int pid_stable_time;   
+	thermostat_state_def thermostat_st;
+	THERMOSTAT_ERR_State eerst;
+  unsigned int recGoalFlag;
+  unsigned int firstin;
+}lysis_ctr_def;
+
+void updatParm_lysis(void);
+void set_lysis(float goal) ;
+uint32_t lysis_work(void);
+uint32_t Close_lysis_work(void);
+uint32_t get_lysis_st(float *temp,unsigned int *st);
 /***********************************/
 #endif /* USR_HEATER_H_ */

+ 17 - 8
DriverInterface/usr_motor.c

@@ -358,7 +358,6 @@ void OPTO_IRQHandler(void) {
  * @details
  */
 void Motor_Init()
-
 {
   key_ctrl.last_level = 1;
   timeinner = sysinf.timeinner;
@@ -389,14 +388,16 @@ uint32_t Motor_mix(uint32_t time, uint32_t speed, uint32_t swing,
   swingtimePause = timePause;
 //  timeinner = time - time % (swing + timeRight);
 //  curtimeinner = timeinner;
-  if (speed == 0) {
-    swingspeed = MOTOR_CHECK_SPEED;
+  if (speed == 0) {    
+	return 0;
   }
   
-  curtimeinner = sysinf.conter10ms;
-
-  sw_st = SWING_LOOP;
-  stateFistin = 1;
+      curtimeinner = conter10ms;
+      sw_st = SWING_LOOP;
+	  startLoopConter = 2;
+      stateFistin = 1;	  		
+	  backOptFlag = 1;
+	  findhomedir = MOTOR_REV;
 	return 0;
 }
 
@@ -443,6 +444,14 @@ if (key == KEY_LONG || key == KEY_END ) {
 	return 0;
 }
 
+void Motor_reset(void) {
+      curtimeinner = conter10ms;
+	  sw_st = FIND_GAPNUM;
+	  stateFistin = 1;
+	  resetFromSwingFlag = 0;
+}
+
+
 /**
  * @brief	   Motor_mix_work
  *
@@ -499,7 +508,7 @@ uint32_t Motor_mix_work(void) {
   		/*电机不动,返回报错*/
   		SetMotorPwm(MOTOR_REV, 0);
   		sw_st = SWING_ERR;
-//  		error_set(ERROR_MOTOR_FIALED);
+		error_set(ERROR_MOTOR_FIALED);
   		return 1;
   	  }
     } 

+ 1 - 1
DriverInterface/usr_motor.h

@@ -43,7 +43,7 @@ uint32_t Motor_mix_work(void);
 uint32_t Motor_Run_Continue(uint32_t speed);
 uint32_t Motor_idle(void);
 uint32_t print_home_time(void);
-
+void Motor_reset(void);
 
 /***********************************/
 #endif /* USR_MOTMOR_H_ */

+ 43 - 42
DriverInterface/van_BSP_Com_Pwm.c

@@ -64,48 +64,6 @@ bool com_pwm_FindChanle(unsigned int devId, P_VAN_COM_PWM_Def *pdev) {
   return false;
 }
 
-/****************************************************************
- 函数名:   com_pwm_Set
- 创建时间:  2024/01/08
- 创建人:    范义东
- 函数说明:设置pwm
- 参数: devId 通道
-       value pwm值,负值为反向
- 返回值 :  加载成功
-****************************************************************/
-void com_pwm_Set(unsigned int devId, float value) {
-  P_VAN_COM_PWM_Def pdev;
-//  value ;
-  int DutyCycle = value;
-  if (DutyCycle > MAX_PWM_VALUE) {
-      DutyCycle = MAX_PWM_VALUE;
-  }else if(DutyCycle < -MAX_PWM_VALUE) {
-      DutyCycle = -MAX_PWM_VALUE;
-  }
-  if (com_pwm_FindChanle(devId, &pdev)) {
-    //    Van_Device_Printf(VAN_LOG_NOTICE, "before pwn %s pluse:%d\n", pdev->Name, DutyCycle);
-    if (pdev->dirPort && (pdev->type == COM_PWM_8870 || pdev->type == COM_PWM_8873)) {
-			GPIO_PinState PinState =   ((DutyCycle < 0) ^ (pdev->dirState == GPIO_PIN_SET))?GPIO_PIN_SET:GPIO_PIN_RESET;
-			HAL_GPIO_WritePin(pdev->dirPort, pdev->dirPin, PinState);
-			if (DutyCycle < 0 && pdev->type == COM_PWM_8870) {
-				DutyCycle = MAX_PWM_VALUE+DutyCycle;	
-			}		
-			if (DutyCycle < 0 && pdev->type == COM_PWM_8873) {
-				DutyCycle = -DutyCycle;	
-			}
-    }
-    if (DutyCycle < 0) {
-      DutyCycle = 0;
-    } else if (DutyCycle > MAX_PWM_VALUE) {
-      DutyCycle = MAX_PWM_VALUE;
-    }
-    __HAL_TIM_SET_COMPARE((TIM_HandleTypeDef *)pdev->timerHandle, pdev->pwmChanle, DutyCycle);
-    pdev->state = PWM_BUMP_ST_RUN;
-    //    Van_Device_Printf(VAN_LOG_NOTICE, "pwn %s pluse:%d\n", pdev->Name, DutyCycle);
-  } else {
-    Van_Device_Printf(VAN_LOG_ERROR, "pwn %d not support:%d\n", devId);
-  }
-}
 
 /****************************************************************
  函数名:   com_pwm_Getconter
@@ -148,6 +106,49 @@ bool com_pwm_test(unsigned int Id, int value) {
   return False;
 }
 
+/****************************************************************
+ 函数名:   com_pwm_Set
+ 创建时间:  2024/01/08
+ 创建人:    范义东
+ 函数说明:设置pwm
+ 参数: devId 通道
+       value pwm值,负值为反向
+ 返回值 :  加载成功
+****************************************************************/
+void com_pwm_Set(unsigned int devId, float value) {
+  P_VAN_COM_PWM_Def pdev;
+  float temp = value;
+  int DutyCycle = (int)temp;
+  DutyCycle *= 10; 
+  if (DutyCycle > MAX_PWM_VALUE) {
+      DutyCycle = MAX_PWM_VALUE;
+  }else if(DutyCycle < -MAX_PWM_VALUE) {
+      DutyCycle = -MAX_PWM_VALUE;
+  }
+  if (com_pwm_FindChanle(devId, &pdev)) {
+    // //    Van_Device_Printf(VAN_LOG_NOTICE, "before pwn %s pluse:%d\n", pdev->Name, DutyCycle);
+    // if (pdev->dirPort && (pdev->type == COM_PWM_8870 || pdev->type == COM_PWM_8873)) {
+		// 	GPIO_PinState PinState =   ((DutyCycle < 0) ^ (pdev->dirState == GPIO_PIN_SET))?GPIO_PIN_SET:GPIO_PIN_RESET;
+		// 	HAL_GPIO_WritePin(pdev->dirPort, pdev->dirPin, PinState);
+		// 	if (DutyCycle < 0 && pdev->type == COM_PWM_8870) {
+		// 		DutyCycle = MAX_PWM_VALUE+DutyCycle;	
+		// 	}		
+		// 	if (DutyCycle < 0 && pdev->type == COM_PWM_8873) {
+		// 		DutyCycle = -DutyCycle;	
+		// 	}
+    // }
+    if (DutyCycle < 0) {
+      DutyCycle = 0;
+    } else if (DutyCycle > MAX_PWM_VALUE) {
+      DutyCycle = MAX_PWM_VALUE;
+    }
+    TIM_HandleTypeDef *ptimer = pdev->timerHandle;
+    __HAL_TIM_SET_COMPARE(ptimer, pdev->pwmChanle, DutyCycle);
+    pdev->state = PWM_BUMP_ST_RUN;
+  } else {
+    Van_Device_Printf(VAN_LOG_ERROR, "pwn %d not support:%d\n", devId);
+  }
+}
 /****************************************************************
  * 函数名:    showIVT
  * 创建时间:    2024/01/08

+ 1 - 1
DriverInterface/van_BSP_Com_Pwm.h

@@ -10,7 +10,7 @@ author				范义东			新建				2024/01/27
 #define __VAN_BSP_COM_PWM_H
 
 #include "van_com_define.h"
-#define MAX_PWM_VALUE  10000
+#define MAX_PWM_VALUE  999
 
 typedef enum
 {

+ 36 - 11
DriverInterface/van_BSP_ESPUart.c

@@ -13,24 +13,49 @@
 
 
 uint8_t g_wifi_rx_buf[WIFI_RX_BUF_SIZE];
-uint8_t g_wifi_rx_len;
+uint32_t g_wifi_rx_last;
+uint32_t g_wifi_rx_head;
 
 void esp_receive_Rec_IDLE(UART_HandleTypeDef *huart)
 {
-	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
-	{
-		__HAL_UART_CLEAR_IDLEFLAG(huart);
-		g_wifi_rx_len		= WIFI_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
-		HAL_UART_DMAStop(huart); 
-		HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);	
-	}
+	// if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
+	// {
+	// 	__HAL_UART_CLEAR_IDLEFLAG(huart);
+	// 	g_wifi_rx_len		= WIFI_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
+	// 	HAL_UART_DMAStop(huart); 
+	// 	HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);	
+	// }
+   // 手动判断并读取
+    if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE)) {
+        uint8_t data = (uint8_t)(huart->Instance->DR & 0xFF);
+		__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
+        g_wifi_rx_buf[g_wifi_rx_last++] = data;
+		if(g_wifi_rx_last == WIFI_RX_BUF_SIZE){
+			g_wifi_rx_last = 0;
+		}
+        // 存缓冲区...
+      
+        // 清除RXNE标志(读DR后自动清除,这里不需要额外操作)
+        // 但若要用HAL方式清除可调用:__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
+    }
+    
+    // 处理错误(如ORE)
+    if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) {
+        __HAL_UART_CLEAR_OREFLAG(huart);
+        // 也可读取DR丢弃数据
+        volatile uint8_t temp = huart->Instance->DR;
+        (void)temp;
+    }
+
+	
 }
 
 
 
 void wifi_receive_clear(void){
 	memset(g_wifi_rx_buf,0,WIFI_RX_BUF_SIZE);
-	g_wifi_rx_len = 0;
+	g_wifi_rx_last = 0;
+	g_wifi_rx_head = 0;
 }
 
 
@@ -39,6 +64,6 @@ void wifi_receive_clear(void){
 void esp_receive_Rec_Start(UART_HandleTypeDef *huart){
 		__HAL_UART_CLEAR_IDLEFLAG(huart);
 	  memset((char *)g_wifi_rx_buf,0,WIFI_RX_BUF_SIZE);
-		HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);	
-	__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE);
+	// 	HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);	
+	__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
 }

+ 42 - 24
DriverInterface/van_BSP_Scanner.c

@@ -15,6 +15,8 @@
 
 #define ENV_ADJ_THRESHOLD 27.0
 
+#define QR_RESEND_3s   300
+
 
 #define DEBUG_BUF_SIZE (512)	// 调试串口缓冲区长度
 #define BUF_SIZE (512)	// 调试串口缓冲区长度
@@ -43,8 +45,8 @@ enum SLAVE_MCU_Ctr_UP_type
 uint8_t g_uart2_rcv_start = 0;
 uint8_t g_uart2_rcv_complete_flg = 0;
 uint8_t g_uart2_rx_buf[DEBUG_BUF_SIZE] = {0};
-uint8_t g_uart2_tx_buf[BUF_SIZE] = {0};
-uint16_t g_uart2_rx_len = 0;
+// uint8_t g_uart2_tx_buf[BUF_SIZE] = {0};
+uint32_t g_uart2_rx_len = 0;
 
 str_hole_info_t hole1 = {0};
 str_hole_info_t hole2 = {0};
@@ -68,8 +70,10 @@ uint32_t received_len;
 void svanner_receive_Rec_Start(UART_HandleTypeDef *huart){
 		__HAL_UART_CLEAR_IDLEFLAG(huart);
 	  memset((char *)g_uart2_rx_buf,0,DEBUG_BUF_SIZE);
+	  received_len = 0;
 		HAL_UART_Receive_DMA(huart, g_uart2_rx_buf, DEBUG_BUF_SIZE);	
 	__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE);
+	sysinf.updateQR = false;
 }
 
 
@@ -99,11 +103,8 @@ void svanner_receive_Rec_IDLE(UART_HandleTypeDef *huart)
 	{
 		__HAL_UART_CLEAR_IDLEFLAG(huart);
 		received_len		= DEBUG_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
-		 HAL_UART_DMAStop(huart); 
-
+		HAL_UART_DMAStop(huart); 
 		HAL_UART_Receive_DMA(huart, g_uart2_rx_buf, DEBUG_BUF_SIZE);
-		
-		sysinf.updateQR = false;	
 	}
 }
 
@@ -111,45 +112,62 @@ void svanner_receive_Rec_IDLE(UART_HandleTypeDef *huart)
 void svanner_receive_analysis(void)
 {
 	if(received_len){	
-		Van_Device_Printf(VAN_LOG_CRITICAL, "rec QR inif %d \n\r",received_len);
-		unsigned filter = 0;
-		/*while('{' != g_uart2_rx_buf[filter] && filter<received_len){
-			filter++;
-		}*/
-		if ('{' == g_uart2_rx_buf[0]){
+		// Van_Device_Printf(VAN_LOG_INFO, "rec QR inif %d \n\r",received_len);
+		if (('{' == g_uart2_rx_buf[0]) && (sysinf.updateQR == false)){
 			if(0 == parse_qrcode_info(&m_str_card_param_info,  (char *)&g_uart2_rx_buf[0])){
 				haveheaderflag = QR_REC_STATE_SENDPRAM; 	
-				memcpy(&g_uart2_rx_buf[g_uart2_rx_len],  sysinf.SN, 7);
-				g_uart2_rx_len += 7;
+				memcpy(&g_uart2_rx_buf[received_len],  sysinf.SN, 7);
+				received_len += 7;
 				qr_check_delay = 0;				
 				if((sysinf.psmMaster.state == SW_Scan_Qrcode || sysinf.psmMaster.state == SW_Chip_Id  )){
 					svanner_receive_Rec_Stop(sysinf.scannerUart);
 					sysinf.updateQR = true;
-					data_send_to_pc(PC_CMD_QRCODE,(char *)g_uart2_rx_buf, g_uart2_rx_len);	
-				}else{
+					data_send_to_pc(PC_CMD_QRCODE,(char *)g_uart2_rx_buf, received_len);	
+					memcpy(&sysinf.psmMaster.card_param_info, &m_str_card_param_info, sizeof(str_card_param_info_t));
+				}
+				else{
 #ifdef ONECHIP_MINI_PLUSE
 				if((sysinf.psmSlave.state == SW_Scan_Qrcode || sysinf.psmSlave.state == SW_Chip_Id  )){
-					{
 
 					}
 #endif
 				}
-
-				Van_Device_Printf(VAN_LOG_CRITICAL, "unpack json ok \n\r ");
+				sysinf.QRBeepTimeer = 100;
+				sysinf.resendeQRtimer = 1;
+				HAL_GPIO_WritePin((GPIO_TypeDef *)sysinf.beep_port, sysinf.beep_pin,GPIO_PIN_SET); 
 			}
 			else{
-				Van_Device_Printf(VAN_LOG_CRITICAL, "unpack json error \n\r %s",g_uart2_rx_buf);
+				Van_Device_Printf(VAN_LOG_WARN, "unpack json error \n\r %s",g_uart2_rx_buf);
 			}
 		}
 		else{
-				Van_Device_Printf(VAN_LOG_CRITICAL, "header error \n\r %s",g_uart2_rx_buf);
+				if(sysinf.updateQR == false){
+					Van_Device_Printf(VAN_LOG_WARN, "header error \n\r %s",g_uart2_rx_buf);		
+					svanner_receive_Rec_Start(sysinf.scannerUart);
+				}				
 			}
-		
-		received_len = 0;	
-	  memset((char *)g_uart2_rx_buf,0,DEBUG_BUF_SIZE);
+
 	}
 	return;
 }
+/*****************************************************************************
+*
+*二维码未收到应答,重新上报
+*
+************************************************************************************/
+void reSend_QR(void)
+{
+	if(sysinf.updateQR ){
+		sysinf.resendeQRtimer++;
+		if((sysinf.resendeQRtimer % QR_RESEND_3s)==0){
+			data_send_to_pc(PC_CMD_QRCODE,(char *)g_uart2_rx_buf, received_len);			
+			if(sysinf.resendeQRtimer  > 5*QR_RESEND_3s){
+				/*最多重发5次*/				
+				svanner_receive_Rec_Start(sysinf.scannerUart);
+			}	
+		}
+	}
+}
 
 
 int parse_qrcode_info(str_card_param_info_t *info, char *qrcode_str)

+ 1 - 1
DriverInterface/van_BSP_Scanner.h

@@ -30,5 +30,5 @@ void QRparam_upload(str_card_param_info_t *p_str_card_param_info);
 void svanner_receive_Rec_IDLE(UART_HandleTypeDef *huart);
 void svanner_receive_Rec_Start(UART_HandleTypeDef *huart);
 void svanner_receive_analysis(void);
-
+void reSend_QR(void);
 #endif /* UART_RCV_H_ */

+ 73 - 0
DriverInterface/ws2812.c

@@ -3,6 +3,8 @@
 
 #include "onechip_include_header.h"
 
+
+
 static  struct str_ws2812 lihgt_ctrl = {0};     //灯带控制结构
 static uint32_t tick = 0;
 
@@ -113,6 +115,76 @@ void light_set(uint8_t mode_select, uint16_t speed_ms, uint32_t rgb_color, uint8
 }
 
 
+/********************************************************************
+ * void light_set(uint8_t mode_select, uint16_t speed_ms, uint32_t rgb_color, uint8_t channel)
+ *
+ *描述:设置灯带
+ *参数:uint8_t mode_select:模式
+ *参数:uint16_t speed_ms:变化周期
+ *参数:uint32_t rgb_color:颜色, 低24位有效
+ *参数:uint8_t channel:通道,0左,1右
+ *返回:无
+ *其他:无
+ ********************************************************************/
+void light_update(void){
+    
+    if(sysinf.amplifState == SYS_STATE_ERROR_HM){
+        light_set(MODE_BLINK,500, COLOR_RED,0);	//
+    }else if(sysinf.amplifState == SYS_STATE_ERROR_HW){
+        light_set(MODE_NORMAL,1000, COLOR_RED,0);	//
+    } else   if(sysinf.pc_link_timeout == OFFLINE_TIME){
+        light_set(MODE_BLINK,1000, COLOR_YELLOW,0);	//
+        light_set(MODE_BLINK,1000, COLOR_YELLOW,1);	//
+        sysinf.pc_channel_recv  = PC_CONNECT_TYPE_NULL;
+        return ;
+    }   else if(sysinf.pc_link_timeout < OFFLINE_TIME){
+        switch (sysinf.amplifState){
+            case SYS_STATE_PREPARE:
+                light_set(MODE_NORMAL,1000, COLOR_YELLOW,0);
+            break;
+            case SYS_STATE_READY:
+                light_set(MODE_NORMAL,1000, COLOR_GREEN,0);
+            break;
+            case SYS_STATE_CHECK:
+                light_set(MODE_NORMAL,1000, COLOR_BLUE,0);
+            break;
+            case SYS_STATE_RUNING:
+                light_set(MODE_BREATH,1000, COLOR_BLUE,0);
+            break;
+            case SYS_STATE_WORKEND:
+                light_set(MODE_BLINK,1000, COLOR_GREEN,0);
+            break;
+        }
+    }
+            
+   
+    if(sysinf.lysisState == SYS_STATE_ERROR_HM){
+        light_set(MODE_BLINK,500, COLOR_RED,1);	//离线,黄色1S闪烁
+    }else if(sysinf.lysisState == SYS_STATE_ERROR_HW){
+        light_set(MODE_NORMAL,1000, COLOR_RED,1);	//离线,黄色1S闪烁
+    }   else if(sysinf.pc_link_timeout < OFFLINE_TIME){
+        switch (sysinf.lysisState){
+            case SYS_STATE_PREPARE:
+                light_set(MODE_NORMAL,1000, COLOR_YELLOW,1);
+            break;
+            case SYS_STATE_READY:
+                light_set(MODE_NORMAL,1000, COLOR_GREEN,1);
+            break;
+            case SYS_STATE_CHECK:
+                light_set(MODE_NORMAL,1000, COLOR_BLUE,1);
+            break;
+            case SYS_STATE_RUNING:
+                light_set(MODE_BREATH,1000, COLOR_BLUE,1);
+            break;
+            case SYS_STATE_WORKEND:
+                light_set(MODE_BLINK,1000, COLOR_GREEN,1);
+            break;
+        }
+    }
+    sysinf.pc_link_timeout++;
+    
+}
+
 /********************************************************************
  * void light_refresh(uint32_t rgb_left, uint32_t rgb_right)
  *
@@ -148,6 +220,7 @@ void light_ctrl()
     uint32_t r_g_b = 0; //r/g/b单色分量
 
     //计算颜色
+    light_update();
     for(int i = 0; i < 2; i++)
     {
         switch (lihgt_ctrl.light_mode[i])

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 15 - 22
MDK-ARM/mini7_V2.uvguix.Administrator


+ 66 - 13
MDK-ARM/mini7_V2.uvoptx

@@ -125,7 +125,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGTARM</Key>
-          <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
+          <Name>(1010=76,112,526,669,0)(1007=106,145,293,420,0)(1008=91,129,467,365,0)(1009=121,161,379,749,0)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -148,7 +148,24 @@
           <Name>-U-O142 -O2254 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>515</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134251616</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\DriverInterface\ESP32_WROOM_32D.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\mini7_V2\../DriverInterface/ESP32_WROOM_32D.c\515</Expression>
+        </Bp>
+      </Breakpoint>
       <WatchWindow1>
         <Ww>
           <count>0</count>
@@ -158,26 +175,54 @@
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>g_uart2_rx_buf</ItemText>
+          <ItemText>g_cmd_rx_buf</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
-          <ItemText>timerBuf</ItemText>
+          <ItemText>wifi_state</ItemText>
         </Ww>
         <Ww>
           <count>3</count>
           <WinNumber>1</WinNumber>
-          <ItemText>sw_st</ItemText>
+          <ItemText>g_wifi_rx_head</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>MAC_ADDR</ItemText>
+        </Ww>
+        <Ww>
+          <count>5</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>g_wifi_rx_buf</ItemText>
+        </Ww>
+        <Ww>
+          <count>6</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>g_uart2_rx_buf</ItemText>
+        </Ww>
+        <Ww>
+          <count>7</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>sysinf</ItemText>
         </Ww>
       </WatchWindow1>
+      <MemoryWindow1>
+        <Mm>
+          <WinNumber>1</WinNumber>
+          <SubType>0</SubType>
+          <ItemText>0x0807f800</ItemText>
+          <AccSizeX>0</AccSizeX>
+        </Mm>
+      </MemoryWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>1</aLwin>
+        <aLwin>0</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>
@@ -214,17 +259,13 @@
       <pSingCmdsp></pSingCmdsp>
       <pMultCmdsp></pMultCmdsp>
       <SystemViewers>
-        <Entry>
-          <Name>System Viewer\DMA1</Name>
-          <WinId>35904</WinId>
-        </Entry>
         <Entry>
           <Name>System Viewer\GPIOA</Name>
-          <WinId>35905</WinId>
+          <WinId>35904</WinId>
         </Entry>
         <Entry>
           <Name>System Viewer\GPIOC</Name>
-          <WinId>35903</WinId>
+          <WinId>35905</WinId>
         </Entry>
       </SystemViewers>
       <DebugDescription>
@@ -239,7 +280,7 @@
 
   <Group>
     <GroupName>Application/MDK-ARM</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -843,6 +884,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>47</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\DriverInterface\user_heater.c</PathWithFileName>
+      <FilenameWithoutPath>user_heater.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>

+ 7 - 2
MDK-ARM/mini7_V2.uvprojx

@@ -188,7 +188,7 @@
             <hadIRAM2>0</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>8</StupSel>
-            <useUlib>0</useUlib>
+            <useUlib>1</useUlib>
             <EndSel>0</EndSel>
             <uLtcg>0</uLtcg>
             <nSecure>0</nSecure>
@@ -312,7 +312,7 @@
           </ArmAdsMisc>
           <Cads>
             <interw>1</interw>
-            <Optim>0</Optim>
+            <Optim>1</Optim>
             <oTime>0</oTime>
             <SplitLS>0</SplitLS>
             <OneElfS>1</OneElfS>
@@ -642,6 +642,11 @@
               <FileType>1</FileType>
               <FilePath>..\DriverInterface\state_mini.c</FilePath>
             </File>
+            <File>
+              <FileName>user_heater.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\DriverInterface\user_heater.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

+ 30 - 66
MDK-ARM/startup_stm32f103xe.lst

@@ -241,9 +241,9 @@ ARM Macro Assembler    Page 4
 ]
   146 00000000                 IMPORT           __main
   147 00000000                 IMPORT           SystemInit
-  148 00000000 4809            LDR              R0, =SystemInit
+  148 00000000 4806            LDR              R0, =SystemInit
   149 00000002 4780            BLX              R0
-  150 00000004 4809            LDR              R0, =__main
+  150 00000004 4806            LDR              R0, =__main
   151 00000006 4700            BX               R0
   152 00000008                 ENDP
   153 00000008         
@@ -531,35 +531,24 @@ ARM Macro Assembler    Page 9
   329 0000001C         ;*******************************************************
                        ************************
   330 0000001C                 IF               :DEF:__MICROLIB
-  337 0000001C         
-  338 0000001C                 IMPORT           __use_two_region_memory
-  339 0000001C                 EXPORT           __user_initial_stackheap
-  340 0000001C         
-  341 0000001C         __user_initial_stackheap
-  342 0000001C         
-  343 0000001C 4804            LDR              R0, =  Heap_Mem
-  344 0000001E 4905            LDR              R1, =(Stack_Mem + Stack_Size)
-  345 00000020 4A05            LDR              R2, = (Heap_Mem +  Heap_Size)
-  346 00000022 4B06            LDR              R3, = Stack_Mem
-  347 00000024 4770            BX               LR
-  348 00000026         
-  349 00000026 00 00           ALIGN
-  350 00000028         
-  351 00000028                 ENDIF
-  352 00000028         
-  353 00000028                 END
+  331 0000001C         
+  332 0000001C                 EXPORT           __initial_sp
+  333 0000001C                 EXPORT           __heap_base
+  334 0000001C                 EXPORT           __heap_limit
+  335 0000001C         
+  336 0000001C                 ELSE
+  351                          ENDIF
+  352 0000001C         
+  353 0000001C                 END
               00000000 
               00000000 
-              00000000 
-              00000400 
-              00000F00 
-              00000000 
 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
 ork --depend=mini7_v2\startup_stm32f103xe.d -omini7_v2\startup_stm32f103xe.o -I
 .\RTE\_mini7_V2 -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Core\Include -IC:\K
-eil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include --predefine="__UVISION_
-VERSION SETA 526" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_HD SETA 1" 
---list=startup_stm32f103xe.lst startup_stm32f103xe.s
+eil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include --predefine="__MICROLIB
+ SETA 1" --predefine="__UVISION_VERSION SETA 526" --predefine="_RTE_ SETA 1" --
+predefine="STM32F10X_HD SETA 1" --list=startup_stm32f103xe.lst startup_stm32f10
+3xe.s
 
 
 
@@ -580,9 +569,8 @@ Symbol: Stack_Mem
    Definitions
       At line 35 in file startup_stm32f103xe.s
    Uses
-      At line 344 in file startup_stm32f103xe.s
-      At line 346 in file startup_stm32f103xe.s
-
+      None
+Comment: Stack_Mem unused
 __initial_sp 00000400
 
 Symbol: __initial_sp
@@ -590,7 +578,8 @@ Symbol: __initial_sp
       At line 36 in file startup_stm32f103xe.s
    Uses
       At line 59 in file startup_stm32f103xe.s
-Comment: __initial_sp used once
+      At line 332 in file startup_stm32f103xe.s
+
 3 symbols
 
 
@@ -612,25 +601,24 @@ Symbol: Heap_Mem
    Definitions
       At line 46 in file startup_stm32f103xe.s
    Uses
-      At line 343 in file startup_stm32f103xe.s
-      At line 345 in file startup_stm32f103xe.s
-
+      None
+Comment: Heap_Mem unused
 __heap_base 00000000
 
 Symbol: __heap_base
    Definitions
       At line 45 in file startup_stm32f103xe.s
    Uses
-      None
-Comment: __heap_base unused
+      At line 333 in file startup_stm32f103xe.s
+Comment: __heap_base used once
 __heap_limit 00000F00
 
 Symbol: __heap_limit
    Definitions
       At line 47 in file startup_stm32f103xe.s
    Uses
-      None
-Comment: __heap_limit unused
+      At line 334 in file startup_stm32f103xe.s
+Comment: __heap_limit used once
 4 symbols
 
 
@@ -1377,21 +1365,7 @@ Symbol: WWDG_IRQHandler
       At line 77 in file startup_stm32f103xe.s
       At line 200 in file startup_stm32f103xe.s
 
-__user_initial_stackheap 0000001C
-
-Symbol: __user_initial_stackheap
-
-
-
-ARM Macro Assembler    Page 12 Alphabetic symbol ordering
-Relocatable symbols
-
-   Definitions
-      At line 341 in file startup_stm32f103xe.s
-   Uses
-      At line 339 in file startup_stm32f103xe.s
-Comment: __user_initial_stackheap used once
-73 symbols
+72 symbols
 
 
 
@@ -1405,8 +1379,7 @@ Symbol: Heap_Size
       At line 42 in file startup_stm32f103xe.s
    Uses
       At line 46 in file startup_stm32f103xe.s
-      At line 345 in file startup_stm32f103xe.s
-
+Comment: Heap_Size used once
 Stack_Size 00000400
 
 Symbol: Stack_Size
@@ -1414,8 +1387,7 @@ Symbol: Stack_Size
       At line 32 in file startup_stm32f103xe.s
    Uses
       At line 35 in file startup_stm32f103xe.s
-      At line 344 in file startup_stm32f103xe.s
-
+Comment: Stack_Size used once
 __Vectors_Size 00000130
 
 Symbol: __Vectors_Size
@@ -1447,13 +1419,5 @@ Symbol: __main
    Uses
       At line 150 in file startup_stm32f103xe.s
 Comment: __main used once
-__use_two_region_memory 00000000
-
-Symbol: __use_two_region_memory
-   Definitions
-      At line 338 in file startup_stm32f103xe.s
-   Uses
-      None
-Comment: __use_two_region_memory unused
-3 symbols
-426 symbols in table
+2 symbols
+423 symbols in table

+ 25 - 46
mini7_V2.ioc

@@ -13,31 +13,29 @@ ADC1.master=1
 CAD.formats=
 CAD.pinconfig=
 CAD.provider=
-Dma.ADC1.4.Direction=DMA_PERIPH_TO_MEMORY
-Dma.ADC1.4.Instance=DMA1_Channel1
-Dma.ADC1.4.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
-Dma.ADC1.4.MemInc=DMA_MINC_ENABLE
-Dma.ADC1.4.Mode=DMA_CIRCULAR
-Dma.ADC1.4.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
-Dma.ADC1.4.PeriphInc=DMA_PINC_DISABLE
-Dma.ADC1.4.Priority=DMA_PRIORITY_LOW
-Dma.ADC1.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
+Dma.ADC1.2.Direction=DMA_PERIPH_TO_MEMORY
+Dma.ADC1.2.Instance=DMA1_Channel1
+Dma.ADC1.2.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
+Dma.ADC1.2.MemInc=DMA_MINC_ENABLE
+Dma.ADC1.2.Mode=DMA_CIRCULAR
+Dma.ADC1.2.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
+Dma.ADC1.2.PeriphInc=DMA_PINC_DISABLE
+Dma.ADC1.2.Priority=DMA_PRIORITY_LOW
+Dma.ADC1.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 Dma.Request0=USART1_RX
 Dma.Request1=USART1_TX
-Dma.Request2=USART2_RX
-Dma.Request3=USART2_TX
-Dma.Request4=ADC1
-Dma.Request5=UART4_RX
-Dma.RequestsNb=6
-Dma.UART4_RX.5.Direction=DMA_PERIPH_TO_MEMORY
-Dma.UART4_RX.5.Instance=DMA2_Channel3
-Dma.UART4_RX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE
-Dma.UART4_RX.5.MemInc=DMA_MINC_ENABLE
-Dma.UART4_RX.5.Mode=DMA_NORMAL
-Dma.UART4_RX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
-Dma.UART4_RX.5.PeriphInc=DMA_PINC_DISABLE
-Dma.UART4_RX.5.Priority=DMA_PRIORITY_LOW
-Dma.UART4_RX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
+Dma.Request2=ADC1
+Dma.Request3=UART4_RX
+Dma.RequestsNb=4
+Dma.UART4_RX.3.Direction=DMA_PERIPH_TO_MEMORY
+Dma.UART4_RX.3.Instance=DMA2_Channel3
+Dma.UART4_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.UART4_RX.3.MemInc=DMA_MINC_ENABLE
+Dma.UART4_RX.3.Mode=DMA_NORMAL
+Dma.UART4_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.UART4_RX.3.PeriphInc=DMA_PINC_DISABLE
+Dma.UART4_RX.3.Priority=DMA_PRIORITY_LOW
+Dma.UART4_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
 Dma.USART1_RX.0.Instance=DMA1_Channel5
 Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
@@ -56,24 +54,6 @@ Dma.USART1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
 Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISABLE
 Dma.USART1_TX.1.Priority=DMA_PRIORITY_LOW
 Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
-Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY
-Dma.USART2_RX.2.Instance=DMA1_Channel6
-Dma.USART2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
-Dma.USART2_RX.2.MemInc=DMA_MINC_ENABLE
-Dma.USART2_RX.2.Mode=DMA_NORMAL
-Dma.USART2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
-Dma.USART2_RX.2.PeriphInc=DMA_PINC_DISABLE
-Dma.USART2_RX.2.Priority=DMA_PRIORITY_LOW
-Dma.USART2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
-Dma.USART2_TX.3.Direction=DMA_MEMORY_TO_PERIPH
-Dma.USART2_TX.3.Instance=DMA1_Channel7
-Dma.USART2_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE
-Dma.USART2_TX.3.MemInc=DMA_MINC_ENABLE
-Dma.USART2_TX.3.Mode=DMA_NORMAL
-Dma.USART2_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
-Dma.USART2_TX.3.PeriphInc=DMA_PINC_DISABLE
-Dma.USART2_TX.3.Priority=DMA_PRIORITY_LOW
-Dma.USART2_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 File.Version=6
 GPIO.groupedBy=Group By Peripherals
 KeepUserPlacement=false
@@ -150,8 +130,6 @@ NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DMA1_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
-NVIC.DMA1_Channel6_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
-NVIC.DMA1_Channel7_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DMA2_Channel3_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.EXTI9_5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
@@ -233,7 +211,7 @@ PB14.GPIO_Label=MINI7_V2_SYS_R
 PB14.Locked=true
 PB14.Signal=GPIO_Output
 PB15.Locked=true
-PB15.Mode=Output Compare3 CH3N
+PB15.Mode=PWM Generation3 CH3N
 PB15.Signal=TIM1_CH3N
 PB2.GPIOParameters=GPIO_Label
 PB2.GPIO_Label=MINI7_V2_LED_S2
@@ -380,9 +358,10 @@ SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2
 SH.S_TIM3_CH2.ConfNb=1
 SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3
 SH.S_TIM3_CH3.ConfNb=1
-TIM1.Channel-Output\ Compare3\ CH3N=TIM_CHANNEL_3
-TIM1.IPParameters=Channel-Output Compare3 CH3N,Prescaler,OCNPolarity_3
+TIM1.Channel-PWM\ Generation3\ CH3N=TIM_CHANNEL_3
+TIM1.IPParameters=Prescaler,OCNPolarity_3,Channel-PWM Generation3 CH3N,Period
 TIM1.OCNPolarity_3=TIM_OCNPOLARITY_LOW
+TIM1.Period=1000
 TIM1.Prescaler=63
 TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
 TIM2.ClockDivision=TIM_CLOCKDIVISION_DIV4

+ 2 - 4
tshell/van_bsp_debug_shell.c

@@ -47,9 +47,7 @@ typedef struct
 #define DEBUG_CANFLAG (unsigned int)0x3a6e6163 // can:
 
 
-
-
-unsigned int  gloublePrintLevel = VAN_LOG_NOTICE; //
+unsigned int  gloublePrintLevel = VAN_LOG_ERROR|VAN_LOG_INFO|VAN_LOG_TEMP|VAN_LOG_WIFI; //
 unsigned int  gloublePrintSwitch = 0; //
 unsigned char debugcmdbuf[132]	 = {0};
 unsigned int  debugcmdbuflast	 = 0;
@@ -1076,7 +1074,7 @@ void Van_Device_Printf(unsigned int printLevel, const char *cmd, ...)
 	char buf[DISBUF_LEN] = {0};
 	int	 buflen			 = 0;
 	  __disable_irq(); 
-	if (gloublePrintLevel >= printLevel)
+	if ((gloublePrintLevel & printLevel) || (printLevel==VAN_LOG_ALLPRINT))
 	{
 		va_list args; //定义一个va_list类型的变量,用来储存单个参数
 		va_start(args, cmd);	  //使args指向可变参数的第一个参数

+ 9 - 6
tshell/van_bsp_debug_shell.h

@@ -15,12 +15,15 @@
 #define VAN_BSP_DEBUG_SHELL_H
 typedef enum {
 
-	VAN_LOG_CRITICAL = 0,
-	VAN_LOG_ERROR = 1,
-	VAN_LOG_WARN = 2,
-	VAN_LOG_INFO = 3,
-	VAN_LOG_NOTICE = 4,
-	VAN_LOG_DEBUG = 5,
+	VAN_LOG_ALLPRINT = 0,
+	VAN_LOG_ERROR = 0x01,
+	VAN_LOG_WARN = 0x02,
+	VAN_LOG_INFO = 0x04,
+	VAN_LOG_NOTICE = 0x08,
+	VAN_LOG_WIFI = 0x10,
+	VAN_LOG_TEMP = 0x20,
+	VAN_LOG_COMM = 0x40,
+	VAN_LOG_DEBUG = 0x80,
 }VAN_LOG_LEVEL_DEF;
 
 

+ 7 - 0
tshell/van_bsp_debug_uart.c

@@ -90,6 +90,13 @@ void Van_Debug_UART_Rec_IDLE(UART_HandleTypeDef *huart)
 		debug_rec_type1.rx_len		= RECEIVELEN - temp;
 		debug_rec_type1.receive_flag = 1;
 		addinputtocmdbuf(debug_rec_type1.usartDMA_rxBuf, debug_rec_type1.rx_len);
+
+		for(unsigned int i=0;i<debug_rec_type1.rx_len;i++){
+			if (cmd_rx_last == CMD_BUF_SIZE)cmd_rx_last = 0;
+			g_cmd_rx_buf[cmd_rx_last] = debug_rec_type1.usartDMA_rxBuf[i];
+			cmd_rx_last++;
+		}		
+		HAL_UART_DMAStop(huart); 
 		HAL_UART_Receive_DMA(huart, debug_rec_type1.usartDMA_rxBuf, RECEIVELEN);
 //		if (debug_rec_type1.dmaSend_flag == USART_DMA_SENDING)
 //		{

+ 107 - 47
tshell/van_com_algorithm.c

@@ -13,6 +13,7 @@
 
 #include "van_com_algorithm.h"
 #include <stdio.h>
+#define g_uMsgCmdFrameLen (6)
 
 /****************************************************************
 * 函数名:    checkSum
@@ -300,57 +301,116 @@ int DecodeNew(CmdMessage *pMessage, unsigned char *pdata,
   return 0;
 }
 
+
+float PIDRealize(pid_def *pid)
+{
+	pid->err=pid->goal-pid->realtemp;
+	pid->variate=pid->Kp*pid->err+pid->Ki*pid->integral+pid->Kd*(pid->err-pid->err_last);
+	pid->err_last=pid->err;
+	if(pid->variate>100)
+	{
+		pid->variate=100;
+	}else{			
+		pid->integral+=pid->err;
+	}
+	if(pid->variate<0)
+	{
+		pid->variate=0;
+	}
+    return pid->variate;
+}
+
+
+
+int hex_to_ascii(const void *hex, void *string, int len)
+{
+    int str_len = 0;
+    const unsigned char *phex = (const unsigned char*)hex;
+    unsigned char *pstr = (unsigned char*)string;
+    unsigned char temp;
+
+    if(NULL == hex ||  NULL == string || len < 0)
+	{
+		return -1;
+	}
+
+    for(int i = 0; i < len; i++)
+    {
+        temp = ((phex[i] >> 4) & 0x0F);
+        if(temp > 9)
+            pstr[str_len++] = temp + '7';
+        else
+            pstr[str_len++] = temp + '0';
+
+        temp = (phex[i]) & 0x0F ;
+        if(temp > 9)
+            pstr[str_len++] = temp + '7';
+        else
+            pstr[str_len++] = temp + '0';
+    }
+
+    if(len > 0)
+        pstr[str_len] = 0;
+    
+    return 0;
+}
+
+static int checkCmd(const unsigned char *pInBuffer, int uLen)
+{
+    int ret = -1;
+    for (int i = 0; i < uLen; i++)
+    {
+        unsigned char temp = pInBuffer[i];
+        if (temp == 0xaa)
+        {
+            unsigned char temp1 = pInBuffer[i + 1];
+            if (temp1 == 0x55)
+            {
+                ret = i;
+                break;
+            }
+        }
+    }
+    return ret;
+}
+
 /********************************************************************
- *						 int Decode(const char
- *pInBuffer, int uLen)
+ *                         int Decode(const char *pInBuffer, int uLen)
  *
  *描述:对串口数据进行解码成结构体
- *参数:pInBuffer	  接收缓冲区
-                *uheader 当前头位置
-                ulast 当前头尾位置
-                maxlen 缓冲区长度
-                pMessage	命令结构体
-                pdata 命令数据
- *返回:1解码成功,0解码失败
+ *参数:无
+ *返回:无
  *其他:无
  *--------------------------------------------------------------------
  *记录:
  ********************************************************************/
-// int DecodeModbud_RTU(unsigned char *pdata,const unsigned char *pInBuffer, unsigned int *pheader,
-//                      unsigned int ulast, unsigned int maxlen) {
-//   unsigned int bufRealLen;
-//   unsigned int sizeofMessage = sizeof(RTUMessage);
-//   unsigned int header = *pheader;
-//   unsigned int i = 0;
-//   if (NULL == pInBuffer || NULL == pdata ||
-//       NULL == pheader) {
-//     /*空指针判断*/
-//     return 0;
-//   }
-//   /*缓冲区有效数据长度,缓冲区循环处理,会出现头大于未情况*/
-//   bufRealLen = (ulast > header) ? (ulast - header) : (ulast + maxlen - header);
-	
-	
-//   if (bufRealLen < sizeofMessage) {
-//     /*长度过段,跳过*/
-//     return 0;
-//   }
-//   bufRealLen -= sizeofMessage; /*最大有效数据长度*/  
-//   for (i = 0; i <= (bufRealLen); i++) {
-//     for (unsigned int j = i; j <= (bufRealLen); j++) {
-//       unsigned int messagelen = j-i + 4;
-//       unsigned int curheader = i + *pheader;
-
-//       if (CRC16_loop_RTU(pInBuffer, messagelen, maxlen, curheader)) {
-  
-//         /*解析成功,拷贝数据结构体*/
-//         for (unsigned copyi = 0; copyi < messagelen; copyi++) {
-//           *pdata++ = pInBuffer[(header + i + copyi) % maxlen];
-//         }
-//         *pheader = (curheader + messagelen + 2) % maxlen;
-//         return messagelen;
-//       }
-//     }
-//   }
-//   return 0;
-// }
+int Decode(CmdMessage *pMessage, const  unsigned char *pInBuffer, int uLen)
+{
+    if (NULL == pInBuffer || uLen < g_uMsgCmdFrameLen)
+    {
+        return -1;
+    }
+
+    int startPos = checkCmd(pInBuffer, uLen);
+    if (startPos == -1)
+    {
+        return -3;
+    }
+
+    char *pTemp = (char *)pInBuffer + startPos;
+    memcpy((void *)pMessage, (const void *)(pTemp), g_uMsgCmdFrameLen);
+
+    int uMsgLen = g_uMsgCmdFrameLen + pMessage->len + 2;
+    if (uLen < uMsgLen)
+    {
+        // 黏包
+        return -2;
+    }
+    // data
+    pTemp += g_uMsgCmdFrameLen;
+    pMessage->data = pTemp;
+
+    // checksum
+
+    return uMsgLen;
+}

+ 14 - 1
tshell/van_com_algorithm.h

@@ -34,10 +34,23 @@
 }
 
 
+typedef struct
+{
+    float realtemp;       
+    float goal;   	     
+    float err;            
+    float err_last;       
+    float Kp,Ki,Kd;       
+    float variate;        
+    float integral; 
+}pid_def;
+
+float PIDRealize(pid_def *pid);
 
 unsigned int checkSum(const unsigned char *pInBuffer, unsigned int  uLen);
 int DecodeNew(CmdMessage* pMessage, unsigned char *pdata, const unsigned char *pInBuffer, unsigned int *pheader,unsigned int  ulast,unsigned int maxlen);
 int DecodeModbud_RTU(unsigned char *pdata,const unsigned char *pInBuffer, unsigned int *pheader, unsigned int ulast, unsigned int maxlen);
-
+int hex_to_ascii(const void *hex, void *string, int len);
+int Decode(CmdMessage *pMessage, const  unsigned char *pInBuffer, int uLen);
 #endif
 

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels