From 9273828134f3dc2a0b5dddd646d7d2249483b01d Mon Sep 17 00:00:00 2001 From: 95384 <664090429@qq.com> Date: Fri, 10 Jan 2025 16:19:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E5=8A=A0=E5=AF=86OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Inc/anemometer_dev.h | 2 +- App/Inc/encrypt.h | 4 ++++ App/Inc/frt_protocol.h | 2 ++ App/Inc/inflash.h | 18 ++++++++++++++++++ App/Src/anemometer_dev.c | 16 ++++++++++++++-- App/Src/encrypt.c | 30 +++++------------------------- App/Src/frt_protocol.c | 1 + Core/Src/freertos.c | 4 ++++ 8 files changed, 49 insertions(+), 28 deletions(-) diff --git a/App/Inc/anemometer_dev.h b/App/Inc/anemometer_dev.h index 49b0ee1..b66fd56 100644 --- a/App/Inc/anemometer_dev.h +++ b/App/Inc/anemometer_dev.h @@ -21,7 +21,7 @@ - +#define K_128 0xA12EE1FE // 延时REV_MUTE_DELAY us启动ADC采集数据 // 最大风速30m/s 2.5M 采样率 延时260uS #define REV_MUTE_DELAY_US 174 diff --git a/App/Inc/encrypt.h b/App/Inc/encrypt.h index 03d9853..4b18cb5 100644 --- a/App/Inc/encrypt.h +++ b/App/Inc/encrypt.h @@ -3,6 +3,10 @@ #include "comm_types.h" #include "stm32l4xx_hal.h" #include "inflash.h" +#include "anemometer_dev.h" +#include "frt_protocol.h" + +#define K_64 0x9B45824A uint8_t JudgeEncrypt(); diff --git a/App/Inc/frt_protocol.h b/App/Inc/frt_protocol.h index 9de0ea6..961e9fb 100644 --- a/App/Inc/frt_protocol.h +++ b/App/Inc/frt_protocol.h @@ -140,6 +140,8 @@ typedef struct _FRT_RegProcTable_s{ void read_and_process_uart_data(device_handle uart_handle); #pragma pack(pop) +extern uint32_t K_96; + #ifdef __cplusplus } #endif diff --git a/App/Inc/inflash.h b/App/Inc/inflash.h index 6f610a3..40f9d99 100644 --- a/App/Inc/inflash.h +++ b/App/Inc/inflash.h @@ -31,6 +31,14 @@ typedef struct _usr_config_info{ u_int16_t uart_baud; /* 串口波特率 */ u_int16_t speed_average_time; /* 风速平均时间 */ u_int16_t temp_hum_update_time; /* 温湿度平均时间 */ + u_int16_t temp0; /* 占位留待升级 */ + u_int16_t temp1; /* 占位留待升级 */ + u_int16_t temp2; /* 占位留待升级 */ + u_int16_t temp3; /* 占位留待升级 */ + u_int16_t temp4; /* 占位留待升级 */ + u_int16_t temp5; /* 占位留待升级 */ + u_int16_t temp6; /* 占位留待升级 */ + u_int16_t temp7; /* 占位留待升级 */ u_int8_t flag_end; }usr_config_info; @@ -57,6 +65,16 @@ typedef struct _factory_config_info{ u_int16_t linear_point_5_y; /* 线性插值点5Y */ u_int16_t linear_enable; /* 线性插值使能 */ u_int32_t encrypt_1; /* 后32位密文 */ + u_int16_t temp0; /* 占位留待升级 */ + u_int16_t temp1; /* 占位留待升级 */ + u_int16_t temp2; /* 占位留待升级 */ + u_int16_t temp3; /* 占位留待升级 */ + u_int16_t temp4; /* 占位留待升级 */ + u_int16_t temp5; /* 占位留待升级 */ + u_int16_t temp6; /* 占位留待升级 */ + u_int16_t temp7; /* 占位留待升级 */ + u_int16_t temp8; /* 占位留待升级 */ + u_int16_t temp9; /* 占位留待升级 */ u_int8_t flag_end; }factory_config_info; #pragma pack(pop) diff --git a/App/Src/anemometer_dev.c b/App/Src/anemometer_dev.c index c9b0815..75c1716 100644 --- a/App/Src/anemometer_dev.c +++ b/App/Src/anemometer_dev.c @@ -8,6 +8,7 @@ #include "hp203b.h" #include "FIR.h" #include "LowPassFilter.h" +#include "encrypt.h" #define AVE_TIME 600 //滑动平均时间,秒,最大600 #define COVER_TINE 10 //探头遮挡后导致的接收次数过小的报错临界次数 @@ -461,6 +462,8 @@ char str[100]; void wind_task(void const * argument) { + //软件加密校验 + uint8_t wind_check_flag = JudgeEncrypt(); // 最大幅值 uint16_t wave_max_val1; uint16_t wave_max_val2; @@ -478,6 +481,11 @@ void wind_task(void const * argument) initLowPassFilter(&low_pass_filter_y, LOW_PASS_ALPHA); for(;;) { + if(!wind_check_flag) + { + osDelay(1000); + continue; + } __HAL_TIM_DISABLE(&htim16); // 采集X轴风速耗时 22ms,两轴采集完44ms __HAL_TIM_SET_COUNTER(&htim16,0); @@ -1052,10 +1060,13 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction) win_10min.index = (win_10min.index + 1) % g_usrConfigInfo.speed_average_time;//更新索引 } + void tem_hum_update_task(void const * argument) { - int time_s_temp_humi = 0; - uint32_t time_s_1Day = 0; + uint8_t tem_hun_check_flag = JudgeEncrypt(); + + uint16_t time_s_temp_humi = 0;//1秒计时,温湿度更新 + uint32_t time_s_1Day = 0;//1天的秒数 float backupTemperature; @@ -1080,6 +1091,7 @@ void tem_hum_update_task(void const * argument) while(1) { osDelay(1000); + if(!tem_hun_check_flag)continue; time_s_temp_humi ++; time_s_1Day ++; // 温湿度大气压更新 diff --git a/App/Src/encrypt.c b/App/Src/encrypt.c index d17e146..849c995 100644 --- a/App/Src/encrypt.c +++ b/App/Src/encrypt.c @@ -1,32 +1,11 @@ #include "encrypt.h" -/* TEA㷨ļܹ */ -void tea_encrypt(uint32_t *en, uint32_t *k) -{ - uint32_t v[2]; - v[0] = *(uint32_t*)(0x1FFF7590); - v[1] = *(uint32_t*)(0x1FFF7590 + 4); - uint32_t v0 = v[0], v1 = v[1], sum = 0, i; // ʼv0, v1, sum - uint32_t delta = 0x9e3779b9; // ʼdelta - uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // ʼԿk - for (i = 0; i < 32; i++) { // ִ32ּ - sum += delta; - v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); - v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); - } - en[0] = v0; // ؼܽ - en[1] = v1; - -// term_printf("%x %x", v[0], v[1]); -} - /* TEA㷨Ľܹ */ -void tea_decrypt(uint32_t *v, uint32_t *k) +static void tea_decrypt(uint32_t *v, uint32_t *k) { uint32_t delta = 0x9e3779b9; // ʼdelta -// uint32_t v0 = 0x93ae5ba8, v1 = 0xc5ba4e82, sum = delta << 5, i; // ʼv0, v1, sum uint32_t v0 = g_stConfigInfo.encrypt_0, v1 = g_stConfigInfo.encrypt_1, sum = delta << 5, i; // ʼv0, v1, sum - uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // ʼԿk + uint32_t k3 = k[3] ^ k[0], k2 = (k[2] ^ (*(uint32_t*)(0x1FFF7590))), k1 = k[1] ^ k[0], k0 = k[0] ^ (*(uint32_t*)(0x1FFF7590 + 4)); // Կ for(i = 0; i < 32; i++) { // ִ32ֽ v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); @@ -45,7 +24,8 @@ void tea_decrypt(uint32_t *v, uint32_t *k) uint8_t JudgeEncrypt() { uint32_t encryptCode[2] = {0}; - uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, 0x7d729015}; //ԿҪɢλãﶨ +// uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, IDм32λ}; // + uint32_t key[] = {(K_128 >> 1) ^ (*(uint32_t*)(0x1FFF7590 + 4)), (K_96 >> 2) ^ key[0], (K_64 >>1) ^ (*(uint32_t*)(0x1FFF7590)), (*(uint32_t*)(0x1FFF7590 + 4)) ^ key[0]}; tea_decrypt(encryptCode, key); return ((*(uint32_t*)(0x1FFF7590)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[1]); -} \ No newline at end of file +} diff --git a/App/Src/frt_protocol.c b/App/Src/frt_protocol.c index 6775fa3..3d6bd8f 100644 --- a/App/Src/frt_protocol.c +++ b/App/Src/frt_protocol.c @@ -1536,6 +1536,7 @@ void FRT_MsgHandler(device_handle device, u_int8_t *pMsg, u_int32_t MsgLen) * @param * @retval */ +uint32_t K_96 = 0xA71ACDA4; static u_int8_t rs485_buff[50]={0x00}; void read_and_process_uart_data(device_handle device) { diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 3522549..b37fcd7 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -192,10 +192,14 @@ void LEDTask(void const * argument) { /* USER CODE BEGIN StartDefaultTask */ /* Infinite loop */ + uint8_t LED_Check_flag = JudgeEncrypt(); for(;;) { osDelay(1000); + if(LED_Check_flag) + { HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin); + } } /* USER CODE END StartDefaultTask */ }