FIX | 编码修改

master
yuliang 8 months ago
parent fc930f0708
commit b2e06f30e1

@ -32,7 +32,8 @@ Dma.Request1=USART3_TX
Dma.Request2=UART4_RX Dma.Request2=UART4_RX
Dma.Request3=SPI1_RX Dma.Request3=SPI1_RX
Dma.Request4=SPI1_TX Dma.Request4=SPI1_TX
Dma.RequestsNb=5 Dma.Request5=USART2_RX
Dma.RequestsNb=6
Dma.SPI1_RX.3.Direction=DMA_PERIPH_TO_MEMORY Dma.SPI1_RX.3.Direction=DMA_PERIPH_TO_MEMORY
Dma.SPI1_RX.3.Instance=DMA2_Channel3 Dma.SPI1_RX.3.Instance=DMA2_Channel3
Dma.SPI1_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE Dma.SPI1_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE
@ -60,6 +61,15 @@ Dma.UART4_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.UART4_RX.2.PeriphInc=DMA_PINC_DISABLE Dma.UART4_RX.2.PeriphInc=DMA_PINC_DISABLE
Dma.UART4_RX.2.Priority=DMA_PRIORITY_LOW Dma.UART4_RX.2.Priority=DMA_PRIORITY_LOW
Dma.UART4_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority Dma.UART4_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
Dma.USART2_RX.5.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART2_RX.5.Instance=DMA1_Channel6
Dma.USART2_RX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.USART2_RX.5.MemInc=DMA_MINC_ENABLE
Dma.USART2_RX.5.Mode=DMA_NORMAL
Dma.USART2_RX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.USART2_RX.5.PeriphInc=DMA_PINC_DISABLE
Dma.USART2_RX.5.Priority=DMA_PRIORITY_LOW
Dma.USART2_RX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
Dma.USART3_RX.0.Direction=DMA_PERIPH_TO_MEMORY Dma.USART3_RX.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART3_RX.0.Instance=DMA1_Channel3 Dma.USART3_RX.0.Instance=DMA1_Channel3
Dma.USART3_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE Dma.USART3_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
@ -95,8 +105,9 @@ Mcu.Family=STM32L4
Mcu.IP0=ADC1 Mcu.IP0=ADC1
Mcu.IP1=DMA Mcu.IP1=DMA
Mcu.IP10=UART4 Mcu.IP10=UART4
Mcu.IP11=USART2 Mcu.IP11=USART1
Mcu.IP12=USART3 Mcu.IP12=USART2
Mcu.IP13=USART3
Mcu.IP2=FREERTOS Mcu.IP2=FREERTOS
Mcu.IP3=NVIC Mcu.IP3=NVIC
Mcu.IP4=RCC Mcu.IP4=RCC
@ -105,7 +116,7 @@ Mcu.IP6=SPI1
Mcu.IP7=SPI3 Mcu.IP7=SPI3
Mcu.IP8=SYS Mcu.IP8=SYS
Mcu.IP9=TIM7 Mcu.IP9=TIM7
Mcu.IPNb=13 Mcu.IPNb=14
Mcu.Name=STM32L496Z(E-G)Tx Mcu.Name=STM32L496Z(E-G)Tx
Mcu.Package=LQFP144 Mcu.Package=LQFP144
Mcu.Pin0=PE2 Mcu.Pin0=PE2
@ -121,34 +132,38 @@ Mcu.Pin17=PB11
Mcu.Pin18=PD14 Mcu.Pin18=PD14
Mcu.Pin19=PD15 Mcu.Pin19=PD15
Mcu.Pin2=PF0 Mcu.Pin2=PF0
Mcu.Pin20=PG3 Mcu.Pin20=PG2
Mcu.Pin21=PG4 Mcu.Pin21=PG3
Mcu.Pin22=PA13 (JTMS/SWDIO) Mcu.Pin22=PG4
Mcu.Pin23=PA14 (JTCK/SWCLK) Mcu.Pin23=PA9
Mcu.Pin24=PC10 Mcu.Pin24=PA10
Mcu.Pin25=PC11 Mcu.Pin25=PA13 (JTMS/SWDIO)
Mcu.Pin26=PC12 Mcu.Pin26=PA14 (JTCK/SWCLK)
Mcu.Pin27=PD3 Mcu.Pin27=PC10
Mcu.Pin28=PD4 Mcu.Pin28=PC11
Mcu.Pin29=PD5 Mcu.Pin29=PC12
Mcu.Pin3=PF9 Mcu.Pin3=PF9
Mcu.Pin30=PD6 Mcu.Pin30=PD3
Mcu.Pin31=PG10 Mcu.Pin31=PD4
Mcu.Pin32=PG13 Mcu.Pin32=PD5
Mcu.Pin33=PG14 Mcu.Pin33=PD6
Mcu.Pin34=PE0 Mcu.Pin34=PG9
Mcu.Pin35=VP_ADC1_TempSens_Input Mcu.Pin35=PG10
Mcu.Pin36=VP_FREERTOS_VS_CMSIS_V2 Mcu.Pin36=PG13
Mcu.Pin37=VP_RTC_VS_RTC_Activate Mcu.Pin37=PG14
Mcu.Pin38=VP_SYS_VS_Systick Mcu.Pin38=PE0
Mcu.Pin39=VP_TIM7_VS_ClockSourceINT Mcu.Pin39=VP_ADC1_TempSens_Input
Mcu.Pin4=PH0-OSC_IN (PH0) Mcu.Pin4=PH0-OSC_IN (PH0)
Mcu.Pin40=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin41=VP_RTC_VS_RTC_Activate
Mcu.Pin42=VP_SYS_VS_Systick
Mcu.Pin43=VP_TIM7_VS_ClockSourceINT
Mcu.Pin5=PH1-OSC_OUT (PH1) Mcu.Pin5=PH1-OSC_OUT (PH1)
Mcu.Pin6=PA0 Mcu.Pin6=PA0
Mcu.Pin7=PA1 Mcu.Pin7=PA1
Mcu.Pin8=PA4 Mcu.Pin8=PA4
Mcu.Pin9=PA5 Mcu.Pin9=PA5
Mcu.PinsNb=40 Mcu.PinsNb=44
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32L496ZGTx Mcu.UserName=STM32L496ZGTx
@ -158,6 +173,7 @@ NVIC.ADC1_2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.DMA1_Channel2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Channel2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Channel3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Channel3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Channel6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Channel3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA2_Channel3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Channel4_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA2_Channel4_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Channel5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA2_Channel5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
@ -185,6 +201,8 @@ PA0.Signal=UART4_TX
PA1.Locked=true PA1.Locked=true
PA1.Mode=Asynchronous PA1.Mode=Asynchronous
PA1.Signal=UART4_RX PA1.Signal=UART4_RX
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA13\ (JTMS/SWDIO).Locked=true PA13\ (JTMS/SWDIO).Locked=true
PA13\ (JTMS/SWDIO).Mode=Serial_Wire PA13\ (JTMS/SWDIO).Mode=Serial_Wire
PA13\ (JTMS/SWDIO).Signal=SYS_JTMS-SWDIO PA13\ (JTMS/SWDIO).Signal=SYS_JTMS-SWDIO
@ -206,6 +224,8 @@ PA6.Signal=SPI1_MISO
PA7.Locked=true PA7.Locked=true
PA7.Mode=Full_Duplex_Master PA7.Mode=Full_Duplex_Master
PA7.Signal=SPI1_MOSI PA7.Signal=SPI1_MOSI
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PB0.Signal=ADCx_IN15 PB0.Signal=ADCx_IN15
PB10.Locked=true PB10.Locked=true
PB10.Mode=Asynchronous PB10.Mode=Asynchronous
@ -286,6 +306,10 @@ PG14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG14.Locked=true PG14.Locked=true
PG14.PinState=GPIO_PIN_SET PG14.PinState=GPIO_PIN_SET
PG14.Signal=GPIO_Output PG14.Signal=GPIO_Output
PG2.GPIOParameters=GPIO_Label
PG2.GPIO_Label=RS485_A_DE
PG2.Locked=true
PG2.Signal=GPIO_Output
PG3.GPIOParameters=GPIO_Label PG3.GPIOParameters=GPIO_Label
PG3.GPIO_Label=BAT_CHECK PG3.GPIO_Label=BAT_CHECK
PG3.Locked=true PG3.Locked=true
@ -294,6 +318,10 @@ PG4.GPIOParameters=GPIO_Label
PG4.GPIO_Label=LED_RUN PG4.GPIO_Label=LED_RUN
PG4.Locked=true PG4.Locked=true
PG4.Signal=GPIO_Output PG4.Signal=GPIO_Output
PG9.GPIOParameters=GPIO_Label
PG9.GPIO_Label=POWER_RS485
PG9.Locked=true
PG9.Signal=GPIO_Output
PH0-OSC_IN\ (PH0).Locked=true PH0-OSC_IN\ (PH0).Locked=true
PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator
PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN
@ -331,7 +359,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_UART4_Init-UART4-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,7-MX_TIM7_Init-TIM7-false-HAL-true,8-MX_ADC1_Init-ADC1-false-HAL-true,9-MX_RTC_Init-RTC-false-HAL-true,10-MX_SPI3_Init-SPI3-false-HAL-true,11-MX_SPI1_Init-SPI1-false-HAL-true,12-MX_USART2_UART_Init-USART2-false-HAL-true ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_UART4_Init-UART4-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_ADC1_Init-ADC1-false-HAL-true,8-MX_RTC_Init-RTC-false-HAL-true,9-MX_SPI3_Init-SPI3-false-HAL-true,10-MX_SPI1_Init-SPI1-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_USART1_UART_Init-USART1-false-HAL-true
RCC.ADCFreq_Value=32500000 RCC.ADCFreq_Value=32500000
RCC.AHBFreq_Value=80000000 RCC.AHBFreq_Value=80000000
RCC.APB1Freq_Value=80000000 RCC.APB1Freq_Value=80000000
@ -424,6 +452,8 @@ TIM7.Period=20
TIM7.Prescaler=7999 TIM7.Prescaler=7999
UART4.BaudRate=115200 UART4.BaudRate=115200
UART4.IPParameters=BaudRate UART4.IPParameters=BaudRate
USART1.IPParameters=VirtualMode-Asynchronous
USART1.VirtualMode-Asynchronous=VM_ASYNC
USART2.IPParameters=VirtualMode-Asynchronous USART2.IPParameters=VirtualMode-Asynchronous
USART2.VirtualMode-Asynchronous=VM_ASYNC USART2.VirtualMode-Asynchronous=VM_ASYNC
USART3.BaudRate=115200 USART3.BaudRate=115200

@ -67,7 +67,6 @@ typedef struct
{ {
osThreadId_t ADCHandle; // ADC 任务句柄. osThreadId_t ADCHandle; // ADC 任务句柄.
ADC_HandleTypeDef *ADCi_adc; // ADCi 使用硬件句柄. ADC_HandleTypeDef *ADCi_adc; // ADCi 使用硬件句柄.
uint16_t ADCi_value[ADCi_COLLECT_SUM]; // ADCi 采样原始值. uint16_t ADCi_value[ADCi_COLLECT_SUM]; // ADCi 采样原始值.
uint32_t ADCi_param1; // ADCi 温度传感器校准系数 1. uint32_t ADCi_param1; // ADCi 温度传感器校准系数 1.
@ -85,9 +84,6 @@ typedef struct
uint32_t collect_time; // ADC 上次采集结束时间. uint32_t collect_time; // ADC 上次采集结束时间.
uint8_t ADC_state; // ADC 采样状态. uint8_t ADC_state; // ADC 采样状态.
uint8_t ADC_err_cnt; // ADC 采样失败次数. uint8_t ADC_err_cnt; // ADC 采样失败次数.
int16_t ADC_value[CFG_ADC_CH_CNT][ADC_COLLECT_CNT]; // ADC 采样原始值.
int16_t ADC_value_elec[CFG_ADC_CH_CNT][ADC_COLLECT_CNT];// ADC 采样计算电流值.
uint32_t ADC_elec[CFG_ADC_CH_CNT]; // ADC 采样计算后的电流有效值 mA.
uint8_t up_finish; // 上传是否完成 BOOL. uint8_t up_finish; // 上传是否完成 BOOL.

@ -52,7 +52,7 @@ typedef struct
uint16_t vbat; // 电池电压, 单位: mv. uint16_t vbat; // 电池电压, 单位: mv.
int16_t CSQ; // 4G 信号质量 > -51dBm 统一显示 -51dBm, < -113 dBm 为无信号. int16_t CSQ; // 4G 信号质量 > -51dBm 统一显示 -51dBm, < -113 dBm 为无信号.
uint16_t vin; // 工作电压, 单位: mv. uint16_t vin; // 工作电压, 单位: mv.
uint32_t elec[CFG_ADC_CH_CNT]; // 通道电流有效值 mA. uint32_t elec[DAU_PORT_POWER_CNT]; // 通道电流有效值 mA.
uint16_t vsc; // 超级电容电压, 单位: mv. uint16_t vsc; // 超级电容电压, 单位: mv.
int16_t sen_temp[SENSOR_SUM]; // 传感器温度: 单位: 0.1℃. int16_t sen_temp[SENSOR_SUM]; // 传感器温度: 单位: 0.1℃.
uint16_t sen_x[SENSOR_SUM]; // 传感器震动 x 轴. uint16_t sen_x[SENSOR_SUM]; // 传感器震动 x 轴.

@ -69,10 +69,12 @@
/* uint32_t无效数据.*/ /* uint32_t无效数据.*/
#define INVALID_DATA_U32 0xFFFFFFFF #define INVALID_DATA_U32 0xFFFFFFFF
/* ADC 通道数. */ /* DAU 工频通道数. */
#define CFG_ADC_CH_CNT 8 // ADC 通道数. #define DAU_PORT_POWER_CNT 8
#define DAU_PORT_DEFECT_MAX 4
#define DAU_PORT_FAULT_MAX 4
/* ADC 校准点. */ /* ADC 校准点. */
#define CFG_ADC_ADJ_CNT 5 #define DAU_POWER_ADJ_CNT 5
/* RS485 传感器数量. */ /* RS485 传感器数量. */
#define SENSOR_SUM 8 #define SENSOR_SUM 8
@ -90,6 +92,8 @@
#define COM_WDG_ADC 0x0002 #define COM_WDG_ADC 0x0002
#define COM_WDG_CLI 0x0004 #define COM_WDG_CLI 0x0004
#define COM_WDG_WIR 0x0008 #define COM_WDG_WIR 0x0008
#define COM_WDG_DAU 0x0010
#define COM_WDG_GPS 0x0020
#define CSG_CIPHERTEXT_LEN 4 #define CSG_CIPHERTEXT_LEN 4
#define CSG_PASSWD_LEN 4 #define CSG_PASSWD_LEN 4
@ -138,8 +142,9 @@ typedef enum
DBG_M_4G, DBG_M_4G,
DBG_M_RS485_SEN, DBG_M_RS485_SEN,
DBG_M_RS485_DEBUG, DBG_M_RS485_DEBUG,
DBG_M_WAVE, DBG_M_DAU,
DBG_M_POSITION, DBG_M_DAU_TXRX,
DBG_M_GPS,
DBG_M_COUNT DBG_M_COUNT
} DBG_MODULE_E; } DBG_MODULE_E;
@ -166,14 +171,14 @@ enum DEBUG_CMD_TYPE
{ {
DEBUG_CT_REQUEST = 1, DEBUG_CT_REQUEST = 1,
DEBUG_CT_REPLY = 2, DEBUG_CT_REPLY = 2,
DEBUG_CT_PRV_REQUEST = 128, DEBUG_CT_PRV_REQUEST = 121,
DEBUG_CT_PRV_REPLY = 129, DEBUG_CT_PRV_REPLY = 122,
}; };
/* 共有命令字. */ /* 共有命令字. */
enum DEBUG_CMD enum DEBUG_CMD
{ {
DEBUG_C_DEV_INFO = 1, DEBUG_C_CONTACT = 1,
DEBUG_C_DEV_INFO_SET = 2, DEBUG_C_DEV_INFO_SET = 2,
DEBUG_C_RESET = 3, DEBUG_C_RESET = 3,
DEBUG_C_DEFAULT = 4, DEBUG_C_DEFAULT = 4,
@ -182,29 +187,33 @@ enum DEBUG_CMD
DEBUG_C_DEV_CONFIG = 7, DEBUG_C_DEV_CONFIG = 7,
DEBUG_C_DEV_CONFIG_SET = 8, DEBUG_C_DEV_CONFIG_SET = 8,
DEBUG_C_UPDATE_APP_RT = 9, DEBUG_C_UPDATE_APP_RT = 9,
DEBUG_C_KEEPALIVE = 10 DEBUG_C_KEEPALIVE = 10,
DEBUG_C_TIME = 11
}; };
/* 私有命令字. */ /* 私有命令字. */
enum DEBUG_CM_CMD enum DEBUG_CM_CMD
{ {
DEBUG_PRV_ADJ_INFO = 1, DEBUG_PRV_REALDATA = 1,
DEBUG_PRV_REAL_DATA = 2, DEBUG_PRV_POWER = 2,
DEBUG_PRV_POWER_FRE = 3, DEBUG_PRV_DEFECT = 3,
DEBUG_PRV_ADJ_INFO_SET = 4, DEBUG_PRV_REALDATA_FUALT = 4,
DEBUG_PRV_ADJ_AUTO = 5, DEBUG_PRV_POWER_FAULT = 5,
DEBUG_PRV_WAVE = 6, DEBUG_PRV_FAULT = 6,
DEBUG_PRV_DEV_STATE = 7, DEBUG_PRV_ADJ_INFO = 7,
DEBUG_PRV_WAVE_COL = 8, DEBUG_PRV_ADJ_INFO_SET = 8,
DEBUG_PRV_WAVE_CAL = 9, DEBUG_PRV_ADJ_AUTO = 9,
DEBUG_PRV_WAVE_MAX = 10, DEBUG_PRV_DEV_STATE = 10,
DEBUG_PRV_LOG = 11, DEBUG_PRV_WAVE_COL = 11,
DEBUG_PRV_HISTORY_DATA = 12, DEBUG_PRV_WAVE_CAL = 12,
DEBUG_PRV_ADJ_MANUAL = 13, DEBUG_PRV_WAVE_MAX = 13,
DEBUG_PRV_CSG_CONFIG = 14, DEBUG_PRV_LOG = 14,
DEBUG_PRV_CSG_CONFIG_SET = 15, DEBUG_PRV_HISTORY_DATA = 15,
DEBUG_PRV_POSITION_WAVE = 16, DEBUG_PRV_ADJ_MANUAL = 16,
DEBUG_PRV_POSITION = 17 DEBUG_PRV_CSG_CONFIG = 17,
DEBUG_PRV_CSG_CONFIG_SET = 18,
DEBUG_PRV_POSITION_WAVE = 19,
DEBUG_PRV_POSITION = 20
}; };
/* . */ /* . */
@ -326,6 +335,14 @@ typedef struct
} \ } \
} while(0) } while(0)
#define E_RETURN(_f_) \
do { \
if ((rv = _f_) != HAL_OK) \
{ \
return rv; \
} \
} while(0)
#if LD_DEBUG #if LD_DEBUG
#define DBG_BYTE_LEN 16 #define DBG_BYTE_LEN 16
extern int32_t dbg_cmd_hander(uint8_t cmd, uint8_t data); extern int32_t dbg_cmd_hander(uint8_t cmd, uint8_t data);

@ -0,0 +1,141 @@
/*****************************************************************************
* file Inc/dau.h
* author YuLiang
* version 1.0.0
* date 15-Aug-2024
* brief This file provides all the headers of DAU function.
******************************************************************************
* Attention
*
* <h2><center>&copy; COPYRIGHT(c) 2022 LandPower</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of WTOE nor the names of its contributors may be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#ifndef __DAU_H__
#define __DAU_H__
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "FreeRTOS.h"
#include "task.h"
#include "cmsis_os.h"
/* Define --------------------------------------------------------------------*/
#define DAU_PORT_FAULT_CNT 3 // DAU 故障波形通道数
#define DAU_PORT_DEFECT_CNT 3 // DAU 缺陷波形通道数
#define DAU_PORT_GROUND_CNT 4 // DAU 工频接地波形通道数
#define DAU_BUF_LEN 1280
#define DAU_GPS_BUF_LEN 2560
#define DAU_PKT_FAULT_CNT 40 // DAU 故障波形总包数
#define DAU_PKT_FAULT_BYTE_CNT 1024 // DAU 故障波形每包数据大小
#define DAU_FAULT_BYTE_CNT 122880 // DAU 缺陷波形数据大小
#define DAU_PKT_DEFECT_CNT 40 // DAU 缺陷波形总包数
#define DAU_PKT_DEFECT_BYTE_CNT 1024 // DAU 缺陷波形每包数据大小
#define DAU_DEFECT_BYTE_CNT 122880 // DAU 缺陷波形数据大小
#define DAU_PKT_POWER_CNT 4 // DAU 工频波形总包数
#define DAU_PKT_POWER_BYTE_CNT 1024 // DAU 工频波形每包数据大小
#define DAU_POWER_DATE_LEN 2048 // DAU 工频数据长度, 每个数据大小 2byte
/* Exported types ------------------------------------------------------------*/
/* 采集标志位 */
typedef enum
{
DAU_COL_FLAG_FAULT_CMP = 0, // 故障触发波形上传完成
DAU_COL_FLAG_REG_DEFECT, // 寄存器触发缺陷波形有效
DAU_COL_FLAG_REG_POWER, // 寄存器触发工频波形有效
DAU_COL_FLAG_REG_CMP, // 寄存器触发波形上传完成
} DAU_COL_FLAG_E;
/* DAU 全局寄存器. */
typedef struct
{
uint16_t GSCR; // 全局软件特征寄存器 (Global Softwave Characteristic Register)
uint16_t GSVR; // 全局软件版本寄存器 (Global Softwave Version Register)
uint16_t GSR; // 全局状态寄存器 (Global Status Register)
uint16_t GFTR; // 全局故障触发录波状态寄存器 (Global Fault Triggering Register)
uint32_t GFTUR; // 全局故障触发 UTC 时间点寄存器 (Global Fault Triggering UTC Register)
uint32_t GFTNR; // 全局故障触发 ns 时间点寄存器 (Global Fault Triggering ns Register)
uint16_t GRTR; // 全局寄存器触发录波状态寄存器 (Global Register Triggering Register)
uint16_t reserve;
uint32_t GUR; // 全局 UTC 寄存器 (Global UTC Register)
uint32_t GNR; // 全局 ns 寄存器 (Global ns Register)
} dau_reg_global_t;
/* DAU 通道状态寄存器. */
typedef struct
{
uint16_t MSRR[4]; // 缺陷电流通道周波原始采样值的平均值 (Mean Square Root Register).
int16_t AVR[4]; // 缺陷电流通道周波校准值寄存器 (Adjust Value Register).
int16_t MAX[4]; // 缺陷电流通道周波校准值最大值寄存器 (Max Value Register).
int16_t FAULT[4]; // 故障触发电流值寄存器 (Fault Value Register).
} dau_port_state_reg_t;
/* DAU 全局结构体 */
typedef struct
{
osThreadId_t dau_handle; // DAU 任务句柄
SPI_HandleTypeDef *spi; // DAU 通讯使用的 SPI 句柄
uint8_t buf_dau_tx[DAU_BUF_LEN]; // DAU 发包缓存
uint8_t buf_dau_rx[DAU_BUF_LEN]; // DAU 收包缓存
uint32_t addr_fault; // DAU 故障触发录波 flash 地址
uint32_t addr_reg; // DAU 寄存器触发录波 flash 地址
uint32_t col_time; // DAU 采集时间
uint8_t col_flag; // DAU 采集标志位
uint32_t fault_utc; // 故障触发时间
uint32_t fault_ns; // 故障触发时间纳秒
int16_t fault_power[DAU_PORT_POWER_CNT][DAU_POWER_DATE_LEN]; // 故障触发工频波形采样电流值, 接地电流 0.1A, 运行电流 0.25A
uint32_t fault_elec[DAU_PORT_POWER_CNT];// 故障触发工频电流有效值 mA
int16_t fault_trig[DAU_PORT_FAULT_MAX]; // 故障触发电流值 A
int16_t reg_power[DAU_PORT_POWER_CNT][DAU_POWER_DATE_LEN]; // 寄存器触发工频波形采样电流值, 接地电流 0.1A, 运行电流 0.25A
uint32_t reg_elec[DAU_PORT_POWER_CNT]; // 寄存器触发工频电流有效值 mA
int16_t reg_defect_max[DAU_PORT_DEFECT_MAX]; // 寄存器触发缺陷电流最大值 mA
dau_reg_global_t reg_global; // DAU 全局寄存器
dau_port_state_reg_t reg_port_state; // DAU 端口状态寄存器
osThreadId_t gps_handle; // GPS 任务句柄
UART_HandleTypeDef *uart; // GPS 通讯使用的串口句柄
uint8_t buf_gps[DAU_GPS_BUF_LEN]; // GPS 收包缓存
uint16_t len_buf_gps; // 接收到的报文长度
uint8_t is_half_buf_gps; // DMA 收包一半的时候会产生中断, 这个标志用于过滤这给中断
uint8_t is_utc_valid; // GPS 对时 UTC 时间有效
uint32_t utc; // GPS 对时 UTC 时间
} dau_ctrl_t;
/* Exported macro ------------------------------------------------------------*/
#define DAU_CS_ENABLE() HAL_GPIO_WritePin(DAU_CS_GPIO_Port, DAU_CS_Pin, GPIO_PIN_RESET)
#define DAU_CS_DISABLE() HAL_GPIO_WritePin(DAU_CS_GPIO_Port, DAU_CS_Pin, GPIO_PIN_SET)
/* Extern global variables ---------------------------------------------------*/
extern dau_ctrl_t dau_ctrl;
/* Extern functions ----------------------------------------------------------*/
extern void dau_init(void);
extern void dau_show(void);
#endif
/******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/

@ -118,13 +118,13 @@ typedef struct
/* 校准参数信息. */ /* 校准参数信息. */
typedef struct typedef struct
{ {
uint16_t ADCRatio[CFG_ADC_CH_CNT]; uint16_t ADCRatio[DAU_PORT_POWER_CNT];
uint32_t ADCBase_elec[CFG_ADC_CH_CNT][CFG_ADC_ADJ_CNT]; uint32_t ADCBase_elec[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT];
uint16_t ADCAdj[CFG_ADC_CH_CNT][CFG_ADC_ADJ_CNT]; uint16_t ADCAdj[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT];
float ADCBase[CFG_ADC_CH_CNT][CFG_ADC_ADJ_CNT]; float ADCBase[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT];
uint16_t vin; uint16_t vin;
uint16_t vin_adj; uint16_t vin_adj;
uint8_t ADC_turns[CFG_ADC_CH_CNT]; uint8_t ADC_turns[DAU_PORT_POWER_CNT];
} dev_adj_t; } dev_adj_t;
/* 设备状态信息. */ /* 设备状态信息. */
@ -173,18 +173,19 @@ typedef struct
/* 器件名字. 128byte */ /* 器件名字. 128byte */
uint8_t host[DEV_NAME_LEN]; uint8_t host[DEV_NAME_LEN];
/* ADC 校准. 418byte */ /* ADC 校准. 418byte */
uint16_t ADC_ratio[CFG_ADC_CH_CNT]; uint16_t ADC_ratio[DAU_PORT_POWER_CNT];
uint32_t ADC_base_elec[CFG_ADC_CH_CNT][CFG_ADC_ADJ_CNT]; uint32_t ADC_base_elec[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT];
uint16_t ADC_adj[CFG_ADC_CH_CNT][CFG_ADC_ADJ_CNT]; uint16_t ADC_adj[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT];
float ADC_base[CFG_ADC_CH_CNT][CFG_ADC_ADJ_CNT]; float ADC_base[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT];
uint16_t vin_adj; uint16_t vin_adj;
/* 各种 bool 类型配置, 见 DEV_FLAG_E. 2byte */ /* 各种 bool 类型配置, 见 DEV_FLAG_E. 2byte */
uint16_t flag; uint16_t flag;
/* 8 路传感器 id 配置. 8byte */ /* 8 路传感器 id 配置. 8byte */
uint8_t sensor_id[SENSOR_SUM]; uint8_t sensor_id[4];
uint32_t keepalive; //保活间隔 ms
/* 采样间隔配置. 4byte */ /* 采样间隔配置. 4byte */
uint16_t collect_interval; uint16_t collect_interval;
uint16_t wave_interval; uint16_t reserve1;
/* ADCi 电压校准配置. 2byte */ /* ADCi 电压校准配置. 2byte */
uint16_t vin; uint16_t vin;
/* 工作模式配置. 2byte */ /* 工作模式配置. 2byte */
@ -201,7 +202,7 @@ typedef struct
uint8_t is_wave_col; uint8_t is_wave_col;
uint8_t csg_beat_interval; uint8_t csg_beat_interval;
uint8_t reserve0[1]; uint8_t reserve0[1];
uint8_t ADC_turns[CFG_ADC_CH_CNT]; uint8_t ADC_turns[DAU_PORT_POWER_CNT];
uint8_t csg_ciphertext[CSG_CIPHERTEXT_LEN]; uint8_t csg_ciphertext[CSG_CIPHERTEXT_LEN];
uint8_t csg_passwd[8]; uint8_t csg_passwd[8];
uint16_t csg_sleep; uint16_t csg_sleep;
@ -284,7 +285,6 @@ extern void dev_config_flag_assgin(uint16_t flag);
extern void dev_config_flag_set(uint8_t flag_bit); extern void dev_config_flag_set(uint8_t flag_bit);
extern void dev_config_flag_unset(uint8_t flag_bit); extern void dev_config_flag_unset(uint8_t flag_bit);
extern void dev_config_collect_interval_set(uint16_t interval); extern void dev_config_collect_interval_set(uint16_t interval);
extern void dev_config_wave_interval_set(uint16_t interval);
extern void dev_config_defaults_set(void); extern void dev_config_defaults_set(void);
extern HAL_StatusTypeDef dev_config_save(void); extern HAL_StatusTypeDef dev_config_save(void);

@ -50,7 +50,7 @@
#define FLASH_PAGE_NBPERBANK 256 #define FLASH_PAGE_NBPERBANK 256
/* spi flash分配示意图.注意:以下地址必须是扇区对齐. /* spi flash分配示意图.注意:以下地址必须是扇区对齐.
0x0 0x4000 0x8000 0xc000 0x10000 0x18000 0x20000 0x100000 0x900000 0xB00000 0xD00000 0xF00000 0x0 0x4000 0x8000 0xc000 0x10000 0x18000 0x20000 0x100000 0xD00000 0xE00000 0xF00000 0x1000000
************************************************************************************************* *************************************************************************************************
| INFO | INFOB | RECO | RECOB | CONF | CONFB | TFTP IMG | WARE | LOG | DATA | STATE | | INFO | INFOB | RECO | RECOB | CONF | CONFB | TFTP IMG | WARE | LOG | DATA | STATE |
*************************************************************************************************/ *************************************************************************************************/
@ -62,17 +62,18 @@
#define CONFIG_ADDRESS_BAK (uint32_t)0x18000 #define CONFIG_ADDRESS_BAK (uint32_t)0x18000
#define TFTP_APP_ADDRESS (uint32_t)0x20000 #define TFTP_APP_ADDRESS (uint32_t)0x20000
#define TFTP_APP_ADDRESS_END (uint32_t)0x100000 #define TFTP_APP_ADDRESS_END (uint32_t)0x100000
#define WARE_ADDRESS (uint32_t)0x100000 #define WARE_FAULT_ADDRESS (uint32_t)0x100000
#define WARE_ADDRESS_END (uint32_t)0x900000 #define WARE_FAULT_ADDRESS_END (uint32_t)0x280000
#define POSITION_ADDRESS (uint32_t)0x100000 #define WARE_REG_ADDRESS (uint32_t)0x280000
#define POSITION_ADDRESS_END (uint32_t)0x300000 #define WARE_REG_ADDRESS_END (uint32_t) 0xD00000
#define LOG_ADDRESS (uint32_t)0x900000 #define POSITION_ADDRESS (uint32_t)0x300000
#define LOG_ADDRESS_END (uint32_t)0xB00000 #define POSITION_ADDRESS_END (uint32_t)0x500000
#define FD_ADDRESS (uint32_t)0xB00000 #define LOG_ADDRESS (uint32_t)0xD00000
#define FD_ADDRESS_END (uint32_t)0xD00000 #define LOG_ADDRESS_END (uint32_t)0xE00000
#define ST_ADDRESS (uint32_t)0xD00000 #define FD_ADDRESS (uint32_t)0xE00000
#define ST_ADDRESS_END (uint32_t)0xF00000 #define FD_ADDRESS_END (uint32_t)0xF00000
#define ST_ADDRESS (uint32_t)0xF00000
#define ST_ADDRESS_END (uint32_t)0x1000000
#define SPI_FLASH_END_ADDRESS (uint32_t)0x1000000 #define SPI_FLASH_END_ADDRESS (uint32_t)0x1000000
/* 内部flash分配示意图. /* 内部flash分配示意图.

@ -100,22 +100,16 @@ typedef struct
typedef struct typedef struct
{ {
uint64_t id; uint64_t id;
uint32_t run_time; // 时间, 单位 s. uint32_t run_time; // 时间, 单位 s
int16_t temperature; // 设备温度, 单位: 0.1℃. int16_t temperature; // 设备温度, 单位: 0.1℃
uint16_t vin; // 工作电压, 单位: mv. uint16_t vin; // 工作电压, 单位: mv
uint16_t vbat; // 电池电压, 单位: mv. uint16_t vbat; // 电池电压, 单位: mv
uint16_t vsc; // 超级电容电压, 单位: mv. uint16_t vsc; // 超级电容电压, 单位: mv
uint32_t elec[CFG_ADC_CH_CNT]; // 通道电流有效值 mA. uint16_t defect[4]; // 缺陷电流最大值 mA
uint16_t sen_temp[SENSOR_SUM]; // 传感器温度: 单位: 0.1℃. uint32_t elec[DAU_PORT_POWER_CNT]; // 通道电流有效值 mA
uint16_t sen_x[SENSOR_SUM]; // 传感器震动 x 轴. uint8_t col_flag; // DAU 采集标志位
uint16_t sen_y[SENSOR_SUM]; // 传感器震动 y 轴. uint8_t reserve[3]; // Reserve
uint16_t sen_z[SENSOR_SUM]; // 传感器震动 z 轴. } fd_data_t;
uint8_t energy_mode;
uint8_t sen_short; // 传感器是否短路, 0 没有短路, 1 短路.
uint8_t is_not_updata; // 数据是否上传.
uint8_t reserve[1];
uint8_t sen_valid[SENSOR_SUM]; // 传感器数据是否有效, 0 - 无效, 1 - 有效.
} fd_date_t;
typedef struct typedef struct
{ {
@ -150,9 +144,8 @@ typedef struct
uint8_t wave_up_start; uint8_t wave_up_start;
uint8_t wave_start; uint8_t wave_start;
uint16_t wave_index; uint16_t wave_index;
int16_t wave_min_save; uint32_t addr_reg;
int16_t wave_max_save; uint32_t addr_fault;
int16_t wave_max[WAVE_SUM];
} st_date_t; } st_date_t;
/* Extern global variables ---------------------------------------------------*/ /* Extern global variables ---------------------------------------------------*/
@ -160,6 +153,7 @@ extern uint64_t flash_log_id;
extern uint64_t fd_id; extern uint64_t fd_id;
extern uint64_t position_id; extern uint64_t position_id;
extern uint64_t st_id; extern uint64_t st_id;
extern fd_data_t fd_data;
/* Extern macro --------------------------------------------------------------*/ /* Extern macro --------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */
@ -168,9 +162,9 @@ extern HAL_StatusTypeDef flash_log_read(uint64_t log_id, falsh_log_t *log_data);
extern void flash_log_show(uint32_t num); extern void flash_log_show(uint32_t num);
extern HAL_StatusTypeDef flash_log_clear(void); extern HAL_StatusTypeDef flash_log_clear(void);
extern void flash_log_init(void); extern void flash_log_init(void);
extern HAL_StatusTypeDef fd_write(fd_date_t *data); extern HAL_StatusTypeDef fd_write(fd_data_t *data);
extern HAL_StatusTypeDef fd_modify(uint64_t id, fd_date_t *data); extern HAL_StatusTypeDef fd_modify(uint64_t id, fd_data_t *data);
extern HAL_StatusTypeDef fd_read(uint64_t id, fd_date_t *data); extern HAL_StatusTypeDef fd_read(uint64_t id, fd_data_t *data);
extern HAL_StatusTypeDef fd_clear(void); extern HAL_StatusTypeDef fd_clear(void);
extern void fd_show(uint32_t num); extern void fd_show(uint32_t num);
extern HAL_StatusTypeDef position_write(position_data_t *data); extern HAL_StatusTypeDef position_write(position_data_t *data);

@ -70,18 +70,12 @@ void Error_Handler(void);
/* Private defines -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/
#define POWER_GPS_Pin GPIO_PIN_2 #define POWER_GPS_Pin GPIO_PIN_2
#define POWER_GPS_GPIO_Port GPIOE #define POWER_GPS_GPIO_Port GPIOE
#define POWER_3V3_Pin GPIO_PIN_3
#define POWER_3V3_GPIO_Port GPIOE
#define WDG_Pin GPIO_PIN_0 #define WDG_Pin GPIO_PIN_0
#define WDG_GPIO_Port GPIOF #define WDG_GPIO_Port GPIOF
#define DAU_50HZ_Pin GPIO_PIN_8
#define DAU_50HZ_GPIO_Port GPIOF
#define DAU_RST_Pin GPIO_PIN_9 #define DAU_RST_Pin GPIO_PIN_9
#define DAU_RST_GPIO_Port GPIOF #define DAU_RST_GPIO_Port GPIOF
#define DAU_CS_Pin GPIO_PIN_4 #define DAU_CS_Pin GPIO_PIN_4
#define DAU_CS_GPIO_Port GPIOA #define DAU_CS_GPIO_Port GPIOA
#define CH1_FREQ_Pin GPIO_PIN_1
#define CH1_FREQ_GPIO_Port GPIOG
#define POWER_DAU_Pin GPIO_PIN_11 #define POWER_DAU_Pin GPIO_PIN_11
#define POWER_DAU_GPIO_Port GPIOE #define POWER_DAU_GPIO_Port GPIOE
#define BAT_CHARGE_Pin GPIO_PIN_14 #define BAT_CHARGE_Pin GPIO_PIN_14
@ -98,8 +92,6 @@ void Error_Handler(void);
#define RS485_B_DE_GPIO_Port GPIOD #define RS485_B_DE_GPIO_Port GPIOD
#define GPS_RST_Pin GPIO_PIN_4 #define GPS_RST_Pin GPIO_PIN_4
#define GPS_RST_GPIO_Port GPIOD #define GPS_RST_GPIO_Port GPIOD
#define POWER_RS485_CHECK_Pin GPIO_PIN_7
#define POWER_RS485_CHECK_GPIO_Port GPIOD
#define POWER_RS485_Pin GPIO_PIN_9 #define POWER_RS485_Pin GPIO_PIN_9
#define POWER_RS485_GPIO_Port GPIOG #define POWER_RS485_GPIO_Port GPIOG
#define G4G_RST_Pin GPIO_PIN_10 #define G4G_RST_Pin GPIO_PIN_10
@ -110,8 +102,6 @@ void Error_Handler(void);
#define SPI_FLASH_CS_GPIO_Port GPIOG #define SPI_FLASH_CS_GPIO_Port GPIOG
#define POWER_4G_Pin GPIO_PIN_0 #define POWER_4G_Pin GPIO_PIN_0
#define POWER_4G_GPIO_Port GPIOE #define POWER_4G_GPIO_Port GPIOE
#define POWER_12V_Pin GPIO_PIN_1
#define POWER_12V_GPIO_Port GPIOE
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
extern uint8_t system_init_flag; extern uint8_t system_init_flag;

@ -55,9 +55,9 @@ void DebugMon_Handler(void);
void SysTick_Handler(void); void SysTick_Handler(void);
void DMA1_Channel2_IRQHandler(void); void DMA1_Channel2_IRQHandler(void);
void DMA1_Channel3_IRQHandler(void); void DMA1_Channel3_IRQHandler(void);
void DMA1_Channel6_IRQHandler(void);
void ADC1_2_IRQHandler(void); void ADC1_2_IRQHandler(void);
void SPI1_IRQHandler(void); void SPI1_IRQHandler(void);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void); void USART2_IRQHandler(void);
void USART3_IRQHandler(void); void USART3_IRQHandler(void);
void UART4_IRQHandler(void); void UART4_IRQHandler(void);

@ -46,52 +46,9 @@
#define WL_CRC32_LEN 4 #define WL_CRC32_LEN 4
#define WL_DMA_RX_BUF_LEN 1088 #define WL_DMA_RX_BUF_LEN 1088
#define WL_DMA_TX_BUF_LEN 1088 #define WL_DMA_TX_BUF_LEN 1088
#define WL_CMD_BUF_LEN 2176
#define WL_BUF_LIST_LEN 4 #define WL_BUF_LIST_LEN 4
#define WL_QCCID_LEN 32
#define CSG_PKT_DATA_SUM 60
#define CSG_START_FLAG 0x68
#define CSG_END_FLAG 0x16
#define CSG_HEAD_LEN 10
#define CSG_CRC_LEN 1
#define CSG_OTHER_LEN 12
#define CSG_CONNECT_LEN 2
#define CSG_TIMING_LEN 0
#define CSG_DATA_LEN 26
#define CSG_DATA_FOLLOW_LEN 16
#define CSG_BEAT_LEN 8
#define CSG_SERVER_GET_LEN 12
#define CSG_CONFIG_GET_LEN 21
#define CSG_TIME_GET_LEN 6
#define CSG_ERROR_LEN 2
/* 共有命令字. */
enum CSG_CMD
{
CSG_CONNECT = 0x00, // 开机联络.
CSG_TIMING, // 校时.
CSG_PASSWD_SET, // 设置密码.
CSG_CONFIG_SET, // 主站下发参数配置.
CSG_BEAT = 0x05, // 装置心跳信息.
CSG_SERVER_SET, // 更改主站 IP\端口\卡号.
CSG_SERVER_GET, // 查询主站 IP\端口\卡号.
CSG_RESET, // 装置复位.
CSG_CONFIG_GET = 0x0A, // 查询装置配置.
CSG_TIME_GET = 0x0D, // 查询装置时间.
CSG_DATA_GET = 0x21, // 主站请求装置数据.
CSG_DATA = 0x44 // 接地电流数据.
};
/* 共有命令字. */
enum CSG_DATA_TYPE
{
CSG_DATA_TYPE_NONE = 0x00, // 无请求数据.
CSG_DATA_TYPE_HIS, // 请求历史数据.
CSG_DATA_TYPE_REAL, // 请求实时数据.
};
/* Exported types ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/
/* 无线 buf 数组. */ /* 无线 buf 数组. */
@ -107,108 +64,29 @@ typedef struct
/* 无线 buf 数组. */ /* 无线 buf 数组. */
typedef struct typedef struct
{ {
osThreadId_t handle;
UART_HandleTypeDef *uart;
uint16_t cmd_buf_index; uint16_t cmd_buf_index;
int16_t CSQ; int16_t CSQ;
uint8_t cmd_buf[WL_DMA_RX_BUF_LEN]; char QCCID[WL_QCCID_LEN];
uint8_t csg_buf[WL_DMA_RX_BUF_LEN];
uint8_t dma_rx_buf[WL_DMA_RX_BUF_LEN]; uint8_t dma_rx_buf[WL_DMA_RX_BUF_LEN];
uint8_t cmd_buf[WL_CMD_BUF_LEN];
uint8_t dma_tx_buf[WL_DMA_TX_BUF_LEN]; uint8_t dma_tx_buf[WL_DMA_TX_BUF_LEN];
uint8_t dma_tx_buf_recv[WL_DMA_TX_BUF_LEN];
uint32_t time_send; uint32_t time_send;
uint32_t mul_idx; uint32_t mul_idx;
uint8_t state; uint8_t state;
uint8_t err_cnt;
uint8_t send_cnt; uint8_t send_cnt;
uint16_t wave_index;
uint8_t energy_mode_old;
uint8_t is_update;
uint16_t update_len; uint16_t update_len;
int32_t update_rt; int32_t update_rt;
uint32_t keepalive; uint32_t keepalive;
uint16_t pkt_id; uint16_t pkt_id;
uint8_t err_cnt; uint16_t pkt_id_recv;
uint8_t data_request;
uint32_t time_beat;
} wl_ctrl_t; } wl_ctrl_t;
/* 南网协议头. */ /* Exported macro ------------------------------------------------------------*/
typedef struct
{
uint8_t flag;
uint8_t dev_id[6];
uint8_t cmd;
uint16_t len;
} csg_head_t;
/* 南网协议头. */
typedef struct
{
uint8_t year;
uint8_t mon;
uint8_t day;
uint8_t hour;
uint8_t min;
uint8_t sec;
} csg_time_t;
/* 环流数据. */
typedef struct
{
uint8_t Ciphertext[4];
uint8_t flag; // 帧标识.
uint8_t sum; // 包数
uint8_t time[6]; // 采集时间, 年月日时分秒.
uint16_t Ia; // CH1: A 相接地电流.
uint16_t Ib; // CH2: B 相接地电流.
uint16_t Ic; // CH3: C 相接地电流.
uint16_t ground; // CH4: 总接地电流.
uint16_t rIa; // CH5: 运行电流.
uint16_t rIb;
uint16_t rIc;
} csg_data_t;
/* 环流数据. */
typedef struct
{
uint16_t time; // 采集时间, 与第一包的时间差.
uint16_t Ia; // CH1: A 相接地电流.
uint16_t Ib; // CH2: B 相接地电流.
uint16_t Ic; // CH3: C 相接地电流.
uint16_t ground; // CH4: 总接地电流.
uint16_t rIa; // CH5: 运行电流.
uint16_t rIb;
uint16_t rIc;
} csg_data_follow_t;
typedef struct{
uint8_t time[6]; // 时间, 年月日时分秒.
uint8_t CSQ; // 信号强度.
uint8_t vbat; // 电池电压 实际值乘 10.
} csg_beat_t;
typedef struct{
uint8_t passwd_old[CSG_PASSWD_LEN]; // 原始密码.
uint8_t passwd_new[CSG_PASSWD_LEN]; // 新密码.
} csg_passwd_t;
typedef struct{
uint8_t passwd[CSG_PASSWD_LEN];
uint8_t ip1[4];
uint16_t port1;
uint8_t ip2[4];
uint16_t port2;
uint8_t card1[6];
uint8_t card2[6];
} csg_server_t;
typedef struct{
uint8_t ip[4];
uint16_t port;
uint8_t card[6];
} csg_server_get_t;
/* Exported macro ----tm_structure.tm_sec --------------------------------------------------------*/
/* Extern global variables ---------------------------------------------------*/ /* Extern global variables ---------------------------------------------------*/
extern osThreadId_t WLHandle;
extern wl_buf_list_t wl_buf_list_rx; extern wl_buf_list_t wl_buf_list_rx;
extern wl_ctrl_t wl_ctrl; extern wl_ctrl_t wl_ctrl;

@ -59,7 +59,7 @@ const osThreadAttr_t ADC_attributes =
{ {
.name = "ADC", .name = "ADC",
.stack_size = 160 * 4, .stack_size = 160 * 4,
.priority = (osPriority_t) osPriorityRealtime, .priority = (osPriority_t) osPriorityHigh,
}; };
/* ADC 全局结构体 */ /* ADC 全局结构体 */
@ -225,6 +225,7 @@ static void _ADC_temp_sensor_init(void)
/* 内部 ADC 采样初始化. */ /* 内部 ADC 采样初始化. */
static void _ADC_init(void) static void _ADC_init(void)
{ {
ADC_ctrl.ADCi_adc = &hadc1;
/* 初始化 ADCi 温度传感器的内部校准系数. */ /* 初始化 ADCi 温度传感器的内部校准系数. */
_ADC_temp_sensor_init(); _ADC_temp_sensor_init();
/* 校准 ADCi, 提高 ADCi 精度. */ /* 校准 ADCi, 提高 ADCi 精度. */
@ -235,9 +236,6 @@ static void _ADC_init(void)
/* ADC 采集主任务循环. */ /* ADC 采集主任务循环. */
static void _ADC_start(void *argument) static void _ADC_start(void *argument)
{ {
/* 状态初始化 */
ADC_ctrl.ADCi_adc = &hadc1;
_ADC_init(); _ADC_init();
for (;;) for (;;)

@ -484,10 +484,10 @@ static void _debug_pkt_config_get(void)
data->energy_mode = dev_config.energy_mode; data->energy_mode = dev_config.energy_mode;
for(i = 0; i < SENSOR_SUM; i++) for(i = 0; i < SENSOR_SUM; i++)
{ {
data->sensor_id[i] = dev_config.sensor_id[i]; data->sensor_id[i] = 0;
} }
data->collect_interval = dev_config.collect_interval; data->collect_interval = dev_config.collect_interval;
data->wave_interval = dev_config.wave_interval; data->wave_interval = 12;
data->collect_threshold = dev_config.threshold; data->collect_threshold = dev_config.threshold;
data->wave_threshold = dev_config.wave_threshold; data->wave_threshold = dev_config.wave_threshold;
data->main_cable = dev_config.main_cable; data->main_cable = dev_config.main_cable;
@ -516,7 +516,6 @@ static void _debug_pkt_config_set(void)
uint8_t is_reboot = FALSE; uint8_t is_reboot = FALSE;
uint32_t reset_delay = 2; uint32_t reset_delay = 2;
uint32_t *crc = NULL; uint32_t *crc = NULL;
uint8_t i = 0;
/* 保存数据. */ /* 保存数据. */
if (dev_config.flag != data->flag) if (dev_config.flag != data->flag)
@ -526,12 +525,8 @@ static void _debug_pkt_config_set(void)
} }
dev_config.energy_mode = data->energy_mode; dev_config.energy_mode = data->energy_mode;
for(i = 0; i < SENSOR_SUM; i++)
{
dev_config.sensor_id[i] = data->sensor_id[i];
}
dev_config.collect_interval = data->collect_interval; dev_config.collect_interval = data->collect_interval;
dev_config.wave_interval = data->wave_interval; dev_config.keepalive = data->wave_interval * 60000;
dev_config.threshold = data->collect_threshold; dev_config.threshold = data->collect_threshold;
dev_config.wave_threshold = data->wave_threshold; dev_config.wave_threshold = data->wave_threshold;
dev_config.main_cable = data->main_cable; dev_config.main_cable = data->main_cable;
@ -582,7 +577,7 @@ static void _debug_pkt_adj_get(void)
memcpy(data->ADCBase, dev_config.ADC_base, sizeof(dev_config.ADC_base)); memcpy(data->ADCBase, dev_config.ADC_base, sizeof(dev_config.ADC_base));
data->vin = dev_config.vin; data->vin = dev_config.vin;
data->vin_adj = dev_config.vin_adj; data->vin_adj = dev_config.vin_adj;
memcpy(data->ADC_turns, dev_config.ADC_turns, CFG_ADC_CH_CNT); memcpy(data->ADC_turns, dev_config.ADC_turns, DAU_PORT_POWER_CNT);
/* 计算校验和. */ /* 计算校验和. */
crc = (uint32_t*)(debug_buf.buf + head->len); crc = (uint32_t*)(debug_buf.buf + head->len);
@ -608,7 +603,7 @@ static void _debug_pkt_adj_set(void)
memcpy(dev_config.ADC_base, data->ADCBase, sizeof(dev_config.ADC_base)); memcpy(dev_config.ADC_base, data->ADCBase, sizeof(dev_config.ADC_base));
dev_config.vin = data->vin; dev_config.vin = data->vin;
dev_config.vin_adj = data->vin_adj; dev_config.vin_adj = data->vin_adj;
memcpy(dev_config.ADC_turns, data->ADC_turns, CFG_ADC_CH_CNT); memcpy(dev_config.ADC_turns, data->ADC_turns, DAU_PORT_POWER_CNT);
/* 封装报文头. */ /* 封装报文头. */
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY); _debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
@ -695,7 +690,7 @@ static HAL_StatusTypeDef _debug_adj_source_set(uint8_t ch_bitmap, uint8_t index)
uint8_t turn_num = 10; uint8_t turn_num = 10;
/* 以第一个校准通道的校准点为准. */ /* 以第一个校准通道的校准点为准. */
for(ch = 0; ch < CFG_ADC_CH_CNT; ch++) for(ch = 0; ch < DAU_PORT_POWER_CNT; ch++)
{ {
if (IS_MONITOR_BIT_SET(ch_bitmap, ch)) if (IS_MONITOR_BIT_SET(ch_bitmap, ch))
{ {
@ -703,7 +698,7 @@ static HAL_StatusTypeDef _debug_adj_source_set(uint8_t ch_bitmap, uint8_t index)
} }
} }
/* 没有通道被选择直接退出. */ /* 没有通道被选择直接退出. */
if (CFG_ADC_CH_CNT == ch) if (DAU_PORT_POWER_CNT == ch)
{ {
return HAL_OK; return HAL_OK;
} }
@ -852,7 +847,7 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap)
/* 设置开始操作. */ /* 设置开始操作. */
HAL_E_RETURN(_debug_adj_start()); HAL_E_RETURN(_debug_adj_start());
for(i = 0; i < CFG_ADC_CH_CNT; i++) for(i = 0; i < DAU_PORT_POWER_CNT; i++)
{ {
/* 过滤不需要的通道. */ /* 过滤不需要的通道. */
if (!IS_MONITOR_BIT_SET(bitmap, i) || 0 == dev_config.ADC_ratio[i]) if (!IS_MONITOR_BIT_SET(bitmap, i) || 0 == dev_config.ADC_ratio[i])
@ -862,7 +857,7 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap)
/* 将变比相同的通道归到同一个 bitmap 中. */ /* 将变比相同的通道归到同一个 bitmap 中. */
bitmap_new = 0; bitmap_new = 0;
for (j = i; j < CFG_ADC_CH_CNT; j++) for (j = i; j < DAU_PORT_POWER_CNT; j++)
{ {
if (!IS_MONITOR_BIT_SET(bitmap, j) if (!IS_MONITOR_BIT_SET(bitmap, j)
|| dev_config.ADC_ratio[i] != dev_config.ADC_ratio[j]) || dev_config.ADC_ratio[i] != dev_config.ADC_ratio[j])
@ -875,7 +870,7 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap)
} }
/* 开始自动校准, 注意不同变比的通道不能一起校准. */ /* 开始自动校准, 注意不同变比的通道不能一起校准. */
for (j = 0; j < CFG_ADC_ADJ_CNT; j++) for (j = 0; j < DAU_POWER_ADJ_CNT; j++)
{ {
HAL_E_RETURN(_debug_adj_source_set(bitmap_new, j)); HAL_E_RETURN(_debug_adj_source_set(bitmap_new, j));
//HAL_E_RETURN(ADC_base_auto(bitmap_new, j + 1)); //HAL_E_RETURN(ADC_base_auto(bitmap_new, j + 1));
@ -949,9 +944,9 @@ static void _debug_pkt_data_get(void)
data->vin = ADC_ctrl.ADCi_vin; data->vin = ADC_ctrl.ADCi_vin;
data->vsc = ADC_ctrl.ADCi_vsc; data->vsc = ADC_ctrl.ADCi_vsc;
data->CSQ = wl_ctrl.CSQ; data->CSQ = wl_ctrl.CSQ;
for(i = 0; i < CFG_ADC_CH_CNT; i++) for(i = 0; i < DAU_PORT_POWER_CNT; i++)
{ {
data->elec[i] = ADC_ctrl.ADC_elec[i]; //data->elec[i] = ADC_ctrl.ADC_elec[i];
} }
/* 计算校验和. */ /* 计算校验和. */
@ -969,7 +964,7 @@ static void _debug_pkt_power_fre_get(void)
{ {
proto_head_t *head = (proto_head_t*)debug_buf.buf; proto_head_t *head = (proto_head_t*)debug_buf.buf;
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t)); mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
uint8_t *data = (uint8_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t)); //uint8_t *data = (uint8_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
int32_t data_len = 0; int32_t data_len = 0;
uint32_t *crc = NULL; uint32_t *crc = NULL;
@ -994,7 +989,7 @@ static void _debug_pkt_power_fre_get(void)
if (m_head->len > 0) if (m_head->len > 0)
{ {
memcpy(data, (uint8_t*)(&ADC_ctrl.ADC_value_elec[0][0]) + m_head->index * DEBUG_DATA_SIZE, m_head->len); //memcpy(data, (uint8_t*)(&ADC_ctrl.ADC_value_elec[0][0]) + m_head->index * DEBUG_DATA_SIZE, m_head->len);
} }
/* 计算校验和. */ /* 计算校验和. */
@ -1039,7 +1034,7 @@ static void _debug_pkt_wave_get(void)
if (m_head->len > 0) if (m_head->len > 0)
{ {
addr = WARE_ADDRESS + m_head->index * DEBUG_DATA_SIZE; addr = WARE_FAULT_ADDRESS + m_head->index * DEBUG_DATA_SIZE;
spi_flash_read(addr, debug_flash, DEBUG_DATA_SIZE); spi_flash_read(addr, debug_flash, DEBUG_DATA_SIZE);
wave = (int16_t*)debug_flash; wave = (int16_t*)debug_flash;
@ -1093,13 +1088,9 @@ static void _debug_pkt_dev_state_get(void)
data->wave_force = st_data.wave_force; data->wave_force = st_data.wave_force;
data->wl_state = wl_ctrl.state; data->wl_state = wl_ctrl.state;
data->wl_cnt = wl_ctrl.send_cnt; data->wl_cnt = wl_ctrl.send_cnt;
data->is_wl_update = wl_ctrl.is_update;
data->wl_wave_idx = wl_ctrl.wave_index;
data->force_sleep_up = st_data.force_sleep_up; data->force_sleep_up = st_data.force_sleep_up;
data->is_bat_charge = HAL_GPIO_ReadPin(BAT_CHECK_GPIO_Port, BAT_CHECK_Pin); data->is_bat_charge = HAL_GPIO_ReadPin(BAT_CHECK_GPIO_Port, BAT_CHECK_Pin);
data->wave_adj = dev_config.wave_adj; data->wave_adj = dev_config.wave_adj;
data->wave_min = st_data.wave_min_save;
data->wave_max = st_data.wave_max_save;
data->sys_time = HAL_GetTick() / 1000; data->sys_time = HAL_GetTick() / 1000;
/* 计算校验和. */ /* 计算校验和. */
@ -1118,19 +1109,13 @@ static void _debug_pkt_wave_col(void)
proto_head_t *head = (proto_head_t*)debug_buf.buf; proto_head_t *head = (proto_head_t*)debug_buf.buf;
uint32_t *crc = NULL; uint32_t *crc = NULL;
uint32_t reset_delay = 2; uint32_t reset_delay = 2;
uint8_t i = 0;
st_data.wave_time = 0; st_data.wave_time = 0;
st_data.wave_start = TRUE; st_data.wave_start = TRUE;
st_data.wave_up_start = TRUE; st_data.wave_up_start = TRUE;
st_data.wave_index = 0; st_data.wave_index = 0;
for(i = 0; i < WAVE_SUM; i++)
{
st_data.wave_max[i] = 0;
}
flash_log_write(FLASH_LOG_TYPE_INFO, "Force wavc collect system reset!\r\n"); flash_log_write(FLASH_LOG_TYPE_INFO, "Force wavc collect system reset!\r\n");
st_write(&st_data);
common_sys_set(COM_SYS_RESET, (void*)&reset_delay); common_sys_set(COM_SYS_RESET, (void*)&reset_delay);
/* 封装报文头. */ /* 封装报文头. */
@ -1252,7 +1237,7 @@ static void _debug_pkt_history_data_get(void)
proto_head_t *head = (proto_head_t*)debug_buf.buf; proto_head_t *head = (proto_head_t*)debug_buf.buf;
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t)); mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
uint32_t *data = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t)); uint32_t *data = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
fd_date_t *history = NULL; fd_data_t *history = NULL;
int32_t data_len = 0; int32_t data_len = 0;
uint32_t *crc = NULL; uint32_t *crc = NULL;
uint16_t real_len = 0; uint16_t real_len = 0;
@ -1290,7 +1275,7 @@ static void _debug_pkt_history_data_get(void)
{ {
read_id = data_id - 4 * m_head->index - i; read_id = data_id - 4 * m_head->index - i;
history = (fd_date_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t) + i * FD_BUF_LEN); history = (fd_data_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t) + i * FD_BUF_LEN);
if (fd_read(read_id, history) != HAL_OK) if (fd_read(read_id, history) != HAL_OK)
break; break;
@ -1321,7 +1306,7 @@ static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap, uint8_t index)
uint8_t j = 0; uint8_t j = 0;
/* 参数检查. */ /* 参数检查. */
if (index >= CFG_ADC_ADJ_CNT) if (index >= DAU_POWER_ADJ_CNT)
{ {
vty_print("@E1\r\n"); vty_print("@E1\r\n");
return HAL_ERROR; return HAL_ERROR;
@ -1332,7 +1317,7 @@ static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap, uint8_t index)
return HAL_OK; return HAL_OK;
} }
for(i = 0; i < CFG_ADC_CH_CNT; i++) for(i = 0; i < DAU_PORT_POWER_CNT; i++)
{ {
/* 过滤不需要的通道. */ /* 过滤不需要的通道. */
if (!IS_MONITOR_BIT_SET(bitmap, i) || 0 == dev_config.ADC_ratio[i]) if (!IS_MONITOR_BIT_SET(bitmap, i) || 0 == dev_config.ADC_ratio[i])
@ -1341,7 +1326,7 @@ static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap, uint8_t index)
} }
/* 通道分段点不同, 不能同时校准. */ /* 通道分段点不同, 不能同时校准. */
for (j = i; j < CFG_ADC_CH_CNT; j++) for (j = i; j < DAU_PORT_POWER_CNT; j++)
{ {
if (!IS_MONITOR_BIT_SET(bitmap, j)) if (!IS_MONITOR_BIT_SET(bitmap, j))
{ {
@ -1480,7 +1465,7 @@ static void _debug_pkt_process(void)
/* 共有命令处理. */ /* 共有命令处理. */
switch (head->cmd) switch (head->cmd)
{ {
case DEBUG_C_DEV_INFO: case DEBUG_C_CONTACT:
_debug_pkt_info_get(); _debug_pkt_info_get();
break; break;
case DEBUG_C_DEV_INFO_SET: case DEBUG_C_DEV_INFO_SET:
@ -1513,24 +1498,24 @@ static void _debug_pkt_process(void)
/* 私有命令处理. */ /* 私有命令处理. */
switch (head->cmd) switch (head->cmd)
{ {
case DEBUG_PRV_ADJ_INFO: case DEBUG_PRV_REALDATA:
_debug_pkt_adj_get();
break;
case DEBUG_PRV_REAL_DATA:
_debug_pkt_data_get(); _debug_pkt_data_get();
break; break;
case DEBUG_PRV_POWER_FRE: case DEBUG_PRV_POWER:
_debug_pkt_power_fre_get(); _debug_pkt_power_fre_get();
break; break;
case DEBUG_PRV_DEFECT:
_debug_pkt_wave_get();
break;
case DEBUG_PRV_ADJ_INFO:
_debug_pkt_adj_get();
break;
case DEBUG_PRV_ADJ_INFO_SET: case DEBUG_PRV_ADJ_INFO_SET:
_debug_pkt_adj_set(); _debug_pkt_adj_set();
break; break;
case DEBUG_PRV_ADJ_AUTO: case DEBUG_PRV_ADJ_AUTO:
_debug_pkt_adj_auto(); _debug_pkt_adj_auto();
break; break;
case DEBUG_PRV_WAVE:
_debug_pkt_wave_get();
break;
case DEBUG_PRV_DEV_STATE: case DEBUG_PRV_DEV_STATE:
_debug_pkt_dev_state_get(); _debug_pkt_dev_state_get();
break; break;
@ -1678,6 +1663,7 @@ int32_t debug_app_check(uint32_t addr, uint32_t size, uint8_t file_type)
/* 比较报文头信息 */ /* 比较报文头信息 */
if (crc32_value != pkt_tail->crc32 if (crc32_value != pkt_tail->crc32
|| dev_info.type_m != pkt_tail->dev_type_m || dev_info.type_m != pkt_tail->dev_type_m
|| dev_info.type_s != pkt_tail->dev_type_s
|| pkt_tail->file_type != file_type) || pkt_tail->file_type != file_type)
{ {
goto CRC_CHECK_ERROR; goto CRC_CHECK_ERROR;

@ -155,12 +155,12 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
PB0 ------> ADC1_IN15 PB0 ------> ADC1_IN15
*/ */
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

@ -56,6 +56,7 @@
#include "ADC_collect.h" #include "ADC_collect.h"
#include "RS485_debug.h" #include "RS485_debug.h"
#include "flash_log.h" #include "flash_log.h"
#include "dau.h"
/* Private define ------------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/
/* cli buffer 长度定义. */ /* cli buffer 长度定义. */
@ -117,7 +118,6 @@ static BaseType_t _cli_id(const char *string);
static BaseType_t _cli_password(const char *string); static BaseType_t _cli_password(const char *string);
static BaseType_t _cli_reset(const char *string); static BaseType_t _cli_reset(const char *string);
static BaseType_t _cli_save(const char *string); static BaseType_t _cli_save(const char *string);
static BaseType_t _cli_sen_id(const char *string);
static BaseType_t _cli_show(const char *string); static BaseType_t _cli_show(const char *string);
static BaseType_t _cli_test(const char *string); static BaseType_t _cli_test(const char *string);
static BaseType_t _cli_work_mode(const char *string); static BaseType_t _cli_work_mode(const char *string);
@ -130,8 +130,9 @@ static const char *debug_str[DBG_M_COUNT] =
"4g", "4g",
"sen", "sen",
"dbg", "dbg",
"wave", "dau",
"position" "dau_txrx"
"gps"
}; };
static const CLI_Command_Definition_t cmd_debug = {"debug", _cli_debug, 2}; static const CLI_Command_Definition_t cmd_debug = {"debug", _cli_debug, 2};
#endif #endif
@ -144,7 +145,6 @@ static const CLI_Command_Definition_t cmd_id = {"id", _cli_id, 1};
static const CLI_Command_Definition_t cmd_pw = {"passwd", _cli_password, 1}; static const CLI_Command_Definition_t cmd_pw = {"passwd", _cli_password, 1};
static const CLI_Command_Definition_t cmd_reset = {"reset", _cli_reset, 1}; static const CLI_Command_Definition_t cmd_reset = {"reset", _cli_reset, 1};
static const CLI_Command_Definition_t cmd_save = {"save", _cli_save, 1}; static const CLI_Command_Definition_t cmd_save = {"save", _cli_save, 1};
static const CLI_Command_Definition_t cmd_sen_id = {"sen-id", _cli_sen_id, 8};
static const CLI_Command_Definition_t cmd_show = {"show", _cli_show, 2}; static const CLI_Command_Definition_t cmd_show = {"show", _cli_show, 2};
static const CLI_Command_Definition_t cmd_test = {"test", _cli_test, 1}; static const CLI_Command_Definition_t cmd_test = {"test", _cli_test, 1};
static const CLI_Command_Definition_t cmd_work_mode = {"work-mode", _cli_work_mode, 1}; static const CLI_Command_Definition_t cmd_work_mode = {"work-mode", _cli_work_mode, 1};
@ -533,45 +533,6 @@ BaseType_t _cli_save(const char *string)
return pdFALSE; return pdFALSE;
} }
/* 设置传感器 id. */
static BaseType_t _cli_sen_id(const char *string)
{
const char *param = NULL;
uint8_t param_len = 0;
uint8_t i = 0;
uint32_t id = 0;
for(i = 0; i < SENSOR_SUM; i++)
{
param = FreeRTOS_CLIGetParameter(string, i + 1, (BaseType_t *)&param_len);
if (NULL == param)
{
vty_print(cli_param_erro);
return pdFALSE;
}
if (0 == strncmp(param, "h", param_len))
{
vty_print("sen-id <id1> <id2> <id3> <id4> <id5> <id6> <id7> <id8>\r\n");
vty_print(" Set sensor id.\r\n");
return pdFALSE;
}
else
{
if (sscanf(param, "%d", &id) <= 0)
{
vty_print(cli_param_erro);
return pdFALSE;
}
dev_config.sensor_id[i] = id;
}
}
vty_print(cli_rv_ok);
return pdFALSE;
}
/* 打印版本信息. */ /* 打印版本信息. */
static BaseType_t _cli_show(const char *string) static BaseType_t _cli_show(const char *string)
{ {
@ -603,6 +564,10 @@ static BaseType_t _cli_show(const char *string)
{ {
fd_show(20); fd_show(20);
} }
else if(0 == strncmp(param, "dau", param_len))
{
dau_show();
}
else if(0 == strncmp(param, "info", param_len)) else if(0 == strncmp(param, "info", param_len))
{ {
dev_info_print(); dev_info_print();
@ -621,7 +586,7 @@ static BaseType_t _cli_show(const char *string)
vty_print("BAT charge: %d\r\n", HAL_GPIO_ReadPin(BAT_CHECK_GPIO_Port, BAT_CHECK_Pin)); vty_print("BAT charge: %d\r\n", HAL_GPIO_ReadPin(BAT_CHECK_GPIO_Port, BAT_CHECK_Pin));
vty_print("Collect interval: %d min\r\n", dev_config.collect_interval); vty_print("Collect interval: %d min\r\n", dev_config.collect_interval);
vty_print("Collect threshold: %d A\r\n", dev_config.threshold); vty_print("Collect threshold: %d A\r\n", dev_config.threshold);
vty_print("Wave interval: %d hour\r\n", dev_config.wave_interval); vty_print("Wave interval: %d hour\r\n", dev_config.keepalive);
vty_print("Wave threshold: %d mV\r\n", dev_config.wave_threshold); vty_print("Wave threshold: %d mV\r\n", dev_config.wave_threshold);
vty_print("Mian cable: %d\r\n", dev_config.main_cable); vty_print("Mian cable: %d\r\n", dev_config.main_cable);
vty_print("Voltage col: %d\r\n", dev_config.is_voltage_col); vty_print("Voltage col: %d\r\n", dev_config.is_voltage_col);
@ -670,21 +635,6 @@ static BaseType_t _cli_test(const char *string)
//flash_log_write(FLASH_LOG_TYPE_NOTIFY, "test%d\r\n", 3); //flash_log_write(FLASH_LOG_TYPE_NOTIFY, "test%d\r\n", 3);
//flash_log_write(FLASH_LOG_TYPE_INFO, "test%d\r\n", 4); //flash_log_write(FLASH_LOG_TYPE_INFO, "test%d\r\n", 4);
#if 1
uint8_t i = 0;
st_data.wave_time = 0;
st_data.wave_start = TRUE;
st_data.wave_up_start = TRUE;
st_data.wave_index = 0;
for(i = 0; i < WAVE_SUM; i++)
{
st_data.wave_max[i] = 0;
}
st_write(&st_data);
uint32_t reset_delay = 2;
common_sys_set(COM_SYS_RESET, (void*)&reset_delay);
#endif
vty_print(cli_rv_ok); vty_print(cli_rv_ok);
return pdFALSE; return pdFALSE;
} }
@ -859,7 +809,6 @@ static void _cli_start(void)
FreeRTOS_CLIRegisterCommand(&cmd_pw, CLI_NODE_CONFIG); FreeRTOS_CLIRegisterCommand(&cmd_pw, CLI_NODE_CONFIG);
FreeRTOS_CLIRegisterCommand(&cmd_reset, CLI_NODE_CONFIG); FreeRTOS_CLIRegisterCommand(&cmd_reset, CLI_NODE_CONFIG);
FreeRTOS_CLIRegisterCommand(&cmd_save, CLI_NODE_CONFIG); FreeRTOS_CLIRegisterCommand(&cmd_save, CLI_NODE_CONFIG);
FreeRTOS_CLIRegisterCommand(&cmd_sen_id, CLI_NODE_CONFIG);
FreeRTOS_CLIRegisterCommand(&cmd_show, CLI_NODE_COMMON); FreeRTOS_CLIRegisterCommand(&cmd_show, CLI_NODE_COMMON);
FreeRTOS_CLIRegisterCommand(&cmd_test, CLI_NODE_COMMON); FreeRTOS_CLIRegisterCommand(&cmd_test, CLI_NODE_COMMON);
FreeRTOS_CLIRegisterCommand(&cmd_work_mode, CLI_NODE_CONFIG); FreeRTOS_CLIRegisterCommand(&cmd_work_mode, CLI_NODE_CONFIG);
@ -910,22 +859,23 @@ void cli_start(void const * argument)
/* 配置系统初始化. */ /* 配置系统初始化. */
dev_config_init(); dev_config_init();
dev_config_flag_set(DEV_FLAG_CLI); dev_config_flag_set(DEV_FLAG_CLI);
dev_config.keepalive = 300000;
flash_log_init(); flash_log_init();
st_init(); st_init();
/* 公共监控任务初始化. */ /* 公共监控任务初始化. */
common_sys_init(); common_sys_init();
/* 默认开启的 debug. */ /* 默认开启的 debug. */
//dbg_cmd_hander(DBG_CMD_ON, DBG_M_4G); //dbg_cmd_hander(DBG_CMD_ON, DBG_M_DAU);
//dbg_cmd_hander(DBG_CMD_ON, DBG_M_RS485_SEN); dbg_cmd_hander(DBG_CMD_ON, DBG_M_4G);
//dbg_cmd_hander(DBG_CMD_ON, DBG_M_WAVE);
/* 初始化 ADC 采样任务. */ /* 初始化 ADC 采样任务. */
ADC_init(); ADC_init();
/* 初始化 DAU 任务. */
dau_init();
/* 初始化无线通讯任务. */
if (!IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ) if (!IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ)
&& !IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_FACTORY)) && !IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_FACTORY))
{ {
/* 4G 通讯任务.*/ wl_init();
//wl_init();
} }
/* 在这个标志置位前vty_print是原地循环等待,置位后变为任务调度. */ /* 在这个标志置位前vty_print是原地循环等待,置位后变为任务调度. */
@ -941,8 +891,7 @@ void cli_start(void const * argument)
else else
{ {
/* 使用 PC 调试软件调试. */ /* 使用 PC 调试软件调试. */
//debug_start(); debug_start();
_cli_start();
} }
} }

@ -73,7 +73,7 @@ typedef struct
const osThreadAttr_t COMMON_SYS_attributes = { const osThreadAttr_t COMMON_SYS_attributes = {
.name = "COMMON_SYS", .name = "COMMON_SYS",
.stack_size = 128 * 4, .stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityAboveNormal, .priority = (osPriority_t) osPriorityLow,
}; };
static common_sys_data_t common_sys_data; static common_sys_data_t common_sys_data;
static RTC_DateTypeDef common_date; static RTC_DateTypeDef common_date;
@ -128,6 +128,7 @@ static void _common_sys_handle(void)
{ {
if (0 == common_sys_data.reset_delay) if (0 == common_sys_data.reset_delay)
{ {
st_write(&st_data);
HAL_NVIC_SystemReset(); HAL_NVIC_SystemReset();
} }
else else
@ -136,6 +137,7 @@ static void _common_sys_handle(void)
if (bit_list_tst(common_sys_data.flag, COM_SYS_SHUTDOWN)) if (bit_list_tst(common_sys_data.flag, COM_SYS_SHUTDOWN))
{ {
bit_list_clr(common_sys_data.flag, COM_SYS_SHUTDOWN); bit_list_clr(common_sys_data.flag, COM_SYS_SHUTDOWN);
st_write(&st_data);
system_shtudown(common_sys_data.reset_delay); system_shtudown(common_sys_data.reset_delay);
} }
} }
@ -166,7 +168,7 @@ static void _common_sys_start(void *argument)
HAL_GPIO_WritePin(WDG_GPIO_Port, WDG_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(WDG_GPIO_Port, WDG_Pin, GPIO_PIN_SET);
osDelay(1); osDelay(1);
HAL_GPIO_WritePin(WDG_GPIO_Port, WDG_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(WDG_GPIO_Port, WDG_Pin, GPIO_PIN_RESET);
vty_print("WDG\r\n"); vty_print("WDG %d\r\n", HAL_GetTick());
} }
count++; count++;
@ -530,7 +532,7 @@ int32_t common_watchdog_tst(uint32_t id)
/* 查询看门狗标记.0-没有置位,1-置位. */ /* 查询看门狗标记.0-没有置位,1-置位. */
int32_t common_watchdog_tst_all(void) int32_t common_watchdog_tst_all(void)
{ {
uint32_t temp = COM_WDG_COM | COM_WDG_ADC | COM_WDG_CLI | COM_WDG_WIR; uint32_t temp = COM_WDG_COM | COM_WDG_ADC | COM_WDG_CLI | COM_WDG_DAU | COM_WDG_GPS;
return ((common_watchdog & temp) == temp); return ((common_watchdog & temp) == temp);
} }
@ -556,7 +558,7 @@ uint32_t abs_cal_u(uint32_t a, uint32_t b)
void rtc_time_set(uint32_t utc) void rtc_time_set(uint32_t utc)
{ {
utc += 8 * 3600; utc += 8 * 3600;
struct tm *day = localtime(&utc); struct tm *day = NULL;
time_t temp = 0; time_t temp = 0;
HAL_RTC_GetTime(&hrtc, &time_structure, RTC_FORMAT_BIN); HAL_RTC_GetTime(&hrtc, &time_structure, RTC_FORMAT_BIN);
@ -569,12 +571,13 @@ void rtc_time_set(uint32_t utc)
tm_structure.tm_sec = time_structure.Seconds; tm_structure.tm_sec = time_structure.Seconds;
temp = mktime(&tm_structure); temp = mktime(&tm_structure);
if (abs_cal_u(temp, utc) >= 10) if (abs_cal_u(temp, utc) > 1)
{ {
vty_print("%ld %d\r\n", temp, utc); //vty_print("%ld %d\r\n", temp, utc);
memset(&time_structure,0,sizeof(RTC_TimeTypeDef)); memset(&time_structure,0,sizeof(RTC_TimeTypeDef));
memset(&date_structure,0,sizeof(RTC_DateTypeDef)); memset(&date_structure,0,sizeof(RTC_DateTypeDef));
day = localtime(&utc);
time_structure.Hours = day->tm_hour; time_structure.Hours = day->tm_hour;
time_structure.Minutes = day->tm_min; time_structure.Minutes = day->tm_min;
time_structure.Seconds = day->tm_sec; time_structure.Seconds = day->tm_sec;
@ -587,9 +590,9 @@ void rtc_time_set(uint32_t utc)
date_structure.Month = day->tm_mon + 1; date_structure.Month = day->tm_mon + 1;
date_structure.Date = day->tm_mday; date_structure.Date = day->tm_mday;
HAL_RTC_SetDate(&hrtc, &date_structure, RTC_FORMAT_BIN); HAL_RTC_SetDate(&hrtc, &date_structure, RTC_FORMAT_BIN);
vty_print("Set date to %d/%d/%d %d:%d:%d.\r\n", date_structure.Year, date_structure.Month, date_structure.Date,
time_structure.Hours, time_structure.Minutes, time_structure.Seconds);
} }
vty_print("%d/%d/%d %d:%d:%d\r\n", date_structure.Year, date_structure.Month, date_structure.Date,
time_structure.Hours, time_structure.Minutes, time_structure.Seconds);
} }
void restart_ontime(void) void restart_ontime(void)

@ -0,0 +1,960 @@
/******************************************************************************
* file Core/Src/dau.c
* author YuLiang
* version 1.0.0
* date 15-Aug-2024
* brief This file provides all the DAU related operation functions.
******************************************************************************
* Attention
*
* <h2><center>&copy; COPYRIGHT(c) 2024 LandPower</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of WTOE nor the names of its contributors may be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "time.h"
#include "math.h"
#include "spi.h"
#include "usart.h"
#include "common.h"
#include "dev_config.h"
#include "flash_if.h"
#include "flash_log.h"
#include "ADC_collect.h"
#include "dau.h"
/* Private define ------------------------------------------------------------*/
#define DAU_WAVE_WAIT_MAX 5 // DAU 波形等待次数
/* 全局状态寄存器地址 -------------------------------- */
#define DAU_REG_ADDR_GSCR 0x0000 // 全局状态寄存器 - 软件特征寄存器
#define DAU_REG_ADDR_GSVR 0x0001 // 全局状态寄存器 - 软件版本寄存器
#define DAU_REG_ADDR_GSR 0x0002 // 全局状态寄存器 - 状态寄存器
#define DAU_REG_ADDR_GFTR 0x0003 // 全局状态寄存器 - 故障触发录波状态寄存器
#define DAU_REG_ADDR_GFTUR 0x0004 // 全局状态寄存器 - 故障触发 UTC 时间点寄存器
#define DAU_REG_ADDR_GFTNR 0x0006 // 全局状态寄存器 - 故障触发 ns 时间点寄存器
#define DAU_REG_ADDR_GRTR 0x0008 // 全局状态寄存器 - 寄存器触发录波状态寄存器
#define DAU_REG_ADDR_GUR 0x000a // 全局状态寄存器 - UTC 寄存器
#define DAU_REG_ADDR_GNR 0x000c // 全局状态寄存器 - ns 寄存器
/* 全局状态寄存器 - 状态寄存器 bit mask */
#define DAU_GSR_FLASH_Pos (2) // spi flash 空闲状态
#define DAU_GSR_FLASH_Msk (0x1 << DAU_GSR_FLASH_Pos) /*!< 0x0004 */
/* 全局状态寄存器 - 故障触发录波状态寄存器 bit mask */
#define DAU_GFTR_POWER_WAVE_Pos (3) // 故障触发工频电流波形状态
#define DAU_GFTR_POWER_WAVE_Msk (0x1 << DAU_GFTR_POWER_WAVE_Pos) /*!< 0x0008 */
#define DAU_GFTR_DEFECT_WAVE_Pos (2) // 故障触发缺陷电流波形状态
#define DAU_GFTR_DEFECT_WAVE_Msk (0x1 << DAU_GFTR_DEFECT_WAVE_Pos) /*!< 0x0004 */
#define DAU_GFTR_FAULT_WAVE_Pos (1) // 故障电流波形状态
#define DAU_GFTR_FAULT_WAVE_Msk (0x1 << DAU_GFTR_FAULT_WAVE_Pos) /*!< 0x0002 */
#define DAU_GFTR_FAULT_Pos (0) // 故障触发录波完成状态
#define DAU_GFTR_FAULT_Msk (0x1 << DAU_GFTR_FAULT_Pos) /*!< 0x0001 */
/* 全局状态寄存器 - 寄存器触发录波状态寄存器 bit mask */
#define DAU_GRTR_POWER_WAVE_Pos (3) // 寄存器触发工频电流波形状态
#define DAU_GRTR_POWER_WAVE_Msk (0x1 << DAU_GRTR_POWER_WAVE_Pos) /*!< 0x0008 */
#define DAU_GRTR_DEFECT_WAVE_Pos (2) // 寄存器触发缺陷电流波形状态
#define DAU_GRTR_DEFECT_WAVE_Msk (0x1 << DAU_GRTR_DEFECT_WAVE_Pos) /*!< 0x0004 */
#define DAU_GRTR_COMPLETE_Pos (0) // 寄存器触发录波完成状态
#define DAU_GRTR_COMPLETE_Msk (0x1 << DAU_GRTR_COMPLETE_Pos) /*!< 0x0001 */
/* 全局控制寄存器地址 -------------------------------- */
#define DAU_REG_ADDR_GCFTR 0x0203 // 全局控制寄存器 - 故障触发录波控制寄存器
#define DAU_REG_ADDR_GCRTR 0x0204 // 全局控制寄存器 - 寄存器触发录波控制寄存器
#define DAU_REG_ADDR_GCUR 0x0205 // 全局控制寄存器 - UTC 配置寄存器
/* 全局控制寄存器 - 故障触发录波控制寄存器 bit mask */
#define DAU_GCFTR_PORT_Pos (4) // 故障触发波形端口
#define DAU_GCFTR_PORT_Msk (0x7 << DAU_GCFTR_PORT_Pos) /*!< 0x0070 */
#define DAU_GCFTR_POWER_WAVE_Pos (3) // 故障触发波形端口
#define DAU_GCFTR_POWER_WAVE_Msk (0x1 << DAU_GCFTR_POWER_WAVE_Pos) /*!< 0x0008 */
#define DAU_GCFTR_DEFECT_WAVE_Pos (2) // 故障触发缺陷电流波形读取
#define DAU_GCFTR_DEFECT_WAVE_Msk (0x1 << DAU_GCFTR_DEFECT_WAVE_Pos) /*!< 0x0004 */
#define DAU_GCFTR_FAULT_WAVE_Pos (1) // 故障电流波形读取
#define DAU_GCFTR_FAULT_WAVE_Msk (0x1 << DAU_GCFTR_FAULT_WAVE_Pos) /*!< 0x0002 */
/* 全局控制寄存器 - 寄存器触发录波控制寄存器 bit mask */
#define DAU_GCRTR_PORT_Pos (4) // 寄存器触发波形端口
#define DAU_GCRTR_PORT_Msk (0x7 << DAU_GCRTR_PORT_Pos) /*!< 0x0070 */
#define DAU_GCRTR_POWER_WAVE_Pos (3) // 寄存器触发工频电流波形读取
#define DAU_GCRTR_POWER_WAVE_Msk (0x1 << DAU_GCRTR_POWER_WAVE_Pos) /*!< 0x0008 */
#define DAU_GCRTR_DEFECT_WAVE_Pos (2) // 寄存器触发缺陷电流波形读取
#define DAU_GCRTR_DEFECT_WAVE_Msk (0x1 << DAU_GCRTR_DEFECT_WAVE_Pos) /*!< 0x0004 */
#define DAU_GCRTR_START_WAVE_Pos (0) // 录波控制
#define DAU_GCRTR_START_WAVE_Msk (0x1 << DAU_GCRTR_START_WAVE_Pos) /*!< 0x0001 */
/* 通道状态寄存器地址 -------------------------------- */
#define DAU_REG_ADDR_PMSR 0x0300 // 通道状态寄存器 - 缺陷电流通道周波原始采样值的平均值寄存器
#define DAU_REG_ADDR_PPWR 0x03b0 // 通道状态寄存器 - 工频电流通道录波数据寄存器
#define DAU_REG_ADDR_PDWR 0x03c0 // 通道状态寄存器 - 缺陷电流通道录波数据寄存器
#define DAU_REG_ADDR_PFWR 0x03d0 // 通道状态寄存器 - 故障电流通道录波数据寄存器
#define DAU_ID 0x0702 // DAU 软件识别码
/* Private typedef -----------------------------------------------------------*/
/* 波形触发源 */
typedef enum
{
DAU_SOURCE_FAULT = 0,
DAU_SOURCE_REG,
DAU_SOURCE_CNT,
} DAU_SOURCE_E;
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* DAU 任务参数 */
const osThreadAttr_t dau_attributes =
{
.name = "DAU",
.stack_size = 160 * 4,
.priority = (osPriority_t) osPriorityRealtime,
};
const osThreadAttr_t dau_gps_attributes =
{
.name = "GPS",
.stack_size = 160 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
/* DAU 全局结构体 */
dau_ctrl_t dau_ctrl;
static struct tm _dau_tm;
/* Private function prototypes -----------------------------------------------*/
/* Internal functions --------------------------------------------------------*/
/* description: DAU 写寄存器报文发送
param: addr --
len --
return: HAL_xxx */
int32_t _dau_reg_write(uint16_t addr, uint16_t len)
{
uint8_t *pkt_tx = dau_ctrl.buf_dau_tx;
uint8_t *pkt_rx = dau_ctrl.buf_dau_rx;
uint32_t notify_value = 0xff;
int32_t rv = 0;
/* 发送数据. */
/* 组装报文, 报文头是大端模式 */
pkt_tx[0] = (addr >> 8) & 0x7f; // 最高位为 0 表示读
pkt_tx[1] = addr & 0x00ff;
len +=2;
/* 调试打印报文 */
DBG(DBG_M_DAU_TXRX, "DAU write send(%d):\r\n", len);
if (dbg_stat_get(DBG_M_DAU_TXRX))
{
buf_print(pkt_tx, len > 16 ? 16 : len);
}
/* 发送数据. */
DAU_CS_ENABLE();
rv = HAL_SPI_TransmitReceive_DMA(dau_ctrl.spi, pkt_tx, pkt_rx, len);
if (rv != HAL_OK)
{
DBG(DBG_M_DAU, "DAU spi read err %d\r\n", rv);
return rv;
}
/* 等待收包完成. */
notify_value = ulTaskNotifyTake(pdTRUE, 1000);
if (0 == notify_value)
{
/* 收包超时 */
DAU_CS_DISABLE();
DBG(DBG_M_DAU, "DAU spi read timeout\r\n");
return HAL_TIMEOUT;
}
return HAL_OK;
}
/* description: DAU 读取寄存器报文发送
param: addr --
len --
return: HAL_xxx */
int32_t _dau_reg_read(uint16_t addr, uint16_t len)
{
uint8_t *pkt_tx = dau_ctrl.buf_dau_tx;
uint8_t *pkt_rx = dau_ctrl.buf_dau_rx;
uint32_t notify_value = 0xff;
int32_t rv = 0;
/* 发送数据. */
/* 组装报文, 报文头是大端模式 */
pkt_tx[0] = (addr >> 8) | 0x80; // 最高位为 1 表示读
pkt_tx[1] = addr & 0x00ff;
/* 调试打印报文 */
DBG(DBG_M_DAU_TXRX, "DAU read send:\r\n");
if (dbg_stat_get(DBG_M_DAU_TXRX))
{
buf_print(pkt_tx, 2);
}
/* 发送数据. */
DAU_CS_ENABLE();
rv = HAL_SPI_TransmitReceive_DMA(dau_ctrl.spi, pkt_tx, pkt_rx, len + 2);
if (rv != HAL_OK)
{
DAU_CS_DISABLE();
DBG(DBG_M_DAU, "DAU spi read err %d\r\n", rv);
return rv;
}
/* 等待收包完成. */
notify_value = ulTaskNotifyTake(pdTRUE, 1000);
if (0 == notify_value)
{
/* 收包超时 */
DBG(DBG_M_DAU, "DAU spi read timeout\r\n");
return HAL_TIMEOUT;
}
/* 调试打印报文. */
DBG(DBG_M_DAU_TXRX, "DAU read recv(%d):\r\n", len);
if (dbg_stat_get(DBG_M_DAU_TXRX))
{
buf_print(pkt_rx + 2, len > 16 ? 16 : len);
vty_print("\r\n");
}
return HAL_OK;
}
/* description: DAU 读取全局状态寄存器报文发送
param:
return: HAL_xxx */
int32_t _dau_reg_read_global_state(void)
{
dau_reg_global_t *p = (dau_reg_global_t*)(dau_ctrl.buf_dau_rx + 2);
int32_t rv = HAL_ERROR;
/* 读取全局寄存器 */
rv = _dau_reg_read(DAU_REG_ADDR_GSCR, sizeof(dau_reg_global_t));
if (rv != HAL_OK)
{
return rv;
}
if (p->GSCR != DAU_ID)
{
DBG(DBG_M_DAU, "DAU read 0x0 data %x err\r\n", p->GSCR);
return HAL_ERROR;
}
memcpy(&dau_ctrl.reg_global, p, sizeof(dau_reg_global_t));
return rv;
}
/* description: DAU 读取端口状态寄存器报文发送
param:
return: HAL_xxx */
int32_t _dau_reg_read_port_state(void)
{
int32_t rv = HAL_ERROR;
/* 读取全局寄存器 */
rv = _dau_reg_read(DAU_REG_ADDR_PMSR, sizeof(dau_port_state_reg_t));
if (rv != HAL_OK)
{
return rv;
}
memcpy(&dau_ctrl.reg_port_state, dau_ctrl.buf_dau_rx + 2, sizeof(dau_port_state_reg_t));
return rv;
}
/* description: DAU 历史数据保存
param:
return: */
static void _dau_data_save(void)
{
uint8_t i = 0;
/* 装填数据. */
fd_data.temperature = ADC_ctrl.ADCi_temp;
fd_data.vbat = ADC_ctrl.ADCi_vbat;
fd_data.vin = ADC_ctrl.ADCi_vin;
fd_data.vsc = ADC_ctrl.ADCi_vsc;
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
{
fd_data.defect[i] = dau_ctrl.reg_port_state.MAX[i];
}
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
{
fd_data.elec[i] = dau_ctrl.reg_elec[i];
}
fd_data.col_flag = dau_ctrl.col_flag;
fd_write(&fd_data);
}
/* description: DAU UTC 对时处理
param:
return: */
void _dau_utc(void)
{
uint32_t *utc = (uint32_t*)&dau_ctrl.buf_dau_tx[2];
/* dau 主循环大概 250ms 运行一次, 在第 3 次循环 (500 ~ 750ms) 对时, 此时 GPS 对时一定是可用的 */
if (500000000 < dau_ctrl.reg_global.GNR && dau_ctrl.reg_global.GNR <= 750000000
&& dau_ctrl.is_utc_valid
&& dau_ctrl.reg_global.GUR != dau_ctrl.utc)
{
*utc = dau_ctrl.utc;
_dau_reg_write(DAU_REG_ADDR_GCUR, sizeof(uint32_t));
}
}
/* description: 寄存器触发波形采集开始
param:
return: HAL_xxx */
int32_t _dau_wave_col_start(void)
{
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
uint8_t i = 0;
int32_t rv = HAL_ERROR;
/* 请求录波 */
*reg = DAU_GCRTR_START_WAVE_Msk;
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCRTR, sizeof(uint16_t)));
/* 等待录波完成 */
while(1)
{
if (i >= DAU_WAVE_WAIT_MAX)
{
DBG(DBG_M_DAU, "DAU wave err\r\n", rv);
return HAL_TIMEOUT;
}
osDelay(100);
E_RETURN(_dau_reg_read_global_state());
if ((dau_ctrl.reg_global.GRTR & DAU_GRTR_COMPLETE_Msk) >> DAU_GRTR_COMPLETE_Pos)
{
break;
}
i++;
}
return rv;
}
/* description: 故障波形采集
param:
return: HAL_xxx */
int32_t _dau_wave_col_fault(void)
{
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
uint8_t i = 0;
uint8_t j = 0;
uint32_t addr = 0;
int32_t rv = HAL_ERROR;
/* 读取触发电流值 */
E_RETURN(_dau_reg_read_port_state());
/* 数据地址应该是被擦除过的地址 (当前地址向前偏移 128k). */
addr = dau_ctrl.addr_fault;
/* 读取故障数据 */
for(i = 0; i < DAU_PORT_FAULT_CNT; i++)
{
dau_ctrl.fault_trig[i] = dau_ctrl.reg_port_state.FAULT[i];
/* 请求读取故障波形 */
*reg = DAU_GCFTR_FAULT_WAVE_Msk | (i << DAU_GCFTR_PORT_Pos);
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCFTR, sizeof(uint16_t)));
/* 等待 DAU 准备故障数据 */
while(1)
{
if (j >= DAU_WAVE_WAIT_MAX)
{
DBG(DBG_M_DAU, "DAU fault wave err\r\n", rv);
return HAL_TIMEOUT;
}
osDelay(10);
E_RETURN(_dau_reg_read_global_state());
if ((dau_ctrl.reg_global.GFTR & DAU_GFTR_FAULT_WAVE_Msk) >> DAU_GFTR_FAULT_WAVE_Pos)
{
break;
}
j++;
}
for(j = 0; j < DAU_PKT_FAULT_CNT; j++)
{
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PFWR + i, DAU_PKT_FAULT_BYTE_CNT));
E_RETURN(spi_flash_write(addr, &dau_ctrl.buf_dau_rx[2], DAU_PKT_FAULT_BYTE_CNT));
addr += DAU_PKT_FAULT_BYTE_CNT;
}
}
return rv;
}
/* description: 缺陷波形采集
param:
return: HAL_xxx */
int32_t _dau_wave_col_defect(void)
{
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
uint8_t i = 0;
uint8_t j = 0;
uint8_t is_exceed = FALSE;
uint32_t addr = 0;
int32_t rv = HAL_ERROR;
/* 比较缺陷波形是否超过阈值 */
E_RETURN(_dau_reg_read_port_state());
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
{
dau_ctrl.reg_defect_max[i] = dau_ctrl.reg_port_state.MAX[i];
if (dau_ctrl.reg_port_state.MAX[i] > dev_config.wave_threshold)
{
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
is_exceed = TRUE;
}
}
/* 没有超过阈值直接返回 */
if (is_exceed)
{
MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
return rv;
}
/* 擦除 flash */
addr = dau_ctrl.addr_reg;
for(i = 0; i < 2; i++)
{
E_RETURN(spi_flash_erase(addr, SPI_CMD_BLOCK64_ERASE));
addr += SPI_FLASH_BLOCK64_SIZE;
}
/* 数据地址应该是被擦除过的地址 (当前地址向前偏移 128k). */
addr = dau_ctrl.addr_reg;
/* 读取缺陷数据 */
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
{
/* 请求读取缺陷波形 */
*reg = DAU_GCRTR_DEFECT_WAVE_Msk | (i << DAU_GCRTR_PORT_Pos);
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCRTR, sizeof(uint16_t)));
/* 等待 DAU 准备缺陷数据 */
while(1)
{
if (j >= DAU_WAVE_WAIT_MAX)
{
DBG(DBG_M_DAU, "DAU defect wave err\r\n", rv);
return HAL_TIMEOUT;
}
osDelay(10);
E_RETURN(_dau_reg_read_global_state());
if ((dau_ctrl.reg_global.GRTR & DAU_GRTR_DEFECT_WAVE_Msk) >> DAU_GRTR_DEFECT_WAVE_Pos)
{
break;
}
j++;
}
for(j = 0; j < DAU_PKT_DEFECT_CNT; j++)
{
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PDWR + i, DAU_PKT_DEFECT_BYTE_CNT));
E_RETURN(spi_flash_write(addr, &dau_ctrl.buf_dau_rx[2], DAU_PKT_DEFECT_BYTE_CNT));
addr += DAU_PKT_DEFECT_BYTE_CNT;
}
}
return rv;
}
/* description: 工频波形采集
param: flag - DAU_COL_FLAG_E
return: HAL_xxx */
int32_t _dau_wave_col_power(DAU_SOURCE_E source)
{
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
int16_t *power = NULL;
uint8_t i = 0;
uint8_t j = 0;
int32_t rv = HAL_ERROR;
/* 读取工频数据 */
for(i = 0; i < DAU_PORT_POWER_CNT; i++)
{
/* 请求读取工频波形 */
if (DAU_SOURCE_FAULT == source)
{
*reg = DAU_GCFTR_POWER_WAVE_Msk | (i << DAU_GCFTR_PORT_Pos);
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCFTR, sizeof(uint16_t)));
}
else
{
*reg = DAU_GCRTR_POWER_WAVE_Msk | (i << DAU_GCRTR_PORT_Pos);
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCRTR, sizeof(uint16_t)));
}
/* 等待 DAU 准备工频数据 */
while(1)
{
if (j >= DAU_WAVE_WAIT_MAX)
{
DBG(DBG_M_DAU, "DAU power wave err\r\n", rv);
return HAL_TIMEOUT;
}
osDelay(10);
E_RETURN(_dau_reg_read_global_state());
if (DAU_SOURCE_FAULT == source)
{
if ((dau_ctrl.reg_global.GFTR & DAU_GFTR_POWER_WAVE_Msk) >> DAU_GFTR_POWER_WAVE_Pos)
{
break;
}
}
else
{
if ((dau_ctrl.reg_global.GRTR & DAU_GRTR_POWER_WAVE_Msk) >> DAU_GRTR_POWER_WAVE_Pos)
{
break;
}
}
j++;
}
/* 选择存储位置, 读取数据 */
power = (DAU_SOURCE_FAULT == source) ? dau_ctrl.fault_power[i] : dau_ctrl.reg_power[i];
for(j = 0; j < DAU_PKT_POWER_CNT; j++)
{
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PPWR + i, DAU_PKT_POWER_BYTE_CNT));
memcpy(power, &dau_ctrl.buf_dau_rx[2], DAU_PKT_POWER_BYTE_CNT);
power += DAU_PKT_POWER_BYTE_CNT >> 1;
}
}
return rv;
}
/* description: DAU 工频电流计算
param:
return: */
void _dau_power_calculate(DAU_SOURCE_E source)
{
int16_t (*val)[DAU_POWER_DATE_LEN] = (DAU_SOURCE_FAULT == source) ? dau_ctrl.fault_power : dau_ctrl.reg_power;
uint32_t *power = (DAU_SOURCE_FAULT == source) ? dau_ctrl.fault_elec : dau_ctrl.reg_elec;
uint8_t ch = 0;
uint8_t adj = 0;
uint16_t i = 0;
uint64_t square_sum = 0;
int32_t mean_sum = 0;
float temp = 0;
/* 遍历通道, 计算有效值 */
for(ch = 0; ch < DAU_PORT_POWER_CNT; ch++)
{
square_sum = 0;
mean_sum = 0;
/* 遍历通道所有值, 求和, 并计算出最大值和最小值. */
for(i = 0; i < DAU_POWER_DATE_LEN; i++)
{
square_sum += val[ch][i] * val[ch][i];
mean_sum += val[ch][i];
}
/* 根据数据查找数据落在哪个分段点上. */
temp = (double)sqrt(square_sum / DAU_POWER_DATE_LEN) - abs(mean_sum / DAU_POWER_DATE_LEN);
for(adj = 0; adj < DAU_POWER_ADJ_CNT - 1; adj++)
{
if (temp <= dev_config.ADC_base[ch][adj])
{
break;
}
}
/* 根据分段点计算有效值. */
if (0 == adj)
{
power[ch] = (uint32_t)(temp * dev_config.ADC_adj[ch][adj] * dev_config.ADC_ratio[ch] * 1.414/ 32768);
}
else
{
power[ch] = (uint32_t)((temp - dev_config.ADC_base[ch][adj - 1]) * dev_config.ADC_adj[ch][adj] * dev_config.ADC_ratio[ch] * 1.414 / 32768 + dev_config.ADC_base_elec[ch][adj - 1]);
}
}
if (DAU_SOURCE_REG == source)
{
/* 固定前 4 个通道是接地电流, 判断接地电流有没有突变 */
for(ch = 0; ch < DAU_PORT_GROUND_CNT; ch++)
{
/* 判断工频录波上传阈值 */
if (abs_cal_u(power[ch], fd_data.elec[ch]) >= (uint32_t)dev_config.threshold * 1000)
{
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_POWER);
break;
}
}
if (DAU_PORT_GROUND_CNT == ch)
{
MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_POWER);
return;
}
}
/* 计算工频录波每个点的电流值 */
if (DAU_SOURCE_FAULT == source
|| IS_MONITOR_BIT_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_POWER))
{
for(ch = 0; ch < DAU_PORT_POWER_CNT; ch++)
{
for(i = 0; i < DAU_POWER_DATE_LEN; i++)
{
val[ch][i] = (int64_t)val[ch][i] * 7257 * dev_config.ADC_ratio[ch] / 3276800;
}
}
}
}
/* description: 故障触发波形采集
param:
return: HAL_xxx */
int32_t _dau_wave_col_trigger_by_fault(void)
{
uint8_t i = 0;
uint32_t addr = 0;
int32_t rv = HAL_ERROR;
/* 上次触发没有完成直接退出 */
if (!IS_MONITOR_BIT_SET(dau_ctrl.col_flag, DAU_COL_FLAG_FAULT_CMP))
{
return HAL_OK;
}
/* 没有触发直接退出 */
if (!((dau_ctrl.reg_global.GFTR & DAU_GFTR_FAULT_Msk) >> DAU_GFTR_FAULT_Pos))
{
return HAL_OK;
}
dau_ctrl.fault_utc = dau_ctrl.reg_global.GFTUR;
dau_ctrl.fault_ns = dau_ctrl.reg_global.GFTNR;
/* 擦除 flash */
addr = dau_ctrl.addr_fault;
for(i = 0; i < 2; i++)
{
E_RETURN(spi_flash_erase(addr, SPI_CMD_BLOCK64_ERASE));
addr += SPI_FLASH_BLOCK64_SIZE;
}
/* 采集波形 */
E_RETURN(_dau_wave_col_fault());
E_RETURN(_dau_wave_col_power(DAU_SOURCE_FAULT));
_dau_power_calculate(DAU_SOURCE_FAULT);
/* 置标志位 */
MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_FAULT_CMP);
return rv;
}
/* description: 寄存器触发波形采集
param:
return: HAL_xxx */
int32_t _dau_wave_col_trigger_by_reg(void)
{
uint32_t tick = 0;
int32_t rv = HAL_ERROR;
/* 上次触发没有完成直接退出 */
if (!IS_MONITOR_BIT_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_CMP))
{
return HAL_OK;
}
/* 定时开始采集 */
tick = HAL_GetTick();
if ((tick - dau_ctrl.col_time) < (dev_config.collect_interval * 60000))
{
return HAL_OK;
}
E_RETURN(_dau_wave_col_start());
E_RETURN(_dau_wave_col_defect());
E_RETURN(_dau_wave_col_power(DAU_SOURCE_REG));
_dau_power_calculate(DAU_SOURCE_REG);
/* 置标志位, 保存数据 */
_dau_data_save();
MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_CMP);
dau_ctrl.col_time = tick;
return rv;
}
/* description: DAU 初始化
param:
return: */
static void _dau_init(void)
{
char version[DEV_COMPILE_TIME_LEN] = {0};
dau_ctrl.spi = &hspi1;
if (st_data.addr_fault >= WARE_FAULT_ADDRESS && st_data.addr_fault < WARE_FAULT_ADDRESS_END
&& 0 == (st_data.addr_fault & 0x1ffff))
{
dau_ctrl.addr_fault = st_data.addr_fault;
}
else
{
dau_ctrl.addr_fault = WARE_FAULT_ADDRESS;
}
if (st_data.addr_reg >= WARE_REG_ADDRESS && st_data.addr_reg < WARE_REG_ADDRESS_END
&& 0 == (st_data.addr_reg & 0x1ffff))
{
dau_ctrl.addr_reg = st_data.addr_reg;
}
else
{
dau_ctrl.addr_reg = WARE_REG_ADDRESS;
}
/* 开启第一次采集前, 默认上传完成 */
dau_ctrl.col_time = 600000;
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_FAULT_CMP);
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_CMP);
HAL_GPIO_WritePin(DAU_RST_GPIO_Port, DAU_RST_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(POWER_DAU_GPIO_Port, POWER_DAU_Pin, GPIO_PIN_SET);
osDelay(1000);
/* 读取 FPGA 版本信息 */
if (HAL_OK == _dau_reg_read_global_state())
{
snprintf(version, DEV_COMPILE_TIME_LEN, "%d.%d", dau_ctrl.reg_global.GSVR >> 8, dau_ctrl.reg_global.GSVR & 0xff);
if (strncmp((char*)dev_info.FPGA_version, version, DEV_COMPILE_TIME_LEN - 1) != 0)
{
strncpy((char*)dev_info.FPGA_version, version, DEV_COMPILE_TIME_LEN - 1);
common_sys_set(COM_SYS_SAVE_INFO, 0);
}
}
}
/* description: DAU 主任务循环
param:
return: */
static void _dau_start(void *argument)
{
int32_t rv = HAL_ERROR;
/* 状态初始化 */
_dau_init();
for (;;)
{
osDelay(5000);
common_watchdog_set(COM_WDG_DAU);
rv = _dau_reg_read_global_state();
if (rv != HAL_OK)
{
continue;
}
/* utc 对时处理 */
_dau_utc();
/* 故障电流采集 */
_dau_wave_col_trigger_by_fault();
/* 循环工频缺陷电流采集 */
_dau_wave_col_trigger_by_reg();
}
}
/* description: GPS 报文处理 ($GNZDA,235949.012,05,01,1980,,*4F)
param:
return: */
static void _dau_gps_process(void)
{
char *pkt = (char*)dau_ctrl.buf_gps;
uint8_t n = 0;
uint16_t i = 0;
uint32_t hour = 0;
uint32_t min = 0;
uint32_t sec = 0;
uint32_t day = 0;
uint32_t mon = 0;
uint32_t year = 0;
uint32_t ms = 0;
/* 遍历字符串 */
while(pkt[i])
{
if (pkt[i] != '$')
{
i++;
continue;
}
/* 查找对时字符串 "$GNZDA" */
if (strncmp(&pkt[i], "$GNZDA", 6) != 0)
{
i++;
continue;
}
/* 查找时分秒日月年 */
n = sscanf(&pkt[i], "$GNZDA,%02d%02d%02d.%d,%02d,%02d,%04d", &hour, &min, &sec, &ms, &day, &mon, &year);
if (n != 7)
{
break;
}
DBG(DBG_M_GPS, "%d/%d/%d %d:%d:%d\r\n", year, mon, day, hour, min, sec);
/* 小于 2024 说明对时不成功. */
if (year < 2024)
{
break;
}
_dau_tm.tm_year = year - 1900;
_dau_tm.tm_mon = mon - 1;
_dau_tm.tm_mday = day;
_dau_tm.tm_hour = hour;
_dau_tm.tm_min = min;
_dau_tm.tm_sec = sec;
dau_ctrl.utc = mktime(&_dau_tm);
rtc_time_set(dau_ctrl.utc);
dau_ctrl.is_utc_valid = TRUE;
break;
}
}
/* description: GPS 初始化
param:
return: */
static void _dau_gps_init(void)
{
dau_ctrl.uart = &huart2;
HAL_GPIO_WritePin(POWER_GPS_GPIO_Port, POWER_GPS_Pin, GPIO_PIN_SET);
osDelay(1000);
HAL_GPIO_WritePin(GPS_RST_GPIO_Port, GPS_RST_Pin, GPIO_PIN_RESET);
osDelay(100);
HAL_GPIO_WritePin(GPS_RST_GPIO_Port, GPS_RST_Pin, GPIO_PIN_SET);
}
/* description: GPS 主任务循环
param:
return: */
static void _dau_gps_start(void *argument)
{
uint32_t notify_value = 0xff;
/* 状态初始化 */
_dau_gps_init();
for (;;)
{
common_watchdog_set(COM_WDG_GPS);
/* 开启串口空闲中断收包 */
if (HAL_OK == HAL_UARTEx_ReceiveToIdle_DMA(dau_ctrl.uart, dau_ctrl.buf_gps, DAU_GPS_BUF_LEN))
{
dau_ctrl.len_buf_gps = 0;
dau_ctrl.is_half_buf_gps = FALSE;
}
/* 等待收包完成. */
notify_value = ulTaskNotifyTake(pdTRUE, 10000);
if (0 == notify_value)
{
/* 收包超时 */
dau_ctrl.is_utc_valid = FALSE;
continue;
}
dau_ctrl.is_utc_valid = FALSE;
DBG(DBG_M_GPS, "Len %d\r\n", dau_ctrl.len_buf_gps);
/* 命令过长. */
if (dau_ctrl.len_buf_gps >= DAU_GPS_BUF_LEN)
{
continue;
}
/* 字符串结束标志 */
dau_ctrl.buf_gps[dau_ctrl.len_buf_gps] = 0;
_dau_gps_process();
}
}
/* Interface functions -------------------------------------------------------*/
/* description: DAU 采集任务初始化
param:
return: */
void dau_init(void)
{
dau_ctrl.dau_handle = osThreadNew(_dau_start, NULL, &dau_attributes);
dau_ctrl.gps_handle = osThreadNew(_dau_gps_start, NULL, &dau_gps_attributes);
}
/* description: dau 显示接口
param:
return: */
void dau_show(void)
{
struct tm *day = NULL;
uint32_t utc = dau_ctrl.utc;
if (dau_ctrl.is_utc_valid)
{
utc += 28800;
day = localtime(&utc);
vty_print("date: %d/%d/%d %d:%d:%d\r\n", day->tm_year - 100, day->tm_mon + 1, day->tm_mday,
day->tm_hour, day->tm_min, day->tm_sec);
}
vty_print("\n");
}
/******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/

@ -138,7 +138,7 @@ static HAL_StatusTypeDef _dev_config_default_set(void)
/* 默认密码初始化. */ /* 默认密码初始化. */
snprintf((char*)dev_config.password, DEV_PASSWORD_LEN, "%s", DEV_DEFAULT_PASSWORD); snprintf((char*)dev_config.password, DEV_PASSWORD_LEN, "%s", DEV_DEFAULT_PASSWORD);
for(i = 0; i < CFG_ADC_CH_CNT; i++) for(i = 0; i < DAU_PORT_POWER_CNT; i++)
{ {
if (i < 4) if (i < 4)
{ {
@ -185,7 +185,7 @@ static HAL_StatusTypeDef _dev_config_default_set(void)
dev_config.vin_adj = DEV_VIN_ADJ_DEFAULT; dev_config.vin_adj = DEV_VIN_ADJ_DEFAULT;
dev_config.vin = DEV_VIN_ADJ_DEFAULT; dev_config.vin = DEV_VIN_ADJ_DEFAULT;
dev_config.collect_interval = 10; dev_config.collect_interval = 10;
dev_config.wave_interval = 12; dev_config.keepalive = 300000;
dev_config.wave_adj = DEV_WARE_ADJ_DEFAULT; dev_config.wave_adj = DEV_WARE_ADJ_DEFAULT;
dev_config.main_cable = 5; dev_config.main_cable = 5;
snprintf((char*)dev_config.APN, DEV_APN_LEN, "CMIOT"); snprintf((char*)dev_config.APN, DEV_APN_LEN, "CMIOT");
@ -604,15 +604,6 @@ void dev_config_collect_interval_set(uint16_t interval)
_dev_config_mutex_unlock(); _dev_config_mutex_unlock();
} }
void dev_config_wave_interval_set(uint16_t interval)
{
_dev_config_mutex_lock();
dev_config.wave_interval = interval;
_dev_config_mutex_unlock();
}
/* 回复出厂配置. */ /* 回复出厂配置. */
void dev_config_defaults_set(void) void dev_config_defaults_set(void)
{ {

@ -50,6 +50,9 @@ void MX_DMA_Init(void)
/* DMA1_Channel3_IRQn interrupt configuration */ /* DMA1_Channel3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0); HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn); HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
/* DMA1_Channel6_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
/* DMA2_Channel3_IRQn interrupt configuration */ /* DMA2_Channel3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Channel3_IRQn, 5, 0); HAL_NVIC_SetPriority(DMA2_Channel3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA2_Channel3_IRQn); HAL_NVIC_EnableIRQ(DMA2_Channel3_IRQn);

@ -69,7 +69,8 @@ static char *type_str[FLASH_LOG_TYPE_CNT] =
}; };
uint64_t fd_id; uint64_t fd_id;
static fd_date_t fd_buf; fd_data_t fd_data;
static fd_data_t fd_buf;
uint64_t position_id; uint64_t position_id;
static position_data_t position_buf; static position_data_t position_buf;
@ -178,13 +179,13 @@ static HAL_StatusTypeDef _fd_max_id_get(void)
} }
/* 根据 id 读取 data, id从1开始,如果id为0,则读取当前log. */ /* 根据 id 读取 data, id从1开始,如果id为0,则读取当前log. */
static HAL_StatusTypeDef _fd_read(uint64_t id, fd_date_t *data) static HAL_StatusTypeDef _fd_read(uint64_t id, fd_data_t *data)
{ {
uint32_t addr = 0; uint32_t addr = 0;
addr = _fd_addr_get(id); addr = _fd_addr_get(id);
HAL_E_RETURN(spi_flash_read(addr, (uint8_t*)data, sizeof(fd_date_t))); HAL_E_RETURN(spi_flash_read(addr, (uint8_t*)data, sizeof(fd_data_t)));
return HAL_OK; return HAL_OK;
} }
@ -431,7 +432,7 @@ void flash_log_init(void)
} }
/* 向flash中写入1条log数据,大小不能超过128byte. */ /* 向flash中写入1条log数据,大小不能超过128byte. */
HAL_StatusTypeDef fd_write(fd_date_t *data) HAL_StatusTypeDef fd_write(fd_data_t *data)
{ {
uint32_t addr = 0; uint32_t addr = 0;
@ -448,7 +449,7 @@ HAL_StatusTypeDef fd_write(fd_date_t *data)
log_tm.tm_hour = log_time.Hours; log_tm.tm_hour = log_time.Hours;
log_tm.tm_min = log_time.Minutes; log_tm.tm_min = log_time.Minutes;
log_tm.tm_sec = log_time.Seconds; log_tm.tm_sec = log_time.Seconds;
data->run_time = mktime(&log_tm) - 28800; data->run_time = mktime(&log_tm);
/* 获取当前写入地址. */ /* 获取当前写入地址. */
addr = _fd_addr_get(fd_id); addr = _fd_addr_get(fd_id);
@ -458,14 +459,14 @@ HAL_StatusTypeDef fd_write(fd_date_t *data)
FLASH_LOG_RETURN_MUTEX(spi_flash_erase(addr, SPI_CMD_SECTOR_ERASE)); FLASH_LOG_RETURN_MUTEX(spi_flash_erase(addr, SPI_CMD_SECTOR_ERASE));
/* 写入 flash, 写入长度是数据长度 + id 大小. */ /* 写入 flash, 写入长度是数据长度 + id 大小. */
FLASH_LOG_RETURN_MUTEX(spi_flash_write(addr, (uint8_t*)data, sizeof(fd_date_t))); FLASH_LOG_RETURN_MUTEX(spi_flash_write(addr, (uint8_t*)data, sizeof(fd_data_t)));
_flash_log_mutex_unlock(); _flash_log_mutex_unlock();
return HAL_OK; return HAL_OK;
} }
/* 修改数据. */ /* 修改数据. */
HAL_StatusTypeDef fd_modify(uint64_t id, fd_date_t *data) HAL_StatusTypeDef fd_modify(uint64_t id, fd_data_t *data)
{ {
uint32_t addr = 0; uint32_t addr = 0;
@ -480,14 +481,14 @@ HAL_StatusTypeDef fd_modify(uint64_t id, fd_date_t *data)
addr = _fd_addr_get(id); addr = _fd_addr_get(id);
/* 写入 flash, 写入长度是数据长度. */ /* 写入 flash, 写入长度是数据长度. */
FLASH_LOG_RETURN_MUTEX(spi_flash_write(addr, (uint8_t*)data, sizeof(fd_date_t))); FLASH_LOG_RETURN_MUTEX(spi_flash_write(addr, (uint8_t*)data, sizeof(fd_data_t)));
_flash_log_mutex_unlock(); _flash_log_mutex_unlock();
return HAL_OK; return HAL_OK;
} }
/* 根据 id 读取 data, id从1开始,如果id为0,则读取当前log. */ /* 根据 id 读取 data, id从1开始,如果id为0,则读取当前log. */
HAL_StatusTypeDef fd_read(uint64_t id, fd_date_t *data) HAL_StatusTypeDef fd_read(uint64_t id, fd_data_t *data)
{ {
if (0 == id || id > fd_id) if (0 == id || id > fd_id)
{ {
@ -542,13 +543,12 @@ void fd_show(uint32_t num)
if (FD_INVALID_ID == fd_buf.id) if (FD_INVALID_ID == fd_buf.id)
break; break;
time = fd_buf.run_time + 28800; time = fd_buf.run_time;
day = localtime(&time); day = localtime(&time);
vty_print("%-08lld %-04d/%-02d/%-02d %-02d:%-02d:%-02d ", fd_buf.id, day->tm_year + 1900, day->tm_mon + 1, vty_print("%-08lld %-04d/%-02d/%-02d %-02d:%-02d:%-02d ", fd_buf.id, day->tm_year + 1900, day->tm_mon + 1,
day->tm_mday, day->tm_hour, day->tm_min, day->tm_sec); day->tm_mday, day->tm_hour, day->tm_min, day->tm_sec);
vty_print("%-06d %-06d %-06d %-06d %-06d\r\n", fd_buf.elec[0], fd_buf.elec[1], fd_buf.elec[2], fd_buf.elec[3], vty_print("%-06d %-06d %-06d %-06d %-06d\r\n", fd_buf.elec[0], fd_buf.elec[1], fd_buf.elec[2], fd_buf.elec[3]);
fd_buf.is_not_updata);
fd_buf.id--; fd_buf.id--;
if (0 == fd_buf.id) if (0 == fd_buf.id)

@ -29,32 +29,6 @@
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : freertos.c
* Description : Code for freertos applications
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/**
* @}
*/
/**
* @}
*/
/* USER CODE BEGIN PTD */ /* USER CODE BEGIN PTD */
/* USER CODE END PTD */ /* USER CODE END PTD */
@ -71,6 +45,9 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */ /* USER CODE BEGIN Variables */
/* USER CODE END Variables */
/* Definitions for CLI */
osThreadId_t CLIHandle; osThreadId_t CLIHandle;
const osThreadAttr_t CLI_attributes = { const osThreadAttr_t CLI_attributes = {
.name = "CLI", .name = "CLI",
@ -78,34 +55,6 @@ const osThreadAttr_t CLI_attributes = {
.priority = (osPriority_t) osPriorityHigh, .priority = (osPriority_t) osPriorityHigh,
}; };
/* USER CODE END Variables */
/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : freertos.c
* Description : Code for freertos applications
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/**
* @}
*/
/**
* @}
*/
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */ /* USER CODE BEGIN FunctionPrototypes */
@ -141,33 +90,35 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN Init */ /* USER CODE BEGIN Init */
/* USER CODE END Init */ /* USER CODE END Init */
/* USER CODE BEGIN Header */
/** /* USER CODE BEGIN RTOS_MUTEX */
****************************************************************************** /* add mutexes, ... */
* File Name : freertos.c /* USER CODE END RTOS_MUTEX */
* Description : Code for freertos applications
****************************************************************************** /* USER CODE BEGIN RTOS_SEMAPHORES */
* @attention /* add semaphores, ... */
* /* USER CODE END RTOS_SEMAPHORES */
* Copyright (c) 2022 STMicroelectronics.
* All rights reserved. /* USER CODE BEGIN RTOS_TIMERS */
* /* start timers, add new ones, ... */
* This software is licensed under terms that can be found in the LICENSE file /* USER CODE END RTOS_TIMERS */
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS. /* USER CODE BEGIN RTOS_QUEUES */
* /* add queues, ... */
****************************************************************************** /* USER CODE END RTOS_QUEUES */
*/
/* Create the thread(s) */
/* creation of CLI */
CLIHandle = osThreadNew(cli_start, NULL, &CLI_attributes); CLIHandle = osThreadNew(cli_start, NULL, &CLI_attributes);
/* USER CODE END Header */
/** /* USER CODE BEGIN RTOS_THREADS */
* @} /* add threads, ... */
*/ /* USER CODE END RTOS_THREADS */
/* USER CODE BEGIN RTOS_EVENTS */
/* add events, ... */
/* USER CODE END RTOS_EVENTS */
/**
* @}
*/
} }
/* USER CODE BEGIN Header_cli_start */ /* USER CODE BEGIN Header_cli_start */

@ -58,10 +58,10 @@ void MX_GPIO_Init(void)
HAL_PWREx_EnableVddIO2(); HAL_PWREx_EnableVddIO2();
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, POWER_GPS_Pin|POWER_3V3_Pin|POWER_DAU_Pin|POWER_4G_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOE, POWER_GPS_Pin|POWER_DAU_Pin|POWER_4G_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, WDG_Pin|DAU_50HZ_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(WDG_GPIO_Port, WDG_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(DAU_RST_GPIO_Port, DAU_RST_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DAU_RST_GPIO_Port, DAU_RST_Pin, GPIO_PIN_SET);
@ -78,24 +78,21 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOG, SPI_FLASH_WP_Pin|SPI_FLASH_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOG, SPI_FLASH_WP_Pin|SPI_FLASH_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pins : PEPin PEPin PEPin */
HAL_GPIO_WritePin(POWER_12V_GPIO_Port, POWER_12V_Pin, GPIO_PIN_SET); GPIO_InitStruct.Pin = POWER_GPS_Pin|POWER_DAU_Pin|POWER_4G_Pin;
/*Configure GPIO pins : PEPin PEPin PEPin PEPin
PEPin */
GPIO_InitStruct.Pin = POWER_GPS_Pin|POWER_3V3_Pin|POWER_DAU_Pin|POWER_4G_Pin
|POWER_12V_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PE4 PE5 PE6 PE7 /*Configure GPIO pins : PE3 PE4 PE5 PE6
PE8 PE9 PE10 PE12 PE7 PE8 PE9 PE10
PE13 PE14 PE15 */ PE12 PE13 PE14 PE15
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 PE1 */
|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_12 GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
@ -110,21 +107,21 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PFPin PFPin PFPin */ /*Configure GPIO pins : PFPin PFPin */
GPIO_InitStruct.Pin = WDG_Pin|DAU_50HZ_Pin|DAU_RST_Pin; GPIO_InitStruct.Pin = WDG_Pin|DAU_RST_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/*Configure GPIO pins : PF1 PF2 PF3 PF4 /*Configure GPIO pins : PF1 PF2 PF3 PF4
PF5 PF6 PF7 PF10 PF5 PF6 PF7 PF8
PF11 PF12 PF13 PF14 PF10 PF11 PF12 PF13
PF15 */ PF14 PF15 */
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4 GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10 |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8
|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13
|GPIO_PIN_15; |GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
@ -156,26 +153,22 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PG0 PG5 PG6 PG7 /*Configure GPIO pins : PG0 PG1 PG5 PG6
PG8 PG11 PG12 PG15 */ PG7 PG8 PG11 PG12
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 PG15 */
|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15; GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5|GPIO_PIN_6
|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12
|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/*Configure GPIO pins : PGPin PGPin */
GPIO_InitStruct.Pin = CH1_FREQ_Pin|BAT_CHECK_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/*Configure GPIO pins : PD8 PD9 PD10 PD11 /*Configure GPIO pins : PD8 PD9 PD10 PD11
PD12 PD13 PD0 PD1 PD12 PD13 PD0 PD1
PD2 */ PD2 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_0|GPIO_PIN_1 |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_0|GPIO_PIN_1
|GPIO_PIN_2; |GPIO_PIN_2|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
@ -197,10 +190,10 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = POWER_RS485_CHECK_Pin; GPIO_InitStruct.Pin = BAT_CHECK_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(POWER_RS485_CHECK_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(BAT_CHECK_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = SPI_FLASH_CS_Pin; GPIO_InitStruct.Pin = SPI_FLASH_CS_Pin;

@ -93,7 +93,6 @@ int main(void)
/* Initialize all configured peripherals */ /* Initialize all configured peripherals */
MX_GPIO_Init(); MX_GPIO_Init();
MX_DMA_Init(); MX_DMA_Init();
MX_USART1_UART_Init();
MX_UART4_Init(); MX_UART4_Init();
MX_USART3_UART_Init(); MX_USART3_UART_Init();
MX_TIM7_Init(); MX_TIM7_Init();
@ -102,8 +101,9 @@ int main(void)
MX_SPI3_Init(); MX_SPI3_Init();
MX_SPI1_Init(); MX_SPI1_Init();
MX_USART2_UART_Init(); MX_USART2_UART_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim7);
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Init scheduler */ /* Init scheduler */

@ -21,7 +21,8 @@
#include "spi.h" #include "spi.h"
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
#include "common.h"
#include "dau.h"
/* USER CODE END 0 */ /* USER CODE END 0 */
SPI_HandleTypeDef hspi1; SPI_HandleTypeDef hspi1;
@ -242,5 +243,12 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
} }
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
if (SPI1 == hspi->Instance)
{
DAU_CS_DISABLE();
notify_to_task(dau_ctrl.dau_handle);
}
}
/* USER CODE END 1 */ /* USER CODE END 1 */

@ -63,10 +63,10 @@ extern DMA_HandleTypeDef hdma_spi1_tx;
extern SPI_HandleTypeDef hspi1; extern SPI_HandleTypeDef hspi1;
extern TIM_HandleTypeDef htim7; extern TIM_HandleTypeDef htim7;
extern DMA_HandleTypeDef hdma_uart4_rx; extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart3_rx; extern DMA_HandleTypeDef hdma_usart3_rx;
extern DMA_HandleTypeDef hdma_usart3_tx; extern DMA_HandleTypeDef hdma_usart3_tx;
extern UART_HandleTypeDef huart4; extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3; extern UART_HandleTypeDef huart3;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
@ -221,6 +221,20 @@ void DMA1_Channel3_IRQHandler(void)
/* USER CODE END DMA1_Channel3_IRQn 1 */ /* USER CODE END DMA1_Channel3_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 ADC1 and ADC2 interrupts. * @brief This function handles ADC1 and ADC2 interrupts.
*/ */
@ -249,20 +263,6 @@ void SPI1_IRQHandler(void)
/* USER CODE END SPI1_IRQn 1 */ /* USER CODE END SPI1_IRQn 1 */
} }
/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
/** /**
* @brief This function handles USART2 global interrupt. * @brief This function handles USART2 global interrupt.
*/ */

@ -42,9 +42,9 @@ void MX_TIM7_Init(void)
/* USER CODE END TIM7_Init 1 */ /* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7; htim7.Instance = TIM7;
htim7.Init.Prescaler = 7999; htim7.Init.Prescaler = 39999;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP; htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 20; htim7.Init.Period = 10000;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim7) != HAL_OK) if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
{ {
@ -106,12 +106,12 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{ {
static uint8_t wdg_cnt = 0; static uint8_t wdg_cnt = 0;
/* tim1 20s watchdog. */ /* tim7 5s */
if (TIM1 == htim->Instance) if (TIM7 == htim->Instance)
{ {
/* 2 分钟看看门狗处理. */ /* 30s watchdog */
wdg_cnt++; wdg_cnt++;
if (wdg_cnt > 6) if (wdg_cnt >= 6)
{ {
wdg_cnt = 0; wdg_cnt = 0;
if (!common_watchdog_tst_all() if (!common_watchdog_tst_all()
@ -129,9 +129,5 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
common_watchdog_clr(); common_watchdog_clr();
} }
} }
else if (TIM7 == htim->Instance)
{
HAL_GPIO_TogglePin(DAU_50HZ_GPIO_Port, DAU_50HZ_Pin);
}
} }
/* USER CODE END 1 */ /* USER CODE END 1 */

@ -29,6 +29,7 @@
#include "RS485_debug.h" #include "RS485_debug.h"
#include "cli.h" #include "cli.h"
#include "ADC_collect.h" #include "ADC_collect.h"
#include "dau.h"
extern osThreadId_t CLIHandle; extern osThreadId_t CLIHandle;
@ -39,6 +40,7 @@ UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2; UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3; UART_HandleTypeDef huart3;
DMA_HandleTypeDef hdma_uart4_rx; DMA_HandleTypeDef hdma_uart4_rx;
DMA_HandleTypeDef hdma_usart2_rx;
DMA_HandleTypeDef hdma_usart3_rx; DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx; DMA_HandleTypeDef hdma_usart3_tx;
@ -256,9 +258,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 6, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */ /* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */ /* USER CODE END USART1_MspInit 1 */
@ -293,6 +292,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitStruct.Alternate = GPIO_AF7_USART2; GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* USART2 DMA Init */
/* USART2_RX Init */
hdma_usart2_rx.Instance = DMA1_Channel6;
hdma_usart2_rx.Init.Request = DMA_REQUEST_2;
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 interrupt Init */ /* USART2 interrupt Init */
HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); HAL_NVIC_SetPriority(USART2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn); HAL_NVIC_EnableIRQ(USART2_IRQn);
@ -414,8 +431,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
*/ */
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
/* USART1 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */ /* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */ /* USER CODE END USART1_MspDeInit 1 */
@ -434,6 +449,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
*/ */
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6); HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6);
/* USART2 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
/* USART2 interrupt Deinit */ /* USART2 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART2_IRQn); HAL_NVIC_DisableIRQ(USART2_IRQn);
/* USER CODE BEGIN USART2_MspDeInit 1 */ /* USER CODE BEGIN USART2_MspDeInit 1 */
@ -471,7 +489,19 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{ {
uint16_t len = 0; uint16_t len = 0;
if (USART3 == huart->Instance) if (USART2 == huart->Instance)
{
if (Size == huart->RxXferSize / 2U && !dau_ctrl.is_half_buf_gps)
{
dau_ctrl.is_half_buf_gps = 1;
return;
}
dau_ctrl.len_buf_gps = Size;
notify_to_task(dau_ctrl.gps_handle);
}
else if (USART3 == huart->Instance)
{ {
/* calc pkt len */ /* calc pkt len */
len = Size - wl_buf_list_rx.buf_addr; len = Size - wl_buf_list_rx.buf_addr;
@ -481,7 +511,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
return; return;
} }
memcpy(wl_buf_list_rx.buf[wl_buf_list_rx.valid], &huart->pRxBuffPtr[wl_buf_list_rx.buf_addr], len); memcpy(wl_buf_list_rx.buf[wl_buf_list_rx.valid], &wl_ctrl.dma_rx_buf[wl_buf_list_rx.buf_addr], len);
wl_buf_list_rx.buf_cnt[wl_buf_list_rx.valid] = len; wl_buf_list_rx.buf_cnt[wl_buf_list_rx.valid] = len;
/* refr DMA recv addr */ /* refr DMA recv addr */
@ -501,7 +531,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
wl_buf_list_rx.valid = 0; wl_buf_list_rx.valid = 0;
} }
notify_to_task(WLHandle); notify_to_task(wl_ctrl.handle);
} }
else if (UART4 == huart->Instance) else if (UART4 == huart->Instance)
{ {
@ -540,6 +570,13 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{ {
if(USART2 == huart->Instance)
{
HAL_UART_Abort(huart);
dau_ctrl.len_buf_gps = 0;
dau_ctrl.is_half_buf_gps = FALSE;
HAL_UARTEx_ReceiveToIdle_DMA(huart, dau_ctrl.buf_gps, DAU_GPS_BUF_LEN);
}
if(USART3 == huart->Instance) if(USART3 == huart->Instance)
{ {
HAL_UART_Abort(huart); HAL_UART_Abort(huart);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1074,6 +1074,9 @@
<file> <file>
<name>$PROJ_DIR$\..\Core\Src\common.c</name> <name>$PROJ_DIR$\..\Core\Src\common.c</name>
</file> </file>
<file>
<name>$PROJ_DIR$\..\Core\Src\dau.c</name>
</file>
<file> <file>
<name>$PROJ_DIR$\..\Core\Src\dev_config.c</name> <name>$PROJ_DIR$\..\Core\Src\dev_config.c</name>
</file> </file>

@ -1209,6 +1209,9 @@
<file> <file>
<name>$PROJ_DIR$\..\Core\Src\common.c</name> <name>$PROJ_DIR$\..\Core\Src\common.c</name>
</file> </file>
<file>
<name>$PROJ_DIR$\..\Core\Src\dau.c</name>
</file>
<file> <file>
<name>$PROJ_DIR$\..\Core\Src\dev_config.c</name> <name>$PROJ_DIR$\..\Core\Src\dev_config.c</name>
</file> </file>

@ -50,7 +50,7 @@
<item>33054</item> <item>33054</item>
<item>0</item> <item>0</item>
<item>33035</item> <item>33035</item>
<item>33036</item> <item>33037</item>
<item>34399</item> <item>34399</item>
<item>0</item> <item>0</item>
<item>33038</item> <item>33038</item>
@ -60,7 +60,7 @@
</IarPane-34050> </IarPane-34050>
<IarPane-34063> <IarPane-34063>
<ColumnWidths> <ColumnWidths>
<Column0>258</Column0> <Column0>241</Column0>
<Column1>30</Column1> <Column1>30</Column1>
<Column2>30</Column2> <Column2>30</Column2>
<Column3>30</Column3> <Column3>30</Column3>
@ -86,7 +86,7 @@
<RecentlyUsedMenus>1</RecentlyUsedMenus> <RecentlyUsedMenus>1</RecentlyUsedMenus>
<MenuShadows>1</MenuShadows> <MenuShadows>1</MenuShadows>
<ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay> <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay>
<CommandsUsage>DE0700000E00598400000200000040E1000002000000108600001000000056840000020000005F860000030000000F810000010000000C810000B107000055840000020000000E810000060000000B8100000C00000005840000030000004681000001000000108400000A0000000D81000005000000</CommandsUsage> <CommandsUsage>A80800000E0040E10000020000005984000002000000568400000200000010860000100000000F810000010000005F860000030000000C8100007108000055840000020000000E810000060000000B8100000E0000000584000003000000108400001100000046810000010000000D81000006000000</CommandsUsage>
</MFCToolBarParameters> </MFCToolBarParameters>
<CommandManager> <CommandManager>
<CommandsWithoutImages>36000D8400000F84000008840000FFFFFFFF54840000328100001C810000098400007784000007840000808C000044D50000538400000088000001880000028800000388000004880000058800001C8F00001D8F00001F8F0000208F0000218F00002AE10000118F000055840000568400005984000001B0000002B0000003B0000004B0000005B0000006B0000007B0000008B0000009B000000AB000000BB000000CB000000DB000000EB0000000B000002481000040E100000C840000338400007884000011840000008200001C8200000182000067860000</CommandsWithoutImages> <CommandsWithoutImages>36000D8400000F84000008840000FFFFFFFF54840000328100001C810000098400007784000007840000808C000044D50000538400000088000001880000028800000388000004880000058800001C8F00001D8F00001F8F0000208F0000218F00002AE10000118F000055840000568400005984000001B0000002B0000003B0000004B0000005B0000006B0000007B0000008B0000009B000000AB000000BB000000CB000000DB000000EB0000000B000002481000040E100000C840000338400007884000011840000008200001C8200000182000067860000</CommandsWithoutImages>
@ -381,7 +381,7 @@
</BasePane-34049> </BasePane-34049>
<MFCToolBar-34050> <MFCToolBar-34050>
<Name>Main</Name> <Name>Main</Name>
<Buttons>00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000000038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000000003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000000003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000000041000000FFFEFF000000000000000000000000000100000001000000018002810000000000001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000000030000000FFFEFF000000000000000000000000000100000001000000018027810000000000002E000000FFFEFF000000000000000000000000000100000001000000018028810000000000002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000</Buttons> <Buttons>00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000000038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000000003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000000FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000000003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000000041000000FFFEFF000000000000000000000000000100000001000000018002810000000000001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000000030000000FFFEFF000000000000000000000000000100000001000000018027810000000000002E000000FFFEFF000000000000000000000000000100000001000000018028810000000000002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800D8100000000020021000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000</Buttons>
</MFCToolBar-34050> </MFCToolBar-34050>
<Pane-34050> <Pane-34050>
<ID>34050</ID> <ID>34050</ID>
@ -419,7 +419,7 @@
</ChildIdMap> </ChildIdMap>
<MDIWindows> <MDIWindows>
<MDIClientArea-0> <MDIClientArea-0>
<MDITabsState>010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000030000000200000001000000FFFEFF1A2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C0063006C0069002E00630001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003600310035003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0563006C0069002E00630000000000FFFFFFFFFFFFFFFFFFFEFF3D2400570053005F0044004900520024005C004300610062006C0065004D006F006E00690074006F0072005F004100500050005F00560033002E0032005C004C006900730074005C004300610062006C0065004D006F006E00690074006F0072005F004100500050005F00560033002E0032002E006D0061007000010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003700380031003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF194300610062006C0065004D006F006E00690074006F0072005F004100500050005F00560033002E0032002E006D006100700000000000FFFFFFFFFFFFFFFFFFFEFF1B2400570053005F0044004900520024005C002E002E005C0043006F00720065005C005300720063005C006D00610069006E002E006300010000000180FFFEFF00FFFEFFFF21013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00380038003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D00610069006E002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000004E0100004900000080070000CC020000</MDITabsState> <MDITabsState>010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000010000000000000001000000FFFEFF3D2400570053005F0044004900520024005C004300610062006C0065004D006F006E00690074006F0072005F004100500050005F00560033002E0032005C004C006900730074005C004300610062006C0065004D006F006E00690074006F0072005F004100500050005F00560033002E0032002E006D006100700001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF23013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0031003500300036003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF194300610062006C0065004D006F006E00690074006F0072005F004100500050005F00560033002E0032002E006D006100700000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000004E0100004900000080070000CC020000</MDITabsState>
</MDIClientArea-0> </MDIClientArea-0>
</MDIWindows> </MDIWindows>
</WindowStorage> </WindowStorage>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -24,7 +24,7 @@
<LeaveTargetRunning>_ 0</LeaveTargetRunning> <LeaveTargetRunning>_ 0</LeaveTargetRunning>
</JLinkDriver> </JLinkDriver>
<DebugChecksum> <DebugChecksum>
<Checksum>1720255418</Checksum> <Checksum>2205211107</Checksum>
</DebugChecksum> </DebugChecksum>
<RecentFlashDownload> <RecentFlashDownload>
<Path>D:\Work\CablePositioning\Code\CablePositioningV1.0\CablePositioning_APP_V1.0\EWARM\CableMonitor_APP_V3.2\Exe\CableMonitor_APP_V3.2.out</Path> <Path>D:\Work\CablePositioning\Code\CablePositioningV1.0\CablePositioning_APP_V1.0\EWARM\CableMonitor_APP_V3.2\Exe\CableMonitor_APP_V3.2.out</Path>

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save