From 36667ff9eed83df5f6460d596220908afc9b9a11 Mon Sep 17 00:00:00 2001 From: yincheng.zhong <634916154@qq.com> Date: 星期二, 07 五月 2024 19:31:50 +0800 Subject: [PATCH] 改成中断触发模式,但是还是有BUG,会死机,还会有临近基站不测距的问题。 --- Src/main.c | 124 +++++++++++++++++++++++++++++++++-------- 1 files changed, 99 insertions(+), 25 deletions(-) diff --git a/Src/main.c b/Src/main.c index dbdb8ad..1e080a8 100644 --- a/Src/main.c +++ b/Src/main.c @@ -87,6 +87,8 @@ SPI_HandleTypeDef hspi1; +TIM_HandleTypeDef htim6; + /* USER CODE BEGIN PV */ /* USER CODE END PV */ @@ -102,6 +104,7 @@ static void MX_SPI1_Init(void); static void MX_LPUART1_UART_Init(void); static void MX_USART5_UART_Init(void); +static void MX_TIM6_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -311,7 +314,7 @@ 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)|21; + g_com_map[VERSION] = (1<<8)|23; // g_com_map[DEV_ID]=1158; // #ifdef DEBUG_MODE // // g_com_map[GROUP_ID]=21; @@ -435,28 +438,41 @@ HAL_ADC_DeInit(&hadc); HAL_ADCEx_DisableVREFINT(); } +extern u8 gps_chafenlingqi; uint16_t irq_num; +u8 lora_irq_flag,lora_working_flag; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == RADIO_DIO1_Pin) { - SystemClock_Config(); - irq_num++; - RadioIrqProcess(); + + // SystemClock_Config(); + // irq_num++; + lora_irq_flag = 1; + // RadioIrqProcess(); } if(GPIO_Pin == GPIO_PIN_1)//按键 { - SystemClock_Config(); + // SystemClock_Config(); anjian_flag=1; } if(GPIO_Pin == GPIO_PIN_0)//加速度 { - SystemClock_Config(); + // SystemClock_Config(); if(chongqi_flag==1) { HAL_NVIC_SystemReset(); } nomove_count = 0; + } + if(GPIO_Pin == GPIO_PIN_9)//UWB + { + if(!HAL_GPIO_ReadPin( RADIO_NSS_GPIO_Port, RADIO_NSS_Pin)) + { + gps_chafenlingqi++; + return; + } + MbxTagUwbRec(); } } extern void Lora_tx_zubao( void ); @@ -668,15 +684,16 @@ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ - MX_GPIO_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_DMA_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_ADC_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_LPTIM1_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_USART1_UART_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_SPI1_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_LPUART1_UART_Init();//看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 -// MX_IWDG_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 - MX_USART5_UART_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 + MX_GPIO_Init(); + MX_DMA_Init(); + MX_ADC_Init(); + // MX_IWDG_Init(); + MX_LPTIM1_Init(); + MX_USART1_UART_Init(); + MX_SPI1_Init(); + MX_LPUART1_UART_Init(); + MX_USART5_UART_Init(); + MX_TIM6_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //开GPS电源 delay_ms(10); @@ -710,6 +727,7 @@ { Error_Handler(); } + HAL_TIM_Base_Start_IT(&htim6); /* USER CODE END 2 */ /* Infinite loop */ @@ -728,6 +746,13 @@ else { // HAL_IWDG_Refresh(&hiwdg); + if(lora_irq_flag) + { + lora_irq_flag = 0; + lora_working_flag = 1; + RadioIrqProcess(); + lora_working_flag = 0; + } Lpuart_rx_Poll(); OneSecondTask(); IdleTask(); @@ -1100,6 +1125,44 @@ } /** + * @brief TIM6 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM6_Init(void) +{ + + /* USER CODE BEGIN TIM6_Init 0 */ + + /* USER CODE END TIM6_Init 0 */ + + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM6_Init 1 */ + + /* USER CODE END TIM6_Init 1 */ + htim6.Instance = TIM6; + htim6.Init.Prescaler = 32-1; + htim6.Init.CounterMode = TIM_COUNTERMODE_UP; + htim6.Init.Period = 1000-1; + htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim6) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM6_Init 2 */ + + /* USER CODE END TIM6_Init 2 */ + +} + +/** * Enable DMA controller clock */ static void MX_DMA_Init(void) @@ -1136,8 +1199,8 @@ /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_7|GPIO_PIN_8, GPIO_PIN_RESET); - - /*Configure GPIO pin O__set_MSPutput Level */ + + /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, RADIO_NSS_Pin|RADIO_nRESET_Pin|GPIO_PIN_4, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ @@ -1209,18 +1272,18 @@ GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pins : PC9 RADIO_DIO1_Pin */ + GPIO_InitStruct.Pin = GPIO_PIN_9|RADIO_DIO1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pins : PA8 PA12 PA15 */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_12|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pin : RADIO_DIO1_Pin */ - GPIO_InitStruct.Pin = RADIO_DIO1_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(RADIO_DIO1_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : INPUT_5V_Pin */ GPIO_InitStruct.Pin = INPUT_5V_Pin; @@ -1293,11 +1356,12 @@ } } #define NOGPS_RESET_TIME 300 +u8 state_count = 0; void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) { if(chongqi_flag==0&&shengji_flag==0) { - SystemClock_Config(); +// SystemClock_Config(); Set4LEDColor(uwbled,gpsled,loraled,powerled); //代码有BUG需要执行2次,否则电源灯不亮 Set4LEDColor(uwbled,gpsled,loraled,powerled); //Set4LEDColor(powerled,loraled,gpsled,uwbled); @@ -1312,6 +1376,17 @@ {HAL_NVIC_SystemReset();} } Yuying_Poll(); + state_count++; + switch(state_count) + { + case 0: + + break; + case 1: + break; + case 2: + break; + } Lora_send_flag=1; if(nomove_count++>g_com_map[STATIONARY_TIME]) { @@ -1334,7 +1409,6 @@ // uwbled=LEDOFF; // Set4LEDColor_Off(); } - HAL_IWDG_Refresh(&hiwdg); } /* USER CODE END 4 */ -- Gitblit v1.9.3