From f0e236adc153a6d06874704ec6ba39a22af05ff6 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 15 一月 2025 14:54:55 +0800 Subject: [PATCH] 1.25,修改看门狗喂狗时间。加入休眠后加速度计唤醒会直接重启 --- Src/main.c | 310 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 218 insertions(+), 92 deletions(-) diff --git a/Src/main.c b/Src/main.c index 4ea6108..eda5382 100644 --- a/Src/main.c +++ b/Src/main.c @@ -86,10 +86,10 @@ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); -static void MX_USART1_UART_Init(void); +static void MX_DMA_Init(void); static void MX_SPI1_Init(void); static void MX_ADC_Init(void); -static void MX_DMA_Init(void); +static void MX_USART1_UART_Init(void); static void MX_IWDG_Init(void); static void MX_TIM2_Init(void); static void MX_LPUART1_UART_Init(void); @@ -100,11 +100,11 @@ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ +void LedTask(void); uint32_t dev_id; uint16_t heartbeat_timer,poll_timer,sync_timer; uint8_t aRxBuffer[1],group_id; uint8_t bat_percent=0,g_start_send_flag; -extern u8 motor_state; uint16_t tyncpoll_time,lpsettime; uint16_t slottime,max_slotpos; uint16_t lastpoll_count,interval_count,slot_startcount,tag_frequency,lastpoll_time; @@ -158,9 +158,10 @@ uint8_t state5v = 1; extern uint8_t du_flag; extern uint8_t xie_flag; -float motor_keeptime; +uint16_t motor_keeptime; void IdleTask(void) { + if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) { UART_CheckReceive(); @@ -172,15 +173,17 @@ state5v=1; UsartInit(); } + HAL_IWDG_Refresh(&hiwdg); if(bat_percent>99) { - LED2_TR_OFF; - LED2_TB_ON; + LED_TR_OFF; + LED_TB_ON; } else { - LED2_TR_ON; - LED2_TB_OFF; + LED_TR_ON; + LED_TB_OFF; } } else { + HAL_IWDG_Refresh(&hiwdg); if(state5v==1) { state5v=0; @@ -194,44 +197,13 @@ { SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader } + if(memcmp(g_com_map2,g_com_map,100)!=0) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } } - - -/* 返回ch字符在sign数组中的序号 */ -int getIndexOfSigns(char ch) -{ - if(ch >= '0' && ch <= '9') - { - return ch - '0'; - } - if(ch >= 'A' && ch <='F') - { - return ch - 'A' + 10; - } - if(ch >= 'a' && ch <= 'f') - { - return ch - 'a' + 10; - } - return -1; -} -/* 十六进制数转换为十进制数 */ -long hexToDec(char *source) -{ - long sum = 0; - long t = 1; - int i, len; - - len = strlen(source); - for(i=len-1; i>=0; i--) - { - sum += t * getIndexOfSigns(*(source + i)); - t *= 16; - } - - return sum; -} //u32 Loratx_frequency; u8 active_flag,nomovesleeptime; @@ -247,17 +219,20 @@ hardware_pici = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP+2); hardware_type = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP+4); //deca_sleep(1000); - g_com_map[VERSION] = (1<<8)|3; + g_com_map[VERSION] = (1<<8)|25; // g_com_map[DEV_ID]=1158; - g_com_map[GROUP_ID]=0; + g_com_map[GROUP_ID]=3; // g_com_map[COM_INTERVAL] = 1000; if(g_com_map[COM_INTERVAL]<1000) { g_com_map[COM_INTERVAL] = 1000; } + g_com_map[STATIONARY_TIME] = 10; + g_com_map[LORA_POWER] = 22; + g_com_map[POWER] = 67; active_flag = g_com_map[ACTIVE_INDEX]; module_power = g_com_map[POWER]; - g_com_map[IMU_ENABLE] = 0; +// g_com_map[IMU_ENABLE] = 0; imu_enable=g_com_map[IMU_ENABLE]; motor_enable=g_com_map[MOTOR_ENABLE]; @@ -291,7 +266,7 @@ module_power=0; } - + g_com_map[MAP_SIGN_INDEX] =0x55AA; memcpy(g_com_map2,g_com_map,COM_MAP_SIZE); } @@ -349,9 +324,20 @@ HAL_ADC_DeInit(&hadc); HAL_ADCEx_DisableVREFINT(); } +uint8_t anjian_num; uint16_t irq_num; +uint16_t irq_num1; +uint8_t uwb_work_flag; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { + if(GPIO_Pin == GPIO_PIN_11) + { + SystemClock_Config(); + uwb_work_flag=1; + irq_num1++; + MbxTagUwbRec(); + } + if(GPIO_Pin == GPIO_PIN_3) { SystemClock_Config(); @@ -362,10 +348,24 @@ { SystemClock_Config(); anjian_flag=1; +// anjian_num++; +// if(anjian_num==2) +// { +// g_com_map[LORA_SEND_INDEX] = !g_com_map[LORA_SEND_INDEX]; +// save_com_map_to_flash(); +// LED_TB_ON; +// LED_TR_ON; +// LED2_TB_ON; +// LED2_TR_ON; +// delay_ms(100); +// SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader +// } } if(GPIO_Pin == GPIO_PIN_0)//加速度 { SystemClock_Config(); + if(sleep_flag) + {HAL_NVIC_SystemReset();} stationary_flag =0; stationary_num=0; } @@ -443,13 +443,32 @@ } uint8_t usart5_state,flag_onesecond; +uint8_t beep_flag; +void BeepTask(void) +{ + if(1)//g_com_map[MOTOR_ENABLE]) + { + if(motor_keeptime>0) + { + motor_keeptime--; + HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); + beep_flag=1; + }else{ + HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_4); + beep_flag=0; + } + } +} void OneSecondTask(void) { if(flag_onesecond==1) { flag_onesecond = 0; + BeepTask(); } } +uint8_t uwb_kaiguanrx_falg; +extern uint8_t uwbrxflag; /* USER CODE END 0 */ /** @@ -480,10 +499,10 @@ /* Initialize all configured peripherals */ MX_GPIO_Init(); - MX_USART1_UART_Init(); +// MX_DMA_Init(); MX_SPI1_Init(); MX_ADC_Init(); - // MX_DMA_Init(); + MX_USART1_UART_Init(); MX_IWDG_Init(); MX_TIM2_Init(); MX_LPUART1_UART_Init(); @@ -495,7 +514,7 @@ Dw1000_Init(); Delay_Ms(10); dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN); - dwt_entersleep(); +// dwt_entersleep(); if(HAL_UART_Receive_DMA(&huart1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE)) { Error_Handler(); @@ -507,7 +526,9 @@ HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)GPSRxBuffer, 1); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); //开GPS电源 LoraInit(); +#ifdef _USE_BAR BarInit(); +#endif // Delay_Ms(1000); // HAL_UART_Transmit(&hlpuart1,Close_RMC,22,1000); // HAL_UART_Transmit(&hlpuart1,Close_GSA,22,1000); @@ -528,12 +549,34 @@ /* USER CODE BEGIN 3 */ // HAL_IWDG_Refresh(&hiwdg); +// if(uwb_work_flag) +// { +// uwb_work_flag=0; +// MbxTagUwbRec(); +// } + if(uwb_kaiguanrx_falg==1) + { + uwb_kaiguanrx_falg=0; + UWB_RXON(); + } + if(uwb_kaiguanrx_falg==2) + { + uwb_kaiguanrx_falg=0; + UWB_RXOFF(); + } OneSecondTask(); IdleTask(); - +// if(g_com_map[LORA_SEND_INDEX]) +// { + Lora_Send_Poll(); +// } + LoraUp_Poll(); #ifndef DEBUG_MODE -if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) - HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + if(beep_flag==0&&uwbrxflag!=1) + { + if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)&&motor_keeptime==0) + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + } #endif } @@ -868,7 +911,7 @@ Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; + sConfigOC.Pulse = 125; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) @@ -926,8 +969,8 @@ HAL_GPIO_WritePin(GPIOB, LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14|RADIO_nRESET_Pin |RADIO_NSS_Pin|GPIO_PIN_7, GPIO_PIN_RESET); - /*Configure GPIO pins : PA0 PA15 */ - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_15; + /*Configure GPIO pins : PA0 PA11 PA15 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_11|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); @@ -1000,6 +1043,9 @@ HAL_NVIC_SetPriority(EXTI2_3_IRQn, 1, 0); HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); + HAL_NVIC_SetPriority(EXTI4_15_IRQn, 1, 0); + HAL_NVIC_EnableIRQ(EXTI4_15_IRQn); + } /* USER CODE BEGIN 4 */ @@ -1027,54 +1073,134 @@ /*Enter the Standby mode*/ HAL_PWR_EnterSTANDBYMode(); } + extern uint8_t tx_near_msg[80]; float key_keeptime; extern float freqlost_count,range_lost_time; extern uint8_t lora_yingda_flag; extern uint32_t wg_lost_count; -uint8_t lora_yingdatime; +uint8_t lora_yingdatime,gotosleep_flag,sleep_flag; extern uint8_t lora_chongfuyingda_flag,report_ancnum; uint16_t no_data_chongqi_num; uint16_t anchor_send_num; -uint8_t no_yingdatime; -void LedTask(void) -{ - if(report_ancnum>0) - { - LED2_TB_ON; - } - // if(wg_lost_count<=1) - { - LED_TB_ON; - } - if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) - if(bat_percent<15) - { - LED_TR_ON; - } - -} +uint8_t no_yingdatime,tflag1,tflag2; +extern uint16_t tagdist_list[ANC_MAX_NUM]; +extern uint8_t Lora_send_flag; +uint8_t Lora_send_time; +extern u8 lora_jianting_flag; void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) { // uint8_t pinlv; SystemClock_Config(); - LedTask(); - LoraReportPoll(); - flag_onesecond = 1; - if(!GET_USERKEY) - { - key_keeptime+=1/(float)tag_frequency; - if(key_keeptime>=KEY_KEEPRESET_TIME) - { - SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; - } - }else{ - key_keeptime=0; - } - LED_TB_OFF; - LED_TR_OFF; - LED2_TB_OFF; - LED2_TR_OFF; +// HAL_IWDG_Refresh(&hiwdg); + anjian_num=0; + if(active_flag==0) //未激活状态 + { + if(!GET_USERKEY) + { + LED_TB_ON; + key_keeptime+=1; + if(key_keeptime>3) + { + u8 i=250,keystate=1; + while(i--) + { + if(i%10==0) + { + LED_TB_BLINK; + } + if(GET_USERKEY) + { + keystate = 0; + } + if(keystate==0&&!GET_USERKEY) + { + parameter_init(); + g_com_map[ACTIVE_INDEX] = 1; + save_com_map_to_flash(); + delay_ms(100); + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader + } + delay_ms(10); + } + } + } else { + // LED_LG_OFF; + key_keeptime=0; + } + + } else { + if(!sleep_flag) + { + Lora_send_time++; + flag_onesecond = 1; + if(lora_jianting_flag) + { + if(Lora_send_time%3==1) + { +// UWB_RXON(); + uwb_kaiguanrx_falg=1; + } + if(Lora_send_time%3==2) + { +// UWB_RXOFF(); + uwb_kaiguanrx_falg=2; + } + } + else + { + uwb_kaiguanrx_falg=0; + UWB_RXOFF(); + } + if(Lora_send_time%3==0) + { + Lora_send_flag=1; + } + +#ifndef DEBUG_MODE + if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&imu_enable&&motor_keeptime==0) + { + if(sleep_flag==0) + { + Radio.Standby(); + Radio.Sleep(); + sleep_flag = 1; + LedOff_task(); + UWB_RXOFF(); + uwb_kaiguanrx_falg=0; + uwbrxflag=0; + } + } +#endif + if(nomove_count++>g_com_map[STATIONARY_TIME]) + { + stationary_flag = 1; + } else { + stationary_flag = 0; + } + if(nomove_count>=g_com_map[NOMOVESLEEP_TIME]-1&&imu_enable) + { + gotosleep_flag=1; + } else { + gotosleep_flag=0; + } + }else{ + if(nomove_count<g_com_map[NOMOVESLEEP_TIME]) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } + } + } + if(!GET_USERKEY) //长按重启逻辑 + { + key_keeptime+=1; + if(key_keeptime>=KEY_KEEPRESET_TIME) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } + } else { + key_keeptime=0; + } } /* USER CODE END 4 */ -- Gitblit v1.9.3