diff --git a/leakage_system/.mxproject b/leakage_system/.mxproject
index 5566f46..e7b98ef 100644
--- a/leakage_system/.mxproject
+++ b/leakage_system/.mxproject
@@ -1,32 +1,34 @@
[PreviousLibFiles]
-LibFiles=Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f407xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
+LibFiles=Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f407xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
[PreviousUsedKeilFiles]
-SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\dma.c;..\Core\Src\spi.c;..\Core\Src\usart.c;..\Core\Src\stm32f4xx_it.c;..\Core\Src\stm32f4xx_hal_msp.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Core\Src\system_stm32f4xx.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Core\Src\system_stm32f4xx.c;;;
+SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\dma.c;..\Core\Src\iwdg.c;..\Core\Src\spi.c;..\Core\Src\usart.c;..\Core\Src\stm32f4xx_it.c;..\Core\Src\stm32f4xx_hal_msp.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Core\Src\system_stm32f4xx.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_spi.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;..\Core\Src\system_stm32f4xx.c;;;
HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc;
CDefines=USE_HAL_DRIVER;STM32F407xx;USE_HAL_DRIVER;USE_HAL_DRIVER;
[PreviousGenFiles]
AdvancedFolderStructure=true
-HeaderFileListSize=7
+HeaderFileListSize=8
HeaderFiles#0=..\Core\Inc\gpio.h
HeaderFiles#1=..\Core\Inc\dma.h
-HeaderFiles#2=..\Core\Inc\spi.h
-HeaderFiles#3=..\Core\Inc\usart.h
-HeaderFiles#4=..\Core\Inc\stm32f4xx_it.h
-HeaderFiles#5=..\Core\Inc\stm32f4xx_hal_conf.h
-HeaderFiles#6=..\Core\Inc\main.h
+HeaderFiles#2=..\Core\Inc\iwdg.h
+HeaderFiles#3=..\Core\Inc\spi.h
+HeaderFiles#4=..\Core\Inc\usart.h
+HeaderFiles#5=..\Core\Inc\stm32f4xx_it.h
+HeaderFiles#6=..\Core\Inc\stm32f4xx_hal_conf.h
+HeaderFiles#7=..\Core\Inc\main.h
HeaderFolderListSize=1
HeaderPath#0=..\Core\Inc
HeaderFiles=;
-SourceFileListSize=7
+SourceFileListSize=8
SourceFiles#0=..\Core\Src\gpio.c
SourceFiles#1=..\Core\Src\dma.c
-SourceFiles#2=..\Core\Src\spi.c
-SourceFiles#3=..\Core\Src\usart.c
-SourceFiles#4=..\Core\Src\stm32f4xx_it.c
-SourceFiles#5=..\Core\Src\stm32f4xx_hal_msp.c
-SourceFiles#6=..\Core\Src\main.c
+SourceFiles#2=..\Core\Src\iwdg.c
+SourceFiles#3=..\Core\Src\spi.c
+SourceFiles#4=..\Core\Src\usart.c
+SourceFiles#5=..\Core\Src\stm32f4xx_it.c
+SourceFiles#6=..\Core\Src\stm32f4xx_hal_msp.c
+SourceFiles#7=..\Core\Src\main.c
SourceFolderListSize=1
SourcePath#0=..\Core\Src
SourceFiles=;
diff --git a/leakage_system/Core/Inc/stm32f4xx_hal_conf.h b/leakage_system/Core/Inc/stm32f4xx_hal_conf.h
index 21aec74..b304993 100644
--- a/leakage_system/Core/Inc/stm32f4xx_hal_conf.h
+++ b/leakage_system/Core/Inc/stm32f4xx_hal_conf.h
@@ -55,7 +55,7 @@
/* #define HAL_HASH_MODULE_ENABLED */
/* #define HAL_I2C_MODULE_ENABLED */
/* #define HAL_I2S_MODULE_ENABLED */
-/* #define HAL_IWDG_MODULE_ENABLED */
+#define HAL_IWDG_MODULE_ENABLED
/* #define HAL_LTDC_MODULE_ENABLED */
/* #define HAL_RNG_MODULE_ENABLED */
/* #define HAL_RTC_MODULE_ENABLED */
diff --git a/leakage_system/Core/Src/main.c b/leakage_system/Core/Src/main.c
index 37094fb..20d6b41 100644
--- a/leakage_system/Core/Src/main.c
+++ b/leakage_system/Core/Src/main.c
@@ -19,6 +19,7 @@
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
+#include "iwdg.h"
#include "spi.h"
#include "usart.h"
#include "gpio.h"
@@ -73,7 +74,7 @@ int main(void)
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
+ HAL_Init();
/* USER CODE BEGIN Init */
@@ -96,6 +97,7 @@ int main(void)
MX_SPI2_Init();
MX_USART3_UART_Init();
MX_USART6_UART_Init();
+// MX_IWDG_Init();
/* USER CODE BEGIN 2 */
app_init();
//HAL_GPIO_WritePin(JK1_GPIO_Port,JK1_Pin,GPIO_PIN_SET);
@@ -130,8 +132,9 @@ 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.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
diff --git a/leakage_system/MDK-ARM/leakage_system.uvprojx b/leakage_system/MDK-ARM/leakage_system.uvprojx
index 1c6f363..dedb49c 100644
--- a/leakage_system/MDK-ARM/leakage_system.uvprojx
+++ b/leakage_system/MDK-ARM/leakage_system.uvprojx
@@ -407,6 +407,62 @@
1
../Core/Src/dma.c
+
+ iwdg.c
+ 1
+ ../Core/Src/iwdg.c
+
+
+ 2
+ 0
+ 0
+ 0
+ 0
+ 1
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+
+
spi.c
1
@@ -484,9 +540,9 @@
Drivers/STM32F4xx_HAL_Driver
- stm32f4xx_hal_spi.c
+ stm32f4xx_hal_iwdg.c
1
- ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
+ ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c
2
@@ -604,6 +660,62 @@
1
../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c
+
+ stm32f4xx_hal_spi.c
+ 1
+ ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
+
+
+ 2
+ 0
+ 0
+ 0
+ 0
+ 1
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+
+
stm32f4xx_hal_tim.c
1
diff --git a/leakage_system/MDK-ARM/startup_stm32f407xx.s b/leakage_system/MDK-ARM/startup_stm32f407xx.s
index 91c9046..b0722a1 100644
--- a/leakage_system/MDK-ARM/startup_stm32f407xx.s
+++ b/leakage_system/MDK-ARM/startup_stm32f407xx.s
@@ -29,7 +29,7 @@
; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
-Stack_Size EQU 0x800
+Stack_Size EQU 0x400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
@@ -40,7 +40,7 @@ __initial_sp
; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
-Heap_Size EQU 0x400
+Heap_Size EQU 0x200
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
diff --git a/leakage_system/leakage_system.ioc b/leakage_system/leakage_system.ioc
index 9624d6e..32010dd 100644
--- a/leakage_system/leakage_system.ioc
+++ b/leakage_system/leakage_system.ioc
@@ -115,21 +115,25 @@ Dma.USART6_TX.9.Priority=DMA_PRIORITY_LOW
Dma.USART6_TX.9.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
File.Version=6
GPIO.groupedBy=Group By Peripherals
+IWDG.IPParameters=Reload,Prescaler
+IWDG.Prescaler=IWDG_PRESCALER_128
+IWDG.Reload=750
KeepUserPlacement=false
Mcu.CPN=STM32F407VGT6
Mcu.Family=STM32F4
Mcu.IP0=DMA
-Mcu.IP1=NVIC
-Mcu.IP10=USART6
-Mcu.IP2=RCC
-Mcu.IP3=SPI1
-Mcu.IP4=SPI2
-Mcu.IP5=SYS
-Mcu.IP6=UART4
-Mcu.IP7=USART1
-Mcu.IP8=USART2
-Mcu.IP9=USART3
-Mcu.IPNb=11
+Mcu.IP1=IWDG
+Mcu.IP10=USART3
+Mcu.IP11=USART6
+Mcu.IP2=NVIC
+Mcu.IP3=RCC
+Mcu.IP4=SPI1
+Mcu.IP5=SPI2
+Mcu.IP6=SYS
+Mcu.IP7=UART4
+Mcu.IP8=USART1
+Mcu.IP9=USART2
+Mcu.IPNb=12
Mcu.Name=STM32F407V(E-G)Tx
Mcu.Package=LQFP100
Mcu.Pin0=PH0-OSC_IN
@@ -164,14 +168,15 @@ Mcu.Pin34=PB5
Mcu.Pin35=PB6
Mcu.Pin36=PB7
Mcu.Pin37=PB8
-Mcu.Pin38=VP_SYS_VS_Systick
+Mcu.Pin38=VP_IWDG_VS_IWDG
+Mcu.Pin39=VP_SYS_VS_Systick
Mcu.Pin4=PA2
Mcu.Pin5=PA3
Mcu.Pin6=PA5
Mcu.Pin7=PA6
Mcu.Pin8=PA7
Mcu.Pin9=PC4
-Mcu.PinsNb=39
+Mcu.PinsNb=40
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VGTx
@@ -366,7 +371,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_UART4_Init-UART4-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_SPI2_Init-SPI2-false-HAL-true,9-MX_USART3_UART_Init-USART3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_UART4_Init-UART4-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_SPI2_Init-SPI2-false-HAL-true,9-MX_USART3_UART_Init-USART3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_IWDG_Init-IWDG-false-HAL-true
RCC.48MHZClocksFreq_Value=84000000
RCC.AHBFreq_Value=168000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
@@ -423,6 +428,8 @@ USART3.IPParameters=VirtualMode
USART3.VirtualMode=VM_ASYNC
USART6.IPParameters=VirtualMode
USART6.VirtualMode=VM_ASYNC
+VP_IWDG_VS_IWDG.Mode=IWDG_Activate
+VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
board=custom
diff --git a/leakage_system/usr/app/app.c b/leakage_system/usr/app/app.c
index 4fddc85..a970633 100644
--- a/leakage_system/usr/app/app.c
+++ b/leakage_system/usr/app/app.c
@@ -57,6 +57,7 @@ app_timer_class_t app_timer_task[] =
******************************************/
void app_init(void)
{
+// Wdg.Init();
/*flash*/
w25q32.init();
@@ -72,6 +73,8 @@ void app_init(void)
/*网口*/
W5500.Init();
+
+
/*屏幕通讯*/
tjc_hmi.init();
@@ -89,7 +92,6 @@ void app_init(void)
relay.init();
buzzer.init();
led.init();
-
leakage.init();
/*com口绑定*/
app_com.init();
@@ -97,8 +99,7 @@ void app_init(void)
/*分时复用,时间片轮询*/
app_timer.init(APP_TIMER_TASK_NUM,app_timer_task);
-
- //Wdg.Init();
+
}
/******************************************
@@ -112,7 +113,7 @@ void app_task(void)
{
app_timer.task();
task_idle();
- W5500.Task();
+// W5500.Task();
}
/*空闲执行的函数*/
void task_idle(void)
@@ -123,6 +124,7 @@ void task_idle(void)
com_uart4.rx_task(&com_uart4);
com_uart6.rx_task(&com_uart6);
W5500.Task();
+// Wdg.Feed();
}
void task_10ms(void)
@@ -160,6 +162,7 @@ void task_1s(void)
DS1302.Task();
buzzer.task();
relay.task();
+ W5500.Monitor_task();
}
void task_2s(void)
diff --git a/leakage_system/usr/app/app_leakage.c b/leakage_system/usr/app/app_leakage.c
index 71e914d..14113e3 100644
--- a/leakage_system/usr/app/app_leakage.c
+++ b/leakage_system/usr/app/app_leakage.c
@@ -163,7 +163,7 @@ void app_leakage_task(void)
}
/* 检查设备是否屏蔽 */
- if(p_leakage->sub_device_data[sub_device_index].flash_data.shield != UNBLOCKED)
+ if(p_leakage->sub_device_data[sub_device_index].shield != UNBLOCKED)
{
continue;
}
diff --git a/leakage_system/usr/app/app_leakage.h b/leakage_system/usr/app/app_leakage.h
index 1fc04fa..5c7a89b 100644
--- a/leakage_system/usr/app/app_leakage.h
+++ b/leakage_system/usr/app/app_leakage.h
@@ -27,8 +27,7 @@ typedef struct
{
u8 state; /*状态 使能 非使能*/
u8 com; /*端口*/
- u8 baudrate; /*波特率*/
- u8 shield; /*设备屏蔽状态*/
+ u8 baudrate; /*波特率*/
u8 modbus_id; /*modbus id*/
u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /*设备名*/
u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /*区域名*/
@@ -45,6 +44,7 @@ typedef struct
}ch_data[APP_LEAKAGE_SUB_DEVICE_CH_NUM]; /*通道数据*/
u8 heartbeat; /*心跳包,0-59循环*/
u8 test_mode; /*测试模式,0=正常,1-4=测试对应通道*/
+ u8 shield; /*设备屏蔽状态*/
}app_leakage_sub_device_class_t;
@@ -59,6 +59,14 @@ typedef struct
u8 sub_device_index[APP_LEAKAGE_SUB_DEVICE_NUM]; /*设备的索引*/
}app_leakage_region_data_class_t;
+/* 网络配置结构体 */
+typedef struct {
+ u8 ip[4];
+ u8 mask[4];
+ u8 gateway[4];
+ u16 port;
+}network_config_t;
+
/* 历史报警记录结构 */
typedef struct
{
diff --git a/leakage_system/usr/bsp/bsp_W5500.c b/leakage_system/usr/bsp/bsp_W5500.c
index be099e7..0cacac4 100644
--- a/leakage_system/usr/bsp/bsp_W5500.c
+++ b/leakage_system/usr/bsp/bsp_W5500.c
@@ -20,10 +20,13 @@
#define BSP_W5500_PORT_DATA_RECEIVE 0x01 /*端口接收到一个数据包*/
#define BSP_W5500_PORT_DATA_TRANSMITOK 0x02 /*端口发送一个数据包完成*/
+static u8 last_link_status = 0; // 保存上一次链路状态
+
static void bsp_W5500_Interrupt_Process(void);
static void bsp_W5500_Init(void);
static void bsp_W5500_Task(void);
static void Write_SOCK_Data_Buffer(bsp_W5500_Class_t *pW5500_Class, u8 *dat_ptr, u16 size);
+static void network_monitor_task(void);
bsp_W5500_t W5500 =
{
@@ -36,6 +39,7 @@ bsp_W5500_t W5500 =
.Init = bsp_W5500_Init,
.Task = bsp_W5500_Task,
+ .Monitor_task = network_monitor_task,
.Socket_Send = Write_SOCK_Data_Buffer,
.W5500_Class[0] =
@@ -741,7 +745,7 @@ void bsp_W5500_Socket_Set(bsp_W5500_Class_t *pW5500_Class)
static void bsp_W5500_Init()
{
- u8 i;
+ u8 i,ver;
W5500_Hardware_Reset(); /*硬件复位W5500*/
W5500_Init(); /*初始化W5500寄存器函数*/
Detect_Gateway(); /*检查网关服务器*/
@@ -751,7 +755,9 @@ static void bsp_W5500_Init()
bsp_W5500_Socket_Init(&pW5500->W5500_Class[i]);
pW5500->W5500_Class[i].Run_State = 0; /*复位状态*/
//bsp_W5500_Socket_Set(&pW5500->W5500_Class[i]); /*W5500端口初始化配置*/
- }
+ }
+
+
}
static void bsp_W5500_Task(void)
@@ -781,3 +787,25 @@ static void bsp_W5500_Task(void)
}
}
+/**
+ * @brief 获取 W5500 物理链路状态
+ * @return 1: 链路连接, 0: 链路断开
+ */
+static u8 w5500_get_link_status(void)
+{
+ u8 phycfgr = Read_W5500_1Byte(PHYCFGR); // 读取 PHYCFGR 寄存器
+ return (phycfgr & LINK) ? 1 : 0; // 返回 LINK 位
+}
+
+
+static void network_monitor_task(void)
+{
+ u8 current_link = w5500_get_link_status();
+
+ if (last_link_status == 0 && current_link == 1) {
+ /*链路从断开变为连接,执行恢复操作*/
+ W5500.Init();
+ }
+
+ last_link_status = current_link;
+}
diff --git a/leakage_system/usr/bsp/bsp_W5500.h b/leakage_system/usr/bsp/bsp_W5500.h
index 6f0d249..497e1d1 100644
--- a/leakage_system/usr/bsp/bsp_W5500.h
+++ b/leakage_system/usr/bsp/bsp_W5500.h
@@ -261,6 +261,7 @@ typedef struct
void (*Interrupt_Process)(void); /*处理进程*/
void (*Init)(void); /*初始化*/
void (*Task)(void); /*任务*/
+ void (*Monitor_task)(void); /*断线重连*/
void (*Socket_Send)(bsp_W5500_Class_t *, u8 *, u16 ); /*端口发送数据*/
}bsp_W5500_t;
diff --git a/leakage_system/usr/bsp/bsp_Wdg.c b/leakage_system/usr/bsp/bsp_Wdg.c
index 20cdf04..1715205 100644
--- a/leakage_system/usr/bsp/bsp_Wdg.c
+++ b/leakage_system/usr/bsp/bsp_Wdg.c
@@ -1,6 +1,6 @@
#include "bsp_Wdg.h"
-//#include "iwdg.h"
+#include "iwdg.h"
static void bsp_Wdg_Init(void);
static void bsp_Wdg_Feed(void);
@@ -15,11 +15,12 @@ bsp_Wdg_t *pWdg = &Wdg;
static void bsp_Wdg_Init(void)
{
-// __HAL_DBGMCU_FREEZE_IWDG(); //调试模式下,冻结看门狗计数器时钟
+ __HAL_DBGMCU_FREEZE_IWDG(); //调试模式下,冻结看门狗计数器时钟
+ Wdg.Feed();
}
static void bsp_Wdg_Feed(void)
{
-// HAL_IWDG_Refresh(&hiwdg);
+ HAL_IWDG_Refresh(&hiwdg);
}
diff --git a/leakage_system/usr/bsp/bsp_w25q.c b/leakage_system/usr/bsp/bsp_w25q.c
index 7efecf1..347a00c 100644
--- a/leakage_system/usr/bsp/bsp_w25q.c
+++ b/leakage_system/usr/bsp/bsp_w25q.c
@@ -5,6 +5,7 @@
#include
#include "app_leakage.h"
+#include "bsp_W5500.h"
/* spi flash 片选引脚 - pb12 */
#define W25Q32_CS_LOW() HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, GPIO_PIN_RESET)
@@ -95,12 +96,27 @@ static void gui_tjc_hmi_read_device_info_from_w25q(void)
}
}
+static void gui_tjc_hmi_read_network_config_from_w25q(void)
+{
+ network_config_t config;
+ w25q32.read(W25Q32_NETWORK_CONFIG_ADDR, (uint8_t*)&config, sizeof(config));
+
+ /* 检查数据有效性(判断第一个IP字节不是0xFF,表示有有效数据) */
+ if (config.ip[0] != 0xFF && config.ip[0] != 0x00) {
+ memcpy(W5500.IP_Addr, config.ip, 4);
+ memcpy(W5500.Sub_Mask, config.mask, 4);
+ memcpy(W5500.Gateway_IP, config.gateway, 4);
+ W5500.W5500_Class[0].ConfigData.Port[0] = (config.port >> 8) & 0xFF;
+ W5500.W5500_Class[0].ConfigData.Port[1] = config.port & 0xFF;
+ }
+}
/* 初始化函数 */
static void w25q32_init(void) {
W25Q32_CS_HIGH(); /* 初始时片选拉高 */
w25q32_wake_up(); /* 唤醒芯片 */
gui_tjc_hmi_read_device_info_from_w25q();
+ gui_tjc_hmi_read_network_config_from_w25q();
}
/* 读取芯片id */
diff --git a/leakage_system/usr/bsp/bsp_w25q.h b/leakage_system/usr/bsp/bsp_w25q.h
index d227b83..fa097fc 100644
--- a/leakage_system/usr/bsp/bsp_w25q.h
+++ b/leakage_system/usr/bsp/bsp_w25q.h
@@ -55,6 +55,8 @@ void w25q32_sector_erase(uint32_t sector_addr);
/* 蜂鸣器状态存储地址 - 使用独立扇区(扇区14) */
#define W25Q32_BUZZER_STATE_ADDR 0x00E000 /*存储蜂鸣器状态(1字节)*/
+#define W25Q32_NETWORK_CONFIG_ADDR 0x00F000 /* 网络配置存储地址(使用独立扇区) */
+
/* w25q32 对象结构体 */
typedef struct {
void (*init)(void);
diff --git a/leakage_system/usr/gui/gui_tjc_hmi.c b/leakage_system/usr/gui/gui_tjc_hmi.c
index ce66976..9ba6f56 100644
--- a/leakage_system/usr/gui/gui_tjc_hmi.c
+++ b/leakage_system/usr/gui/gui_tjc_hmi.c
@@ -39,6 +39,16 @@
#define HMI_PROTO_GUI_HELP (0x17)/*帮助界面 */
#define HMI_PROTO_GUI_TIME (0x18)/*时间设置界面*/
+/*界面ID*/
+#define GUI_MAIN (10)/*主界面*/
+#define GUI_CURR_ALARM (11)/*实时报警界面*/
+#define GUI_DETALL_MAIN (12)/*主界面_详细信息*/
+#define GUI_LOGIN (13)/*登陆界面*/
+#define GUI_HISTORY_ALARM (14)/*历史报警界面*/
+#define GUI_TCP_CONFIG (15)/*网络配置界面*/
+#define GUI_DEVICE_CONFIG (16)/*设备配置界面*/
+#define GUI_TIME (18)/*时间设置界面*/
+
#define HMI_PROTO_ASCII_RX_DELINITER (0xAA)/*接收分隔符*/
#define HMI_PROTO_ASCII_TX_DELINITER (0xFF)/*发送分隔符*/
@@ -125,7 +135,7 @@ static void gui_tjc_hmi_read_password_from_w25q(void)
/*将密码保存到W25Q32*/
static void gui_tjc_hmi_save_password_to_w25q(void)
{
- uint32_t erase_addr = W25Q32_PASSWORD_ADDR & ~(W25Q32_SECTOR_SIZE - 1);
+ u32 erase_addr = W25Q32_PASSWORD_ADDR & ~(W25Q32_SECTOR_SIZE - 1);
w25q32_sector_erase(erase_addr);
/*将4字节密码写入W25Q32*/
w25q32.write(W25Q32_PASSWORD_ADDR, p_tjc_hmi->password, 4);
@@ -144,7 +154,7 @@ static void gui_tjc_hmi_save_device_info_to_w25q(void)
}
/* 添加Flash擦除操作 - 必须擦除后才能写入 */
- uint32_t erase_addr = W25Q32_DEVICE_INFO_ADDR;
+ u32 erase_addr = W25Q32_DEVICE_INFO_ADDR;
/* 确保地址是4K对齐(W25Q32_SECTOR_SIZE = 4096) */
erase_addr &= ~(W25Q32_SECTOR_SIZE - 1);
@@ -158,6 +168,24 @@ static void gui_tjc_hmi_save_device_info_to_w25q(void)
DEVICE_INFO_STORAGE_SIZE);
}
+/* 将当前W5500的网络配置保存到W25Q32 */
+static void gui_tjc_hmi_save_network_config_to_w25q(void)
+{
+ network_config_t config;
+ memcpy(config.ip, W5500.IP_Addr, 4);
+ memcpy(config.mask, W5500.Sub_Mask, 4);
+ memcpy(config.gateway, W5500.Gateway_IP, 4);
+ config.port = (W5500.W5500_Class[0].ConfigData.Port[0] << 8) |
+ W5500.W5500_Class[0].ConfigData.Port[1];
+
+ /* 擦除整个扇区(4K对齐) */
+ u32 erase_addr = W25Q32_NETWORK_CONFIG_ADDR & ~(W25Q32_SECTOR_SIZE - 1);
+ w25q32_sector_erase(erase_addr);
+
+ /* 写入配置数据 */
+ w25q32.write(W25Q32_NETWORK_CONFIG_ADDR, (uint8_t*)&config, sizeof(config));
+}
+
/*解析网络函数*/
static void parse_ip_string(u8 *str, u8 len, u8 *ip)
{
@@ -182,7 +210,7 @@ buffer
format:格式化输入
...:不定长
*/
-static u16 gui_tjc_hmi_tx_text_display(u16 x,u16 y,char *buffer,const char *format,...)
+static u16 gui_tjc_hmi_tx_text_display(u16 z,u16 x,u16 y,char *buffer,const char *format,...)
{
u16 i,len;
s16 state;
@@ -202,7 +230,7 @@ static u16 gui_tjc_hmi_tx_text_display(u16 x,u16 y,char *buffer,const char *form
}
/*拼接字符串*/
- sprintf(buffer,"t%d_%d.txt=\"%s\"",x,y,gui_tjc_hmi_text_buffer);
+ sprintf(buffer,"t%d_%d_%d.txt=\"%s\"",z,x,y,gui_tjc_hmi_text_buffer);
len = strlen(buffer);
for(i=0;ipassword[0],
p_tjc_hmi->password[1],
@@ -1114,6 +1142,8 @@ static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
page_num++;
}
+ memset(hmi_tx_buffer, 0, sizeof(hmi_tx_buffer));
+
if(HMI_PROTO_CMD_GET == cmd) /* 获取数据 */
{
switch(opa)
@@ -1153,22 +1183,22 @@ static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
if(history.read_history(record_index, &history_record))
{
/* 区域名: t(i+1)_1 */
- len += gui_tjc_hmi_tx_text_display(i+1, 1,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 1,
(char *)&hmi_tx_buffer[len],
"%s",
history_record.region_name);
/* 设备ID: t(i+1)_2 */
- len += gui_tjc_hmi_tx_text_display(i+1, 2,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 2,
(char *)&hmi_tx_buffer[len],
"%d",
history_record.device_id);
/*通道信息:t(i+1)_3*/
- len += gui_tjc_hmi_tx_text_display(i+1,3,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1,3,
(char *)&hmi_tx_buffer[len],
"%d",
- history_record.channel);
+ history_record.channel+1);
/* 报警类型: t(i+1)_4 */
alarm_type_str[0] = '\0';
@@ -1179,13 +1209,13 @@ static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
else if(history_record.alarm_type == APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
strcat(alarm_type_str, "通讯超时");
- len += gui_tjc_hmi_tx_text_display(i+1, 4,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 4,
(char *)&hmi_tx_buffer[len],
"%s",
alarm_type_str);
/* 设备名称: t(i+1)_5 */
- len += gui_tjc_hmi_tx_text_display(i+1, 5,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 5,
(char *)&hmi_tx_buffer[len],
"%s",
history_record.device_name);
@@ -1193,14 +1223,14 @@ static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
/* 漏液距离: t(i+1)_6 (如果是漏液报警才显示) */
if(history_record.alarm_type == APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
{
- len += gui_tjc_hmi_tx_text_display(i+1, 6,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 6,
(char *)&hmi_tx_buffer[len],
"%d",
history_record.leak_distance);
}
else
{
- len += gui_tjc_hmi_tx_text_display(i+1, 6,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 6,
(char *)&hmi_tx_buffer[len],
"0");
}
@@ -1214,7 +1244,7 @@ static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
history_record.start_time[4],
history_record.start_time[5],
history_record.start_time[6]);
- len += gui_tjc_hmi_tx_text_display(i+1, 7,
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 7,
(char *)&hmi_tx_buffer[len],
"%s",
time_str);
@@ -1222,24 +1252,26 @@ static void gui_tjc_hmi_history_alarm_send(u8 cmd,u8 opa,u8 *p_data)
else
{
/* 读取失败,显示空 */
- len += gui_tjc_hmi_tx_text_display(i+1, 1, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 2, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 3, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 4, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 5, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 6, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 1, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 2, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 3, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 4, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 5, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 6, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 7, (char *)&hmi_tx_buffer[len], "");
}
}
/* 如果本页不足15条记录,清空剩余行 */
for(; i < HISTORY_ALARM_PER_PAGE; i++)
{
- len += gui_tjc_hmi_tx_text_display(i+1, 1, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 2, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 3, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 4, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 5, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 6, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 1, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 2, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 3, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 4, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 5, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 6, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_HISTORY_ALARM,i+1, 7, (char *)&hmi_tx_buffer[len], "");
}
len = strlen((char *)hmi_tx_buffer);
@@ -1330,33 +1362,39 @@ static void gui_tjc_hmi_tcp_config_send(u8 cmd,u8 opa,u8 *p_data)
{
if(p_data[0] == 0x01)
{
- len += gui_tjc_hmi_tx_text_display(1,1,(char *)&hmi_tx_buffer[len],
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,1,(char *)&hmi_tx_buffer[len],
"%d.%d.%d.%d",
W5500.IP_Addr[0],
W5500.IP_Addr[1],
W5500.IP_Addr[2],
W5500.IP_Addr[3]);
- len += gui_tjc_hmi_tx_text_display(1,2,(char *)&hmi_tx_buffer[len],
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,2,(char *)&hmi_tx_buffer[len],
"%d.%d.%d.%d",
W5500.Sub_Mask[0],
W5500.Sub_Mask[1],
W5500.Sub_Mask[2],
W5500.Sub_Mask[3]);
- len += gui_tjc_hmi_tx_text_display(1,3,(char *)&hmi_tx_buffer[len],
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,3,(char *)&hmi_tx_buffer[len],
"%d.%d.%d.%d",
W5500.Gateway_IP[0],
W5500.Gateway_IP[1],
W5500.Gateway_IP[2],
W5500.Gateway_IP[3]);
- len += gui_tjc_hmi_tx_text_display(1,4,(char *)&hmi_tx_buffer[len],"%s","5000");
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,4,(char *)&hmi_tx_buffer[len],"%d",(W5500.W5500_Class[0].ConfigData.Port[0] << 8) | W5500.W5500_Class[0].ConfigData.Port[1]);
}else if(p_data[0] == 0x00)
{
- len += gui_tjc_hmi_tx_text_display(1,1,(char *)&hmi_tx_buffer[len],"%s","192.168.100.100");
- len += gui_tjc_hmi_tx_text_display(1,2,(char *)&hmi_tx_buffer[len],"%s","255.255.255.0");
- len += gui_tjc_hmi_tx_text_display(1,3,(char *)&hmi_tx_buffer[len],"%s","192.168.50.1");
- len += gui_tjc_hmi_tx_text_display(1,4,(char *)&hmi_tx_buffer[len],"%s","5000");
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,1,(char *)&hmi_tx_buffer[len],"%s","192.168.100.100");
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,2,(char *)&hmi_tx_buffer[len],"%s","255.255.255.0");
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,3,(char *)&hmi_tx_buffer[len],"%s","192.168.50.1");
+ len += gui_tjc_hmi_tx_text_display(GUI_TCP_CONFIG,1,4,(char *)&hmi_tx_buffer[len],"%s","5000");
+ sscanf("192.168.100.100","%hhu.%hhu.%hhu.%hhu",&W5500.IP_Addr[0],&W5500.IP_Addr[1],&W5500.IP_Addr[2],&W5500.IP_Addr[3]);
+ sscanf("255.255.255.0","%hhu.%hhu.%hhu.%hhu",&W5500.Sub_Mask[0],&W5500.Sub_Mask[1],&W5500.Sub_Mask[2],&W5500.Sub_Mask[3]);
+ sscanf("192.168.50.1","%hhu.%hhu.%hhu.%hhu",&W5500.Gateway_IP[0],&W5500.Gateway_IP[1],&W5500.Gateway_IP[2],&W5500.Gateway_IP[3]);
+ W5500.W5500_Class[0].ConfigData.Port[0] = (5000 >> 8) & 0xFF;
+ W5500.W5500_Class[0].ConfigData.Port[1] = 5000 & 0xFF;
+ W5500.Init();
}
}break;
case 0x02:/*无*/
@@ -1376,8 +1414,9 @@ static void gui_tjc_hmi_tcp_config_send(u8 cmd,u8 opa,u8 *p_data)
{
u8 field_count = 0;
u8 *current_pos = p_data;
- u8 ip_str[16], mask_str[16], gw_str[16], dns_str[16];
- u8 ip_len, mask_len, gw_len, dns_len;
+ u8 ip_str[16], mask_str[16], gw_str[16], port_str[16];
+ u8 ip_len, mask_len, gw_len, port_len;
+ u16 port_val;
/* 解析IP地址 */
for (i = 0; i < 16; i++) {
@@ -1415,12 +1454,12 @@ static void gui_tjc_hmi_tcp_config_send(u8 cmd,u8 opa,u8 *p_data)
}
}
- /* 解析DNS服务器 */
- for (i = 0; i < 16; i++) {
+ /* 解析端口号 */
+ for (i = 0; i < 16; i++) {
if (current_pos[i] == HMI_PROTO_ASCII_RX_DELINITER) {
- dns_len = i;
- memcpy(dns_str, current_pos, dns_len);
- dns_str[dns_len] = '\0';
+ port_len = i;
+ memcpy(port_str, current_pos, port_len);
+ port_str[port_len] = '\0';
current_pos += (i + 1);
field_count++;
break;
@@ -1431,6 +1470,16 @@ static void gui_tjc_hmi_tcp_config_send(u8 cmd,u8 opa,u8 *p_data)
parse_ip_string(ip_str, ip_len, W5500.IP_Addr);
parse_ip_string(mask_str, mask_len, W5500.Sub_Mask);
parse_ip_string(gw_str, gw_len, W5500.Gateway_IP);
+ /* 端口号转换为整数 */
+ port_val = atoi((char*)port_str);
+ W5500.W5500_Class[0].ConfigData.Port[0] = (port_val >> 8) & 0xFF;
+ W5500.W5500_Class[0].ConfigData.Port[1] = port_val & 0xFF;
+
+ /* 保存到Flash */
+ gui_tjc_hmi_save_network_config_to_w25q();
+
+ /* 重启W5500使新配置生效 */
+ W5500.Init();
}
}break;
@@ -1473,7 +1522,7 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
enabled_device_count = 0;
for(i = 0; i < APP_LEAKAGE_SUB_DEVICE_NUM; i++)
{
- if(leakage.sub_device_data[i].flash_data.state == ENABLE)
+ if(leakage.sub_device_data[i].flash_data.state == ENABLE && leakage.sub_device_data[i].flash_data.modbus_id > 0)
{
enabled_device_count++;
}
@@ -1497,10 +1546,10 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
{
for(i = 0; i < DEVICES_PER_PAGE; i++)
{
- len += gui_tjc_hmi_tx_text_display(i+1, 1, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 2, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 3, (char *)&hmi_tx_buffer[len], "");
- len += gui_tjc_hmi_tx_text_display(i+1, 4, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 1, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 2, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 3, (char *)&hmi_tx_buffer[len], "");
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 4, (char *)&hmi_tx_buffer[len], "");
}
len = strlen((char *)hmi_tx_buffer);
gui_tjc_hmi_data_send(hmi_tx_buffer, len);
@@ -1538,7 +1587,7 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
device_index = page_device_indices[i];
/*区域名: t(i+1)_1 */
- len += gui_tjc_hmi_tx_text_display(i+1, 1,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 1,
(char *)&hmi_tx_buffer[len],
"%s",
leakage.sub_device_data[device_index].flash_data.region_name);
@@ -1547,26 +1596,26 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
u8 com_port = leakage.sub_device_data[device_index].flash_data.com;
if(com_port < 4) /*确保端口号在有效范围内*/
{
- len += gui_tjc_hmi_tx_text_display(i+1, 2,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 2,
(char *)&hmi_tx_buffer[len],
"%s",
hmi_proto_string_com[com_port]);
}
else
{
- len += gui_tjc_hmi_tx_text_display(i+1, 2,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 2,
(char *)&hmi_tx_buffer[len],
"未知");
}
/*设备ID: t(i+1)_3 */
- len += gui_tjc_hmi_tx_text_display(i+1, 3,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 3,
(char *)&hmi_tx_buffer[len],
"%d",
leakage.sub_device_data[device_index].flash_data.modbus_id);
/*设备名称: t(i+1)_4 */
- len += gui_tjc_hmi_tx_text_display(i+1, 4,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 4,
(char *)&hmi_tx_buffer[len],
"%s",
leakage.sub_device_data[device_index].flash_data.device_name);
@@ -1578,22 +1627,22 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
for(i = page_device_count; i < DEVICES_PER_PAGE; i++)
{
/*清空区域名*/
- len += gui_tjc_hmi_tx_text_display(i+1, 1,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 1,
(char *)&hmi_tx_buffer[len],
"");
/*清空端口号*/
- len += gui_tjc_hmi_tx_text_display(i+1, 2,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 2,
(char *)&hmi_tx_buffer[len],
"");
/*清空设备ID*/
- len += gui_tjc_hmi_tx_text_display(i+1, 3,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 3,
(char *)&hmi_tx_buffer[len],
"");
/*清空设备名称*/
- len += gui_tjc_hmi_tx_text_display(i+1, 4,
+ len += gui_tjc_hmi_tx_text_display(GUI_DEVICE_CONFIG,i+1, 4,
(char *)&hmi_tx_buffer[len],
"");
}
@@ -1814,6 +1863,11 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
id_str[i] = '\0';
new_device.modbus_id = atoi(id_str);
+ if(new_device.modbus_id < 1 && new_device.modbus_id > 255)
+ {
+ return;
+ }
+
current_pos += (i + 1);
field_count++;
break;
@@ -1841,7 +1895,7 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
{
new_device.state = ENABLE;
new_device.baudrate = app_com.com[new_device.com].flash_data.baudrate;
- new_device.shield = UNBLOCKED;
+ leakage.sub_device_data[x].shield = UNBLOCKED;
leakage.sub_device_data[x].flash_data = new_device;
gui_tjc_hmi_save_device_info_to_w25q();
gui_tjc_hmi_class_update();
@@ -1859,7 +1913,7 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
/*波特率设置*/
new_device.baudrate = app_com.com[new_device.com].flash_data.baudrate;
- new_device.shield = UNBLOCKED;
+ leakage.sub_device_data[empty_slot_index].shield = UNBLOCKED;
/*添加到app_leakage的设备列表中*/
leakage.sub_device_data[empty_slot_index].flash_data = new_device;
@@ -1892,7 +1946,7 @@ static void gui_tjc_hmi_device_config_send(u8 cmd,u8 opa,u8 *p_data)
case 0x02:/*删除设备,将设备信息从w25q中删除*/
{
- u8 page_device_indices[8] = {0}; /*存储当前页8个设备在app_leakage中的索引*/
+ u8 page_device_indices[8] = {0}; /*存储当前页8个设备在app_leakage中的索引*/
u8 page_device_count = 0; /*当前页实际启用的设备数量*/
u8 current_enabled_index = 0; /*当前是第几个启用的设备*/
diff --git a/leakage_system/usr/protocol/proto_modbus_tcp_slave_ex.c b/leakage_system/usr/protocol/proto_modbus_tcp_slave_ex.c
index 73356a5..ee64817 100644
--- a/leakage_system/usr/protocol/proto_modbus_tcp_slave_ex.c
+++ b/leakage_system/usr/protocol/proto_modbus_tcp_slave_ex.c
@@ -268,7 +268,7 @@ static u16 proto_modbus_data_read(u16 addr)
// data = (leakage.sub_device_data[sensor_index].flash_data.com + 1)<< 8 | leakage.sub_device_data[sensor_index].flash_data.modbus_id;
u16 value = (leakage.sub_device_data[sensor_index].flash_data.com + 1) << 8;
value |= leakage.sub_device_data[sensor_index].flash_data.modbus_id;
- if (leakage.sub_device_data[sensor_index].flash_data.shield == BLOCKED) {
+ if (leakage.sub_device_data[sensor_index].shield == BLOCKED) {
value |= 0x8000; /*最高位表示屏蔽*/
}
if (leakage.sub_device_data[sensor_index].flash_data.state == ENABLE) {