From 6f6d3bc73b0b59b67ec7c3acfe6cd966523741b3 Mon Sep 17 00:00:00 2001 From: yincheng.zhong <634916154@qq.com> Date: 星期三, 24 四月 2024 10:04:12 +0800 Subject: [PATCH] V1.21 修改LED显示,增加秒延迟功能 --- Src/radio/Lora.c | 73 ++++++++++++++++++++++++++++-------- 1 files changed, 57 insertions(+), 16 deletions(-) diff --git a/Src/radio/Lora.c b/Src/radio/Lora.c index 0126fe4..6f65055 100644 --- a/Src/radio/Lora.c +++ b/Src/radio/Lora.c @@ -14,6 +14,7 @@ #include "dw_mbx_tag.h" #include "Flash.h" #include "dw_driver.h" +#include "WS2812.h" static RadioEvents_t RadioEvents; #define USE_MODEM_LORA //#define USE_MODEM_FSK @@ -177,8 +178,15 @@ SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader } Radio.Standby(); - Radio.Rx( 100 ); -// LED_TB_OFF; + if(LoraUp_flag) + { + huifushengjibao_flag=1; + Radio.Rx( 500 ); + } + else + { + Radio.Rx( 100 ); + } } extern LPTIM_HandleTypeDef hlptim1; uint16_t current_time,start_time,end_time; @@ -232,13 +240,14 @@ // Delay_Ms(100); } extern uint8_t report_ancnum; -static uint16_t delaytime = 771; +static uint16_t delaytime = 1200; static uint16_t source_id; -uint8_t rec_index; +uint8_t rec_index,rec_secdelay; uint16_t rec_value,rec_delaytime,rx_count; uint16_t rec_value,rec_delaytime,rx_count,datalen_offset; -int16_t target_count; +int32_t target_count; uint8_t shengji_flag; +extern uint32_t uwbled,gpsled,loraled,powerled; void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) { uint16_t checksum1; BufferSize = size; @@ -269,12 +278,19 @@ if(!memcmp(&wg_report_id,&RX_Buffer[SOURCE_ID_IDX],2)) { wg_lost_count = 0; + loraled=GREEN; switch(RX_Buffer[PWTAG_RW_FLAG_IDX]) { case WGRSP_RWTAG_NONE: current_count = HAL_LPTIM_ReadCounter(&hlptim1); wg_report_freq = RX_Buffer[POLL_FREQ_IDX]+400; memcpy(&rec_delaytime,&RX_Buffer[NEXTPOLL_TIME_IDX],2); + rec_secdelay = RX_Buffer[PWTAG_SECDELAY_IDX]; + if(BufferSize!=13||rec_secdelay>20) + { + rec_secdelay = 0; + } + if(report_ancnum<2) { datalen_offset = report_ancnum*85; @@ -295,6 +311,8 @@ break; case WGRSP_RWTAG_WRITE: rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX]; + if(rec_index<=DEV_ID) + return; if(rec_index==0xDD) { if(usart5_state==1) @@ -327,7 +345,7 @@ { case 0xaa: //升级下发 memcpy(&rec_wenjian_daxiao,&RX_Buffer[WRITEPARA_VALUE_IDX],2);//文件大小 - if(rec_wenjian_daxiao>0XAC00||rec_wenjian_daxiao==0) + if(rec_wenjian_daxiao>APP_SIZE||rec_wenjian_daxiao==0) {}//文件过大,超出范围 else { @@ -341,8 +359,8 @@ } } } - } - if(!no_rx_flag) + } + if(!no_rx_flag&&LoraUp_flag==0) { SwitchLoraSettings(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); Radio.Rx(0); @@ -421,7 +439,25 @@ // Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time); } +uint32_t IAP_JumpTo(uint32_t ApplicationAddress) +{ + uint32_t JumpAddress; + + if (((*(uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) + { +//HAL_NVIC_DisableIRQ(EXTI0_1_IRQn); +// __disable_irq(); + JumpAddress = *(uint32_t*) (ApplicationAddress + 4); + + __set_MSP(*(uint32_t*) ApplicationAddress); //Set MSP + + (*((void(*)(void))JumpAddress))(); + + return 1; + } + return 0; +} uint8_t send_lora_data[250]; //extern uint8_t lora_recbuffer[255]; uint8_t muqiandeshengjibao; @@ -496,19 +532,23 @@ } // while(1); if(lora_up_rec_flag) - { + { uint16_t result12; HAL_IWDG_Refresh(&hiwdg); crc16=Cal_CRC16(RX_Buffer,DATA_IDX+ONE_BAG_DAXIAO); + __disable_irq(); if(muqiandeshengjibao==RX_Buffer[MUQIAN_BAG]&&!memcmp(&crc16,&RX_Buffer[DATA_IDX+ONE_BAG_DAXIAO],2)&&!memcmp(&dev_id,&RX_Buffer[DEST_ID_IDX],2)&& !memcmp(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2)) { memcpy(Zhongjian_data,&RX_Buffer[DATA_IDX],ONE_BAG_DAXIAO); -// if(app1_or_app2==1) -// FLASH_Write(APP1_ADRESS+ONE_BAG_DAXIAO*rxbuffer[MUQIAN_BAG],(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO); -// else - FLASH_Write(APP2_ADRESS+ONE_BAG_DAXIAO*RX_Buffer[MUQIAN_BAG],(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO); - + result12=FLASH_Write(APP2_ADRESS+ONE_BAG_DAXIAO*RX_Buffer[MUQIAN_BAG],(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO); + while(result12==0) + { + result12=FLASH_Write(APP2_ADRESS+ONE_BAG_DAXIAO*RX_Buffer[MUQIAN_BAG],(uint8_t*)Zhongjian_data,ONE_BAG_DAXIAO); + delay_ms(10); + } + if(result12) muqiandeshengjibao++; } + __enable_irq(); } else { @@ -526,10 +566,11 @@ if(muqiandeshengjibao==final_bag_num) { uint16_t tmp11 ,result11; - tmp11=0XBB; + tmp11=0XCC; result11 = FLASH_Prepare(APP_1OR2_ADRESS, PAGE_SIZE); if(result11) - result11 = FLASH_Write(APP_1OR2_ADRESS, (const uint8_t*)&tmp11, 2); + result11 = FLASH_Write(APP_1OR2_ADRESS, (const uint8_t*)&tmp11, 2); + __disable_irq(); Delay_Ms(1500); HAL_NVIC_SystemReset(); } -- Gitblit v1.9.3