Skip to content

Exercise #5. Data Input/Output. Serial Interfaces


Description

Написать программу для подсчета и отображения количества нажатий на кнопку USER_BUTTON (PA0).


Guidance

Использовать Git.

Использовать следующие названия директорий: exercise05 - для проекта решения основной задачи; exercise05extra - для проекта решения дополнительной (extra) задачи; src - для исходников; bin - для расположения бинарного файла прошивки (необходимо сохранить в репозитории).

Периодически отправлять изменения в удаленный репозиторий, соответствующий Вашей фамилии.

  1. Количество нажатий по модулю 5 отображать на светодиодах следующим образом:

    • 0 - все светодиоды выключены;
    • 1 - горит только Green (PD12);
    • 2 - горят Green (PD12) и Orange (PD13);
    • 3 - горят Green (PD12), Orange (PD13) и Red (PD14);
    • 4 - горят Green (PD12), Orange (PD13), Red (PD14) и Blue (PD15).
  2. Убедиться в наличии эффекта дребезга контактов кнопки.

  3. Доработать программу для устранения дребезга контактов кнопки.

  4. Реализовать обработку нажатий на кнопку с использованием прерываний, а также подавления дребезга контактов.


Extra

Написать программу для управления яркостью светодиодов.

  1. Установить следующие уровни яркости свечения светодиодов:

    • Green (PD12) - 25%
    • Orange (PD13) - 50%
    • Red (PD14) - 75%
    • Blue (PD15) - 100%
  2. Каждый раз при нажатии на кнопку USER_BUTTON (PA0) уменьшать яркость свечения всех светодиодов на 10%. Следовательно после 10 нажатий все светодиоды должны быть погашены.

  3. При обработке нажатий на кнопку обеспечить подавление "дребезга" контактов.

Пример установки значения PWM
static void setTIM4PWM(int value, uint32_t Channel)
{
    TIM_OC_InitTypeDef sConfigOC = { 0 };

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, Channel) != HAL_OK) {
          Error_Handler();
    }
    HAL_TIM_PWM_Start(&htim4, Channel);
}