zhyinch
2022-07-14 20bdb4be1fc4676cceaf09456b5ff4b648f4a4a4
Src/main.c
@@ -57,7 +57,7 @@
SPI_HandleTypeDef hspi1;
TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim21;
UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;
@@ -75,7 +75,7 @@
static void MX_SPI1_Init(void);
static void MX_ADC_Init(void);
static void MX_DMA_Init(void);
static void MX_TIM2_Init(void);
static void MX_TIM21_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
@@ -217,7 +217,7 @@
   if(result)
      result = FLASH_Write(0x8004A38, (const uint8_t*)&tmp, 2); 
   __enable_irq();
      printf("进入升级模式\r\n");
      //printf("进入升级模式\r\n");
   g_com_map[CNT_UPDATE]=0;
   save_com_map_to_flash();
   delay_ms(100);
@@ -281,7 +281,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] = 2<<8|48;;
   g_com_map[VERSION] = 2<<8|49;
    
//   g_com_map[DEV_ID]=0x7;
#ifdef DEBUG_MODE
@@ -352,53 +352,32 @@
void HardWareTypeDiffConfig(void)
{
   GPIO_InitTypeDef GPIO_InitStruct = {0};
//   if(g_com_map[MOTORBEEPER_INDEX]!=1&&g_com_map[MOTORBEEPER_INDEX]!=2)
//   {
         g_com_map[MOTORBEEPER_INDEX] = 1;
//   }
   hardware_type   = g_com_map[MOTORBEEPER_INDEX];
   switch(hardware_type)
      {
        case 1:
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
            GPIO_InitStruct.Pin = GPIO_PIN_11;
            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);
                  //motor_keeptime = 10;
         break;
      case 2:
         MX_TIM2_Init();
         break;
      }
//   GPIO_InitTypeDef GPIO_InitStruct = {0};
////   if(g_com_map[MOTORBEEPER_INDEX]!=1&&g_com_map[MOTORBEEPER_INDEX]!=2)
////   {
//         g_com_map[MOTORBEEPER_INDEX] = 2;
////   }
//   hardware_type   = g_com_map[MOTORBEEPER_INDEX];
//   switch(hardware_type)
//      {
//        case 1:
//            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
//            GPIO_InitStruct.Pin = GPIO_PIN_11;
//            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);
//                  //motor_keeptime = 10;
//         break;
//      case 2:
//         MX_TIM2_Init();
//         break;
//      }
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
      //SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
}
void BeeperTask(void)
{   if(g_com_map[MOTOR_ENABLE])
{
   if(motor_keeptime>0)
      {
         motor_state = 2;
      }else{
         motor_state = 0;
      }
   current_time=GetLPTime();
   while(motor_keeptime>0)
   {
   currentcount=HAL_LPTIM_ReadCounter(&hlptim1);
   if(currentcount-beepcount>3||beepcount>currentcount)
   {
      beepcount = currentcount;
      LED_BLINK(GPIOA, GPIO_PIN_11);
   }
   }
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
}}
/* USER CODE END 0 */
/**
@@ -424,17 +403,17 @@
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
     MX_DMA_Init();
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_LPTIM1_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_SPI1_Init();
  MX_ADC_Init();
  //MX_TIM2_Init();
 // MX_DMA_Init();
  MX_TIM21_Init();
  /* USER CODE BEGIN 2 */
   LED_LG_ON;
   Program_Init();
@@ -470,7 +449,7 @@
//      {
//      MODBUS_Poll();
//      }
if(m_bEUARTTxEn==0&&(motor_state==0||motor_state==3))
if(m_bEUARTTxEn==0&&(motor_keeptime==0))
         {   
#ifndef DEBUG_MODE   
            if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
@@ -500,8 +479,7 @@
      }
         __enable_irq();
      //LED0_BLINK;      
      IdleTask();
      BeeperTask();
      IdleTask();
      if(waitusart_timer>0)
      {
         waitusart_timer--;
@@ -702,65 +680,61 @@
}
/**
  * @brief TIM2 Initialization Function
  * @brief TIM21 Initialization Function
  * @param None
  * @retval None
  */
static void MX_TIM2_Init(void)
static void MX_TIM21_Init(void)
{
  /* USER CODE BEGIN TIM2_Init 0 */
  /* USER CODE BEGIN TIM21_Init 0 */
  /* USER CODE END TIM2_Init 0 */
  /* USER CODE END TIM21_Init 0 */
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};
  /* USER CODE BEGIN TIM2_Init 1 */
  /* USER CODE BEGIN TIM21_Init 1 */
  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 9;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 1171;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  /* USER CODE END TIM21_Init 1 */
  htim21.Instance = TIM21;
  htim21.Init.Prescaler = 9;
  htim21.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim21.Init.Period = 1171;
  htim21.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim21.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim21) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  if (HAL_TIM_ConfigClockSource(&htim21, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
  if (HAL_TIM_PWM_Init(&htim21) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  if (HAL_TIMEx_MasterConfigSynchronization(&htim21, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 599;
  sConfigOC.Pulse = 585;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  if (HAL_TIM_PWM_ConfigChannel(&htim21, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM2_Init 2 */
//if(HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3) != HAL_OK)
//  {
//    /* Starting Error */
//    Error_Handler();
//  }
  /* USER CODE END TIM2_Init 2 */
  HAL_TIM_MspPostInit(&htim2);
  /* USER CODE BEGIN TIM21_Init 2 */
  /* USER CODE END TIM21_Init 2 */
  HAL_TIM_MspPostInit(&htim21);
}
@@ -843,10 +817,10 @@
  __HAL_RCC_GPIOB_CLK_ENABLE();
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, SPI_CS_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOA, SPI_CS_Pin|SCL_Pin, GPIO_PIN_SET);
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, SCL_Pin|SDA_Pin|BAT_MEAS_GND_Pin|PWR_CTL_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|SDA_Pin|PWR_CTL_Pin, GPIO_PIN_SET);
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, LED1_G_Pin|LED1_R_Pin|LED2_R_Pin, GPIO_PIN_RESET);
@@ -860,13 +834,6 @@
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  /*Configure GPIO pins : SCL_Pin SDA_Pin */
  GPIO_InitStruct.Pin = SCL_Pin|SDA_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);
  /*Configure GPIO pin : SPI_CS_Pin */
  GPIO_InitStruct.Pin = SPI_CS_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@@ -874,24 +841,18 @@
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(SPI_CS_GPIO_Port, &GPIO_InitStruct);
  /*Configure GPIO pin : BAT_MEAS_GND_Pin */
  GPIO_InitStruct.Pin = BAT_MEAS_GND_Pin;
  /*Configure GPIO pins : BAT_MEAS_GND_Pin SDA_Pin */
  GPIO_InitStruct.Pin = BAT_MEAS_GND_Pin|SDA_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(BAT_MEAS_GND_GPIO_Port, &GPIO_InitStruct);
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  /*Configure GPIO pin : USER_KEY_Pin */
  GPIO_InitStruct.Pin = USER_KEY_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(USER_KEY_GPIO_Port, &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 : LED1_G_Pin LED1_R_Pin LED2_R_Pin PWR_CTL_Pin */
  GPIO_InitStruct.Pin = LED1_G_Pin|LED1_R_Pin|LED2_R_Pin|PWR_CTL_Pin;
@@ -906,6 +867,19 @@
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  /*Configure GPIO pin : SCL_Pin */
  GPIO_InitStruct.Pin = SCL_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);
  /*Configure GPIO pin : INPUT_5V_Pin */
  GPIO_InitStruct.Pin = INPUT_5V_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(INPUT_5V_GPIO_Port, &GPIO_InitStruct);
  /*Configure GPIO pin : PWR_ON_Pin */
  GPIO_InitStruct.Pin = PWR_ON_Pin;
@@ -949,6 +923,27 @@
extern uint8_t tx_near_msg[80],stationary_flag,gotosleep_flag;
float key_keeptime;
extern float motor_ontime;
void BeeperTask(void)
{   static u8 beeper_state = 0;
    if(g_com_map[MOTOR_ENABLE])
{
    if(motor_keeptime>0)
    {
        motor_keeptime-=1/(float)tag_frequency;
    }
       if(motor_keeptime>0&&beeper_state==0)
   {
        HAL_TIM_PWM_Start(&htim21, TIM_CHANNEL_2);
        beeper_state = 1;
   }
    if(motor_keeptime<=0&&beeper_state==1)
    {
        beeper_state = 0;
        motor_keeptime = 0;
        HAL_TIM_PWM_Stop(&htim21, TIM_CHANNEL_2);
    }
}}
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
   static uint8_t i=0;
@@ -957,12 +952,7 @@
//   current_slotnum++;
//   SetNextPollTime(tagslotpos);
   nomove_count+=1/(float)tag_frequency;
   if(motor_keeptime>0)
   {
   motor_keeptime-=1/(float)tag_frequency*2;
   }
    if(motor_keeptime<0)
    {motor_keeptime = 0;}
    BeeperTask();
   if(active_flag==0)
   {
   if(!GET_USERKEY)