From eeea481d10c49eeff6a2cafa9b49d4fce3ace8f8 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期五, 26 一月 2024 10:43:46 +0800 Subject: [PATCH] 1 --- Src/main.c | 219 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 169 insertions(+), 50 deletions(-) diff --git a/Src/main.c b/Src/main.c index a3598de..b6895ec 100644 --- a/Src/main.c +++ b/Src/main.c @@ -40,6 +40,7 @@ #define GP 0x0002 #define FLASH_HARDWARE_VERSION_MAP (uint32_t)0x08004F00 //硬件版本号和批次信息位置 #define DEBUG_MODE +UART_WakeUpTypeDef Selection; /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -65,11 +66,12 @@ LPTIM_HandleTypeDef hlptim1; -SPI_HandleTypeDef hspi1; - +UART_HandleTypeDef hlpuart1; UART_HandleTypeDef huart1; DMA_HandleTypeDef hdma_usart1_rx; DMA_HandleTypeDef hdma_usart1_tx; + +SPI_HandleTypeDef hspi1; /* USER CODE BEGIN PV */ @@ -84,6 +86,7 @@ static void MX_ADC_Init(void); static void MX_DMA_Init(void); static void MX_IWDG_Init(void); +static void MX_LPUART1_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -387,13 +390,7 @@ uint32_t temp; extern uint8_t sleep_flag,m_bEUARTTxEn; uint16_t waitusart_timer; -//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) -//{ -// /* Set transmission flag: trasfer complete*/ -// waitusart_timer = tag_frequency*USART_KEEPWAKE_TIME; -// -//} void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { //SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader @@ -547,6 +544,85 @@ { MX_ADC_Init(); } +#define BleRxBufferSize 1 +uint8_t aRxBuffer[1],group_id,BleRxBuffer[BleRxBufferSize]; +uint8_t ble_rx_success_flag; +uint8_t fangzhijinrushuimian_flag; +uint8_t ble_rxzhongzhuandate[50]; +uint8_t ble_zhongzhuannum; +uint8_t ble_rxdate[50]={1,2,3,4,5,6,7,8,9}; +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ +// HAL_UART_Transmit(&hlpuart1,(uint8_t*)ble_rxdate11111,3,1000); +// uint8_t ble_rxzhongzhuandate[50]; +// uint8_t ble_zhongzhuannum; +// if(lp_time>3) + { + ble_rxzhongzhuandate[ble_zhongzhuannum]=BleRxBuffer[0]; + ble_zhongzhuannum++; + if(ble_rxzhongzhuandate[ble_zhongzhuannum-1]==0x0A&&ble_rxzhongzhuandate[ble_zhongzhuannum-2]==0x0D) + { +// HAL_UART_Transmit(&hlpuart1,ble_rxdate,5,1000); + ble_zhongzhuannum=0; + memcpy(ble_rxdate,ble_rxzhongzhuandate,50); + memset(ble_rxzhongzhuandate,0,sizeof(ble_rxzhongzhuandate)); + fangzhijinrushuimian_flag=0; + ble_rx_success_flag=1; + } + HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)BleRxBuffer, 1); +// if(huart->Instance == hlpuart.Instance) +// { //if(huart == &huart3) +// g_uart3_rx_status = SET; +// } + } +} +uint8_t ble_rxdate111[3]={0x11,0x22,0x33}; +void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart) +{ + SystemClock_Config(); +// HAL_UART_Transmit(&hlpuart1,(uint8_t*)ble_rxdate111,3,1000); +//// huart->RxState = HAL_UART_STATE_BUSY_RX; +// ble_rxzhongzhuandate[ble_zhongzhuannum]=BleRxBuffer[0]; +// ble_zhongzhuannum++; +// if(ble_rxzhongzhuandate[ble_zhongzhuannum-1]==0x0A&&ble_rxzhongzhuandate[ble_zhongzhuannum-2]==0x0D) +// { +// ble_zhongzhuannum=0; +// memcpy(ble_rxdate,ble_rxzhongzhuandate,50); +// memset(ble_rxzhongzhuandate,0,sizeof(ble_rxzhongzhuandate)); +// } +// if(lp_time>3) + fangzhijinrushuimian_flag=1; + HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)BleRxBuffer, 1); +// HAL_UART_Transmit(&hlpuart1,ble_rxdate,2,1000); +} +void Ble_rx_Poll() +{ + if(ble_rx_success_flag) + { + ble_rx_success_flag=0; + if(ble_rxdate[0]==0x55&&ble_rxdate[1]==0xAA&&ble_rxdate[5]==0x0D&&ble_rxdate[6]==0x0A) + { + if(ble_rxdate[2]==0x01) + { + memcpy(&g_com_map[NEARBASE_ID1],&ble_rxdate[3],2); + save_com_map_to_flash(); + delay_ms(100); +// NVIC_SystemReset(); + } + if(ble_rxdate[3]==0x02) + { + memcpy(&g_com_map[NEARBASE_ID2],&ble_rxdate[4],2); + save_com_map_to_flash(); + delay_ms(100); +// NVIC_SystemReset(); + } + + + } + HAL_UART_Transmit(&hlpuart1,ble_rxdate,10,1000); + memset(ble_rxdate,0,sizeof(ble_rxdate)); + } +} /* USER CODE END 0 */ /** @@ -583,7 +659,8 @@ MX_SPI1_Init(); MX_ADC_Init(); -// MX_IWDG_Init(); + MX_IWDG_Init(); + MX_LPUART1_UART_Init(); /* USER CODE BEGIN 2 */ // LED_LG_ON; Program_Init(); @@ -614,6 +691,7 @@ usart_send[1]=0xaa; bat_percent=Get_VDDVlotage(); GetLoratx_frequency(); + HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)BleRxBuffer, 1); // Lora47X_Init(); // mcu_sleep(); //LED0_BLINK; @@ -634,15 +712,26 @@ //Lora_rx_open(); // Lora_Tx_Poll(); Lora_Tx_Poll(); -// HAL_IWDG_Refresh(&hiwdg); - IdleTask(); + Ble_rx_Poll(); + HAL_IWDG_Refresh(&hiwdg); +// IdleTask(); // Radio.IrqProcess( ); // Process Radio IRQ // Anchor_App(); - #ifndef DEBUG_MODE - if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) +// #ifndef DEBUG_MODE +// if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) +// { + if(fangzhijinrushuimian_flag==0) + { + Selection.WakeUpEvent = UART_WAKEUP_ON_STARTBIT; + HAL_UARTEx_EnableClockStopMode(&hlpuart1); + HAL_UARTEx_EnableStopMode( &hlpuart1 ); + HAL_UARTEx_StopModeWakeUpSourceConfig( &hlpuart1, Selection ); + __HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_WUF); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); - #endif + } +// } +// #endif } /* USER CODE END 3 */ @@ -694,8 +783,10 @@ { Error_Handler(); } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_LPTIM1; + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_LPUART1 + |RCC_PERIPHCLK_LPTIM1; PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_LSE; PeriphClkInit.LptimClockSelection = RCC_LPTIM1CLKSOURCE_LSE; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) @@ -824,40 +915,36 @@ } /** - * @brief SPI1 Initialization Function + * @brief LPUART1 Initialization Function * @param None * @retval None */ -static void MX_SPI1_Init(void) +static void MX_LPUART1_UART_Init(void) { - /* USER CODE BEGIN SPI1_Init 0 */ + /* USER CODE BEGIN LPUART1_Init 0 */ - /* USER CODE END SPI1_Init 0 */ + /* USER CODE END LPUART1_Init 0 */ - /* USER CODE BEGIN SPI1_Init 1 */ + /* USER CODE BEGIN LPUART1_Init 1 */ - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 7; - if (HAL_SPI_Init(&hspi1) != HAL_OK) + /* USER CODE END LPUART1_Init 1 */ + hlpuart1.Instance = LPUART1; + hlpuart1.Init.BaudRate = 9600; + hlpuart1.Init.WordLength = UART_WORDLENGTH_8B; + hlpuart1.Init.StopBits = UART_STOPBITS_1; + hlpuart1.Init.Parity = UART_PARITY_NONE; + hlpuart1.Init.Mode = UART_MODE_TX_RX; + hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&hlpuart1) != HAL_OK) { Error_Handler(); } - /* USER CODE BEGIN SPI1_Init 2 */ -__HAL_SPI_ENABLE(&hspi1); - /* USER CODE END SPI1_Init 2 */ + /* USER CODE BEGIN LPUART1_Init 2 */ + + /* USER CODE END LPUART1_Init 2 */ } @@ -909,6 +996,44 @@ } /** + * @brief SPI1 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI1_Init(void) +{ + + /* USER CODE BEGIN SPI1_Init 0 */ + + /* USER CODE END SPI1_Init 0 */ + + /* USER CODE BEGIN SPI1_Init 1 */ + + /* USER CODE END SPI1_Init 1 */ + /* SPI1 parameter configuration*/ + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 7; + if (HAL_SPI_Init(&hspi1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI1_Init 2 */ +__HAL_SPI_ENABLE(&hspi1); + /* USER CODE END SPI1_Init 2 */ + +} + +/** * Enable DMA controller clock */ static void MX_DMA_Init(void) @@ -946,8 +1071,8 @@ HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|SDA_Pin|SCL_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10|LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14 - |RADIO_nRESET_Pin|RADIO_NSS_Pin|GPIO_PIN_7, GPIO_PIN_RESET); + 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 pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8|DW_CTRL_Pin|LED2_G_Pin, GPIO_PIN_RESET); @@ -984,20 +1109,14 @@ GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(RADIO_BUSY_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PB10 LED1_G_Pin LED1_R_Pin PB14 - RADIO_nRESET_Pin RADIO_NSS_Pin PB7 */ - GPIO_InitStruct.Pin = GPIO_PIN_10|LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14 - |RADIO_nRESET_Pin|RADIO_NSS_Pin|GPIO_PIN_7; + /*Configure GPIO pins : LED1_G_Pin LED1_R_Pin PB14 RADIO_nRESET_Pin + RADIO_NSS_Pin PB7 */ + GPIO_InitStruct.Pin = LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14|RADIO_nRESET_Pin + |RADIO_NSS_Pin|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /*Configure GPIO pin : INPUT_5V_Pin */ - GPIO_InitStruct.Pin = INPUT_5V_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(INPUT_5V_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : PA8 DW_CTRL_Pin LED2_G_Pin */ GPIO_InitStruct.Pin = GPIO_PIN_8|DW_CTRL_Pin|LED2_G_Pin; -- Gitblit v1.9.3