1
WXK
2024-01-26 eeea481d10c49eeff6a2cafa9b49d4fce3ace8f8
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;