Explorar el Código

修正bootloader备份,回滚问题

yidongFan hace 1 mes
padre
commit
4801b9d5f2

+ 6 - 10
BoardInterface/onechip_devinf_define.h

@@ -104,13 +104,17 @@ typedef struct {
 	uint32_t QRBeepTimeer;
 	
 
+	char SN[8];
+	char wifiname[WIFI_AP_NAME_MAX_LEN];
+	char password[WIFI_AP_PWD_MAX_LEN];
+	char TCP_IP_Addr[16];
+	char TCP_IP_PORT[8];
 	float lysis_offset;
 	float lysis_overHeat;
 	float lysis_overHeatTime;
 	float lysis_Kp;
 	float lysis_Ki;
-	float lysis_Kd;
-	
+	float lysis_Kd;	
 	float amplif_Kp;
 	float amplif_Ki;
 	float amplif_Kd;
@@ -121,9 +125,6 @@ typedef struct {
     float PresetTempTime; //拉升保持时间
     float adJTarget;	  //低温温度
     float SetTempVal;     //目标温度
-
-
-
 	uint32_t log_level;		//日志等级
 	uint32_t skip_CheckOrRun;		//插入光变化检测
 	float adjtemp;		//调整温度
@@ -134,11 +135,6 @@ typedef struct {
     float swingtimePause;
     float runLoopTime;
     float runLoopSpeed;
-	char wifiname[WIFI_AP_NAME_MAX_LEN];
-	char password[WIFI_AP_PWD_MAX_LEN];
-	char TCP_IP_Addr[16];
-	char TCP_IP_PORT[8];
-	char SN[8];
 	uint32_t checksum;		//插入光变化检测
 	
 	

+ 1 - 1
Core/Inc/stm32f1xx_hal_conf.h

@@ -49,7 +49,7 @@
 #define HAL_I2C_MODULE_ENABLED
 /*#define HAL_I2S_MODULE_ENABLED   */
 /*#define HAL_IRDA_MODULE_ENABLED   */
-/*#define HAL_IWDG_MODULE_ENABLED   */
+#define HAL_IWDG_MODULE_ENABLED
 /*#define HAL_NOR_MODULE_ENABLED   */
 /*#define HAL_NAND_MODULE_ENABLED   */
 /*#define HAL_PCCARD_MODULE_ENABLED   */

+ 44 - 27
Core/Src/main.c

@@ -22,6 +22,7 @@
 #include "adc.h"
 #include "dma.h"
 #include "i2c.h"
+#include "iwdg.h"
 #include "tim.h"
 #include "usart.h"
 #include "gpio.h"
@@ -142,20 +143,18 @@ int main(void)
   MX_TIM2_Init();
   MX_TIM3_Init();
   MX_TIM4_Init();
+  MX_IWDG_Init();
   /* USER CODE BEGIN 2 */
 	/* 启动定时器2的中断模式 */
 	
   dev_load_allinf();
 	
-  light_set(MODE_BLINK, 250, COLOR_YELLOW, 0);
-  light_set(MODE_BLINK, 250, COLOR_YELLOW, 1);
-  light_refresh(COLOR_YELLOW, COLOR_YELLOW);
 	con_sysinf_debugUart((void *)&huart1);
   Van_Debug_UART_Init((UART_HandleTypeDef *)sysinf.debugUart);
 
 	sysinf.ESPUart = &huart2;
 	esp_receive_Rec_Start(sysinf.ESPUart);
-	
+	sysinf.resetByIwdg = CheckIsIwdgReset();
   /* USER CODE END 2 */
 
   /* Infinite loop */
@@ -170,11 +169,14 @@ int main(void)
 
 	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_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");
+    light_set(MODE_BLINK, 250, COLOR_YELLOW, 0);
+    light_set(MODE_BLINK, 250, COLOR_YELLOW, 1);
+    light_refresh(COLOR_YELLOW, COLOR_YELLOW);
+    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();
 
@@ -207,32 +209,46 @@ int main(void)
       waittime++;
 				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14); /*green*/ 
 				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_13); /*green*/ 
-      if(in_update_process()==0){        
-         send_baseinf_pc(0,0);
-      }
+      // if(in_update_process()==0){        
+        //  send_baseinf_pc(0,0);
+      // }
 	    Van_Device_Printf(VAN_LOG_ALLPRINT, "wait time %d\n\r",waittime);   
       if((in_update_process() == 0) && ((waittime > 5)) ){
-            
-            Van_Device_Printf(VAN_LOG_ALLPRINT, "go to app at:%x\n\r",FLASH_APP1_ADDR);  
-            HAL_Delay(1000);  
-            if (HAL_TIM_Base_Stop(&htim2) != HAL_OK) {
-                  /* 启动失败,可在此处添加错误处理 */
-                  Error_Handler();
-              }
-            	// // 7. 关闭SysTick(避免其产生中断)
-            SysTick->CTRL = 0;
-            SysTick->LOAD = 0;
-            SysTick->VAL  = 0;
-            for(unsigned i=0;i<10000;i++){
-              i++;i--;
+            unsigned int gotoApp = update_process_end();
+            if(gotoApp == 0){
+              /*非升级情况下,检查版本,回退版本*/
+              gotoApp = check_main_App();
+            }
+            if(gotoApp){
+                /*升级完成或者存在合法APP*/
+                volatile uint32_t jump2app =  * (volatile uint32_t *)(FLASH_APP1_ADDR + 4);
+                Van_Device_Printf(VAN_LOG_ALLPRINT, "go to app at:%x jump:addr:0x%x\n\r",FLASH_APP1_ADDR,jump2app);  
+                HAL_Delay(1000);  
+                if (HAL_TIM_Base_Stop(&htim2) != HAL_OK) {
+                      /* 启动失败,可在此处添加错误处理 */
+                      Error_Handler();
+                  }
+                  // // 7. 关闭SysTick(避免其产生中断)
+                SysTick->CTRL = 0;
+                SysTick->LOAD = 0;
+                SysTick->VAL  = 0;
+                for(unsigned i=0;i<10000;i++){
+                  i++;i--;
+                }
+								Refresh_IWDG();
+                iap_load_app(FLASH_APP1_ADDR);
+            }else{
+                
+                Van_Device_Printf(VAN_LOG_ALLPRINT, "no APP in flash,pleas check %x %x \n\r",*(uint32_t *)(FLASH_APP1_ADDR + FLASH_APP_VERSION_OFFSET),*(uint32_t *)(FLASH_APP2_ADDR + FLASH_APP_VERSION_OFFSET));  
+
             }
-            iap_load_app(FLASH_APP1_ADDR);
       }
 		}
 
 
 		if(	sysinf.upheart_flag == 1){
 			sysinf.upheart_flag = 0;
+      Refresh_IWDG();
       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();
       }	       
@@ -260,10 +276,11 @@ void SystemClock_Config(void)
   /** Initializes the RCC Oscillators according to the specified parameters
   * in the RCC_OscInitTypeDef structure.
   */
-  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL2;

+ 38 - 9
DriverInterface/communication.c

@@ -360,16 +360,26 @@ int set_IP_action(uint8_t cmd, uint8_t *parg)
 
 
 /********************************************************************
- * int handshake_response(struct CmdMessage *pMsg, unsigned char result)
+ * int updateStart_action(struct CmdMessage *pMsg, unsigned char result)
  *
- *描述:握手回应
+ *描述:备份APP1到APP2区域
  *参数:无
- *返回:
+ *返回:备份成功失败
  *其他:无
  *--------------------------------------------------------------------
  *记录:
  ********************************************************************/
 
+
+int updateStart_action(uint8_t cmd, uint8_t *parg)
+{	
+	static int restult = 0;
+	if(restult==0){		
+		restult = app_image_copy(FLASH_APP1_ADDR,FLASH_APP2_ADDR,FLASH_PAGE_SIZE,FLASH_APP2_SIZE);
+	}
+	return restult;
+}
+
 int updateInfo_action(uint8_t cmd, uint8_t *parg)
 {
 	updateHeader *upHead = (updateHeader *)parg;
@@ -385,18 +395,24 @@ int updateInfo_action(uint8_t cmd, uint8_t *parg)
 	updateInf.writeAddr = FLASH_APP1_ADDR;
 	updateInf.lenInPage = 0;
 	updateInf.updateState = FLASH_UPDATE_ST_REC;
-	updateInf.nextpackageOrder = 0;
+	updateInf.nextpackageOrder = 0;	
+	light_set(MODE_BREATH, 1000, COLOR_YELLOW, 0);
+	light_set(MODE_BREATH, 1000, COLOR_YELLOW, 1); 
 	return 1;
 }
 int updateDate_action(uint8_t cmd, uint8_t *parg)
 {
+    Refresh_IWDG();
 	updateData *upHead = (updateData *)parg;
 	unsigned int posInPage;
 	if(upHead->packageOrder !=updateInf.nextpackageOrder){
 		/*序号不对,返回错误*/
 		return 0;
 	}
-
+    if(updateInf.updateState != FLASH_UPDATE_ST_REC){
+			/*状态不对,返回错误*/
+		return 0;
+	}
 	posInPage = upHead->packageOrder%(updateInf.packageInPage);
 	memcpy(&updateInf.data[posInPage*updateInf.packageSize], (uint8_t*)upHead->data, upHead->packageSize);
 	updateInf.nextpackageOrder++;
@@ -410,8 +426,10 @@ int updateDate_action(uint8_t cmd, uint8_t *parg)
 	
 	if(updateInf.nextpackageOrder==updateInf.allpackage){
 		/*稍后添加check sum */
+		Flash_ErasePage(FLASH_APP1_ADDR + FLASH_APP_VERSION_PAGE);		
 		updateInf.updateState = FLASH_UPDATE_ST_PROG;
 	}
+	updateInf.updateWaitTime = 0;
 	return 1;
 }
 
@@ -439,11 +457,22 @@ int updateDate_response(CmdMessage *pMsg, unsigned char result)
 
 int in_update_process(void)
 {
-	if(updateInf.updateState == FLASH_UPDATE_ST_REC) return 1;	
-    return 0;
+	updateInf.updateWaitTime++;
+	if(updateInf.updateState == FLASH_UPDATE_ST_REC) {
+		if(updateInf.updateWaitTime > 10){
+			if(updateInf.nextpackageOrder > updateInf.packageInPage){
+				/*接收数据超过1页,已经缓存,擦除标记,进行回退*/
+				Flash_ErasePage(FLASH_APP1_ADDR + FLASH_APP_VERSION_PAGE);		
+			}
+			updateInf.updateState = FLASH_UPDATE_ST_NUILL;
+    		return 0;
+		}
+		return 1;
+	}	
+	return 0;
 }
 
-int no_update_process(void)
+int update_process_end(void)
 {	
     if(updateInf.updateState == FLASH_UPDATE_ST_PROG) return 1;	
     return 0;
@@ -472,7 +501,7 @@ const struct PCActionPack mPCActionPack[] =
         },
         {
             .cmd = PC_CMD_STARTUPDATE,
-            .action = handshake_action, 
+            .action = updateStart_action, 
             .response = updatestart_respone,
             .datalen = 0xff,
         },

+ 2 - 1
DriverInterface/communication.h

@@ -157,6 +157,7 @@ typedef struct _updateProcessInf
 	unsigned int lenInPage;
 	unsigned int packageInPage;
 	unsigned int nextpackageOrder;
+	unsigned int updateWaitTime;
 	unsigned char data[WRITE_FLASH_PAGE_SIZE];
 }updateProcessInf;
 void deal_mUnion_cmd(CmdMessage *pMsg);
@@ -165,5 +166,5 @@ unsigned int check_to_pc_busy(void);
 int data_send_to_pc(pc_cmd_type cmd, char *data, unsigned short len);
 void update_work(void) ;
 int  send_baseinf_pc(unsigned char cmd, unsigned char *parg);
-int no_update_process(void);
+int update_process_end(void);
 #endif

+ 82 - 19
DriverInterface/onchip_flash.c

@@ -233,12 +233,12 @@ void cfg_load_default_param(void)
 uint8_t cfg_param_verify(void)
 {
 	
-    unsigned char pramlen = sizeof(oneChipSysdef) - offsetof(oneChipSysdef, lysis_offset);
+    unsigned char pramlen = sizeof(oneChipSysdef) - offsetof(oneChipSysdef, SN);
     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((saveCrc == calCrc) && (saveCrc != 0xffffffff))	{
-		Flash_ReadBuffer(CFG_PARAM_START_ADDR,(uint8_t *)&sysinf.lysis_offset, pramlen);
+		Flash_ReadBuffer(CFG_PARAM_START_ADDR,(uint8_t *)&sysinf.SN, pramlen);
 	}
 }
 
@@ -254,10 +254,10 @@ uint8_t cfg_param_verify(void)
 ********************************************************************/
 uint8_t cfg_save_cfg_param(void)
 {
-    unsigned char pramlen = sizeof(oneChipSysdef) - offsetof(oneChipSysdef, lysis_offset);
+    unsigned char pramlen = sizeof(oneChipSysdef) - offsetof(oneChipSysdef, SN);
 
-	sysinf.checksum = (uint32_t)checksum_calc((uint8_t *)&sysinf.lysis_offset, (pramlen-4));
-    Flash_WriteBuffer(CFG_PARAM_START_ADDR, (uint8_t *)&sysinf.lysis_offset, pramlen);
+	sysinf.checksum = (uint32_t)checksum_calc((uint8_t *)&sysinf.SN, (pramlen-4));
+    Flash_WriteBuffer(CFG_PARAM_START_ADDR, (uint8_t *)&sysinf.SN, pramlen);
 	return cfg_param_verify();
 }
 
@@ -274,23 +274,19 @@ uint8_t cfg_save_cfg_param(void)
 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((saveCrc == calCrc) && (saveCrc != 0xffffffff))
+	uint32_t findSN = 1;
+	Flash_ReadBuffer(CFG_PARAM_START_ADDR,(uint8_t *)&sysinf.SN,  sizeof(sysinf.SN));
+	
+	for(unsigned i=0;i<sizeof(sysinf.SN);i++)
 	{
-		Flash_ReadBuffer(CFG_PARAM_START_ADDR,(uint8_t *)&sysinf.lysis_offset,  pramlen);
-		return 0;
+		if((sysinf.SN[i]<'0' || sysinf.SN[i]>'9')){
+			findSN = 0;
+			break;
+		}
 	}
-	else
-	{
-		cfg_load_default_param();
-		rlt = cfg_save_cfg_param();
-		Van_Device_Printf(VAN_LOG_ERROR, "load parm err,please checking....\r\n");
+	if(findSN == 0){
+		strcpy(sysinf.SN, default_SN);
 	}
-
 	return rlt;
 }
 
@@ -385,4 +381,71 @@ void iap_write_apppage(uint32_t start_addr, uint8_t *pBuffer, uint32_t appsize)
     }
 
 
+}
+
+
+int app_image_copy(uint32_t src,uint32_t dst,uint32_t page_size,uint32_t len)
+{
+	uint32_t src_addr = src;
+	uint32_t dst_addr = dst; 
+    uint32_t errorTime = 0;
+    uint32_t remain_size = len;
+	uint8_t *pBuffer;
+	Van_Device_Printf(VAN_LOG_ALLPRINT, "cope app from:%x to:%x size:%x\n\r",src_addr,dst_addr,remain_size);  
+ 	while (remain_size > 0) {
+        
+      	Refresh_IWDG();
+        iap_write_apppage(dst_addr,  (uint8_t *)src_addr, page_size);
+		Van_Device_Printf(VAN_LOG_ALLPRINT, "cope app from:%x to:%x size:%x\n\r",src_addr,dst_addr,remain_size); 
+        /* 验证写入是否正确(可选) */
+        for (uint32_t i = 0; i < page_size; i=i+4) {
+            if (*(uint32_t *)(dst_addr + i) != *(uint32_t *)(src_addr + i)) {
+				errorTime++;
+				if(errorTime > FLASH_APP_COPY_EERTIME) {
+					/*多长拷贝失败,返回失败*/
+					return 0;
+	 				Van_Device_Printf(VAN_LOG_ALLPRINT, "cope error at%x\n\r");  
+				}
+                continue;
+            }
+        }
+		src_addr += page_size;
+		dst_addr += page_size;
+        errorTime = 0;
+        remain_size -= page_size;
+    }
+	 Van_Device_Printf(VAN_LOG_ALLPRINT, "cope end..\n\r");  
+	return 1;
+}
+
+
+
+uint32_t check_main_App(void){
+	if(*(uint32_t *)(FLASH_APP1_ADDR + FLASH_APP_VERSION_OFFSET) == 0xffffffff){
+		if(*(uint32_t *)(FLASH_APP2_ADDR + FLASH_APP_VERSION_OFFSET) != 0xffffffff){
+			Van_Device_Printf(VAN_LOG_ALLPRINT, "run flag error  cope back..\n\r");  
+			app_image_copy(FLASH_APP2_ADDR,FLASH_APP1_ADDR,FLASH_PAGE_SIZE,FLASH_APP2_SIZE);
+		}
+	}
+	uint32_t mps;
+	uint32_t app;
+	mps = (*(volatile  uint32_t *)FLASH_APP1_ADDR);
+	app = *(volatile  uint32_t *)(FLASH_APP1_ADDR + 4);
+	if ((( mps& 0x2FFE0000) != 0x20000000)||
+		((app < 0x08010000) || (app > 0x08030000))) {
+		/*头非法*/
+		if(*(uint32_t *)(FLASH_APP2_ADDR + FLASH_APP_VERSION_OFFSET) != 0xffffffff){
+			 Van_Device_Printf(VAN_LOG_ALLPRINT, "head error  cope back..\n\r");  
+			app_image_copy(FLASH_APP2_ADDR,FLASH_APP1_ADDR,FLASH_PAGE_SIZE,FLASH_APP2_SIZE);
+		}
+	}
+	
+	mps = (*(volatile  uint32_t *)FLASH_APP1_ADDR);
+	app = *(volatile  uint32_t *)(FLASH_APP1_ADDR + 4);
+	if((*(uint32_t *)(FLASH_APP1_ADDR + FLASH_APP_VERSION_OFFSET) == 0xffffffff)||
+		(( mps& 0x2FFE0000) != 0x20000000)||
+		((app < 0x08010000) || (app > 0x08030000))){
+		return 0;
+	}
+	return 1;
 }

+ 9 - 5
DriverInterface/onchip_flash.h

@@ -4,14 +4,18 @@
 
 typedef void (*iapfun)(void);                   /* 定义一个函数类型的参数 */
 
-#define FLASH_APP1_ADDR         0x08010000      /* 第一个应用程序起始地址(存放在内部FLASH)
-                                                 * 保留 0X08000000~0X08010000(64KB) 的空间为 Bootloader 使用
-                                                 */
+#define FLASH_APP_COPY_EERTIME        0x5     
+#define FLASH_APP1_ADDR         0x08010000                                                     
+#define FLASH_APP2_ADDR         0x08030000
+#define FLASH_APP2_SIZE         0x20000
+#define FLASH_APP_VERSION_PAGE         0x1f800   /*存储app版本,标记*/
+#define FLASH_APP_VERSION_OFFSET         0x1ffc0   /*存储app版本,标记*/
+
 
 void iap_load_app(uint32_t appxaddr);   /* 跳转到APP程序执行 */
 void iap_write_apppage(uint32_t start_addr, uint8_t *appbuf, uint32_t appsize);   /* 在指定地址开始,写入bin */
-
-
+int app_image_copy(uint32_t src,uint32_t dst,uint32_t page_size,uint32_t len);
+uint32_t check_main_App(void);
 void cfg_load_default_param(void);
 uint8_t cfg_param_verify(void);
 uint8_t cfg_save_cfg_param(void);

+ 1 - 1
DriverInterface/ws2812.c

@@ -220,7 +220,7 @@ void light_ctrl()
     uint32_t r_g_b = 0; //r/g/b单色分量
 
     //计算颜色
-    light_update();
+    // light_update();
     for(int i = 0; i < 2; i++)
     {
         switch (lihgt_ctrl.light_mode[i])

+ 1 - 0
DriverInterface/ws2812.h

@@ -35,6 +35,7 @@ enum light_color_type
     COLOR_GREEN = 0x008800,     //绿
     COLOR_RED = 0x880000,       //红
     COLOR_YELLOW = 0x888800,    //黄
+    COLOR_WIGHT = 0x888888,    //白色
 };
 
 

+ 1 - 1
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h

@@ -755,7 +755,7 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
 HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
 HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
 HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);
-
+HAL_StatusTypeDef HAL_UART_RX_DMAStop(UART_HandleTypeDef *huart);
 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,
                                            uint32_t Timeout);
 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

+ 30 - 0
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c

@@ -1572,7 +1572,37 @@ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
 
   return HAL_OK;
 }
+/**
+  * @brief Stops the DMA Transfer.
+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains
+  *                the configuration information for the specified UART module.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_UART_RX_DMAStop(UART_HandleTypeDef *huart)
+{
+  uint32_t dmarequest = 0x00U;
+  /* The Lock is not implemented on this API to allow the user application
+     to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback():
+     when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated
+     and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback()
+     */
 
+  /* Stop UART DMA Rx request if ongoing */
+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR);
+  if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest)
+  {
+    ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
+
+    /* Abort the UART DMA Rx channel */
+    if (huart->hdmarx != NULL)
+    {
+      HAL_DMA_Abort(huart->hdmarx);
+    }
+    UART_EndRxTransfer(huart);
+  }
+
+  return HAL_OK;
+}
 /**
   * @brief Receive an amount of data in blocking mode till either the expected number of data is received or an IDLE event occurs.
   * @note   HAL_OK is returned if reception is completed (expected number of data has been received)

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 13 - 7
MDK-ARM/mini7_V2.uvguix.Administrator


+ 116 - 38
MDK-ARM/mini7_V2.uvoptx

@@ -152,25 +152,25 @@
         <Bp>
           <Number>0</Number>
           <Type>0</Type>
-          <LineNumber>274</LineNumber>
+          <LineNumber>430</LineNumber>
           <EnabledFlag>1</EnabledFlag>
-          <Address>134237408</Address>
+          <Address>134240874</Address>
           <ByteObject>0</ByteObject>
           <HtxType>0</HtxType>
           <ManyObjects>0</ManyObjects>
           <SizeOfObject>0</SizeOfObject>
           <BreakByAccess>0</BreakByAccess>
           <BreakIfRCount>1</BreakIfRCount>
-          <Filename>../Core/Src/stm32f1xx_it.c</Filename>
+          <Filename>..\DriverInterface\onchip_flash.c</Filename>
           <ExecCommand></ExecCommand>
-          <Expression>\\mini7_V2\../Core/Src/stm32f1xx_it.c\274</Expression>
+          <Expression>\\mini7_V2\../DriverInterface/onchip_flash.c\430</Expression>
         </Bp>
         <Bp>
           <Number>1</Number>
           <Type>0</Type>
-          <LineNumber>196</LineNumber>
+          <LineNumber>97</LineNumber>
           <EnabledFlag>1</EnabledFlag>
-          <Address>134237290</Address>
+          <Address>134235658</Address>
           <ByteObject>0</ByteObject>
           <HtxType>0</HtxType>
           <ManyObjects>0</ManyObjects>
@@ -179,7 +179,55 @@
           <BreakIfRCount>1</BreakIfRCount>
           <Filename>../Core/Src/stm32f1xx_it.c</Filename>
           <ExecCommand></ExecCommand>
-          <Expression>\\mini7_V2\../Core/Src/stm32f1xx_it.c\196</Expression>
+          <Expression>\\mini7_V2\../Core/Src/stm32f1xx_it.c\97</Expression>
+        </Bp>
+        <Bp>
+          <Number>2</Number>
+          <Type>0</Type>
+          <LineNumber>349</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134242022</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\DriverInterface\onchip_flash.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\mini7_V2\../DriverInterface/onchip_flash.c\349</Expression>
+        </Bp>
+        <Bp>
+          <Number>3</Number>
+          <Type>0</Type>
+          <LineNumber>302</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134242008</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\DriverInterface\onchip_flash.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\mini7_V2\../DriverInterface/onchip_flash.c\302</Expression>
+        </Bp>
+        <Bp>
+          <Number>4</Number>
+          <Type>0</Type>
+          <LineNumber>394</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134240464</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\DriverInterface\onchip_flash.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\mini7_V2\../DriverInterface/onchip_flash.c\394</Expression>
         </Bp>
       </Breakpoint>
       <WatchWindow1>
@@ -216,7 +264,7 @@
         <Ww>
           <count>6</count>
           <WinNumber>1</WinNumber>
-          <ItemText>g_uart2_rx_buf</ItemText>
+          <ItemText>lihgt_ctrl</ItemText>
         </Ww>
         <Ww>
           <count>7</count>
@@ -228,7 +276,7 @@
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>0x8011000</ItemText>
+          <ItemText>0x8030000</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -274,6 +322,12 @@
       <pszMrulep></pszMrulep>
       <pSingCmdsp></pSingCmdsp>
       <pMultCmdsp></pMultCmdsp>
+      <SystemViewers>
+        <Entry>
+          <Name>System Viewer\USART1</Name>
+          <WinId>35905</WinId>
+        </Entry>
+      </SystemViewers>
       <DebugDescription>
         <Enable>1</Enable>
         <EnableFlashSeq>1</EnableFlashSeq>
@@ -418,17 +472,29 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>11</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Core\Src\iwdg.c</PathWithFileName>
+      <FilenameWithoutPath>iwdg.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
     <GroupName>Drivers/STM32F1xx_HAL_Driver</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -440,7 +506,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -452,7 +518,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -464,7 +530,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -476,7 +542,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -488,7 +554,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -500,7 +566,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -512,7 +578,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -524,7 +590,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -536,7 +602,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -548,7 +614,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -560,7 +626,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -572,7 +638,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -584,7 +650,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -596,7 +662,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -608,7 +674,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -620,7 +686,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -630,6 +696,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>29</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_iwdg.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f1xx_hal_iwdg.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -640,7 +718,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -660,7 +738,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -680,7 +758,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -692,7 +770,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -704,7 +782,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -724,7 +802,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -736,7 +814,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -748,7 +826,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -760,7 +838,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -772,7 +850,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -784,7 +862,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 10 - 0
MDK-ARM/mini7_V2.uvprojx

@@ -437,6 +437,11 @@
               <FileType>1</FileType>
               <FilePath>..\Core\Src\adc.c</FilePath>
             </File>
+            <File>
+              <FileName>iwdg.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Core\Src\iwdg.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
@@ -527,6 +532,11 @@
               <FileType>1</FileType>
               <FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</FilePath>
             </File>
+            <File>
+              <FileName>stm32f1xx_hal_iwdg.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_iwdg.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

+ 28 - 1
tshell/van_bsp_debug_uart.c

@@ -96,7 +96,7 @@ void Van_Debug_UART_Rec_IDLE(UART_HandleTypeDef *huart)
 			g_cmd_rx_buf[cmd_rx_last] = debug_rec_type1.usartDMA_rxBuf[i];
 			cmd_rx_last++;
 		}		
-		HAL_UART_DMAStop(huart); 
+		HAL_UART_RX_DMAStop(huart); 
 		HAL_UART_Receive_DMA(huart, debug_rec_type1.usartDMA_rxBuf, RECEIVELEN);
 //		if (debug_rec_type1.dmaSend_flag == USART_DMA_SENDING)
 //		{
@@ -109,6 +109,31 @@ void Van_Debug_UART_ErrorCallback(UART_HandleTypeDef *huart)
 {
 	DMA_HandleTypeDef *pdma;
 	pdma = huart->hdmatx;
+	
+	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET))
+	{			
+		__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_ORE);
+	}
+	
+	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET))
+	{			
+		__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
+	}
+	
+	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_NE) != RESET))
+	{			
+		__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_NE);
+	}
+	
+	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET))
+	{			
+		__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_FE);
+	}
+	
+	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_PE) != RESET))
+	{			
+		__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_PE);
+	}
 	__HAL_UART_CLEAR_FLAG(huart,UART_FLAG_RXNE);
 	if (pdma->ErrorCode)
 	{
@@ -164,6 +189,8 @@ void Van_Debug_UART_Init(UART_HandleTypeDef * puart)
 	HAL_UART_Receive_DMA(debugUart, debug_rec_type1.usartDMA_rxBuf,
 								 RECEIVELEN);
 	__HAL_UART_ENABLE_IT(debugUart, UART_IT_IDLE);
+	__HAL_UART_ENABLE_IT(debugUart, UART_IT_ERR);
+	__HAL_UART_ENABLE_IT(debugUart, UART_IT_PE);
 }
 
 void Van_Debug_UART1_test(void)

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio