Ejemplo n.º 1
0
/**
 * @brief   Callback for the beep timer
 * @param   None
 * @retval  None
 */
static void prvBuzzerBeepTimerCallback()
{
  /* Only beep if we should beep */
  if (prvCurrentSettings.numOfBeeps != 0)
  {
    prvCurrentSettings.numOfBeeps--;
    /* Check if we were beeping last time or not */
    if (prvBuzzerIsOn)
    {
      prvBuzzerIsOn = false;
      BUZZER_Off();
    }
    else
    {
      prvBuzzerIsOn = true;
      BUZZER_TIMER->BUZZER_CCR_REGISTER = (uint16_t)(prvCurrentSettings.volume/200.0 * (BUZZER_PERIOD));
    }
    xTimerStart(prvBuzzerBeepTimer, 100);
  }
  /* Otherwise turn it off */
  else
  {
    prvBuzzerIsOn = false;
    BUZZER_Off();
  }
}
Ejemplo n.º 2
0
/**
 * @brief	Callback for the beep timer
 * @param	None
 * @retval	None
 */
static void prvBuzzerBeepTimerCallback()
{
    /* Only beep if we should beep */
    if (prvCurrentSettings.numOfBeeps != 0)
    {
        prvCurrentSettings.numOfBeeps--;
        /* Check if we were beeping last time or not */
        if (prvBuzzerIsOn)
        {
            prvBuzzerIsOn = false;
            BUZZER_Off();
        }
        else
        {
            prvBuzzerIsOn = true;
            BUZZER_SetVolume(prvCurrentSettings.volume);
        }
        xTimerStart(prvBuzzerBeepTimer, 100);
    }
    /* Otherwise turn it off */
    else
    {
        prvBuzzerIsOn = false;
        BUZZER_Off();
    }
}
Ejemplo n.º 3
0
/**
 * @brief   Initialize the buzzer
 * @param   None
 * @retval  None
 */
void BUZZER_Init()
{
  /* Create software timers */
  if (prvBuzzerBeepTimer == 0)
    prvBuzzerBeepTimer = xTimerCreate("BuzzerBeep", prvCurrentSettings.delayBetweenBeeps, pdFALSE, 0, prvBuzzerBeepTimerCallback);

  /* Enable TIMER Clock */
  BUZZER_TIMER_CLK_ENABLE;

  /* Enable GPIO Clock */
  BUZZER_GPIO_CLK_ENABLE;

  /* Configure the GPIO as alternate function */
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.Pin        = BUZZER_PIN;
  GPIO_InitStructure.Mode       = GPIO_MODE_AF_PP;
  GPIO_InitStructure.Alternate  = BUZZER_AF_GPIO;
  GPIO_InitStructure.Pull       = GPIO_NOPULL;
  GPIO_InitStructure.Speed      = GPIO_SPEED_LOW;
  HAL_GPIO_Init(BUZZER_PORT, &GPIO_InitStructure);

  /* Timer init */
  prvTimerHandle.Instance           = BUZZER_TIMER;
  prvTimerHandle.Init.Period        = BUZZER_PERIOD;
  prvTimerHandle.Init.Prescaler     = prvGetPrescalerForFrequency(prvCurrentSettings.frequency);
  prvTimerHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  prvTimerHandle.Init.CounterMode   = TIM_COUNTERMODE_UP;
  HAL_TIM_PWM_Init(&prvTimerHandle);

  /* Output compare init */
  TIM_OC_InitTypeDef timerOutputCompare;
  timerOutputCompare.OCMode       = TIM_OCMODE_PWM1;
  timerOutputCompare.Pulse        = BUZZERVolume_Off;
  timerOutputCompare.OCPolarity   = TIM_OCPOLARITY_HIGH;
  timerOutputCompare.OCNPolarity  = TIM_OCNPOLARITY_HIGH;
  timerOutputCompare.OCFastMode   = TIM_OCFAST_DISABLE;
  timerOutputCompare.OCIdleState  = TIM_OCIDLESTATE_SET;
  timerOutputCompare.OCNIdleState = TIM_OCNIDLESTATE_SET;
  HAL_TIM_PWM_ConfigChannel(&prvTimerHandle, &timerOutputCompare, BUZZER_TIMER_CHANNEL);

  /* Start the PWM */
  HAL_TIM_PWM_Start(&prvTimerHandle, BUZZER_TIMER_CHANNEL);


  BUZZER_Off();
}