Exercise #5. Data Input/Output. Serial Interfaces∗
Description∗
Написать программу для подсчета и отображения количества нажатий на кнопку USER_BUTTON (PA0).
Guidance∗
Использовать Git.
Использовать следующие названия директорий:
exercise05
- для проекта решения основной задачи;exercise05extra
- для проекта решения дополнительной (extra) задачи;src
- для исходников;bin
- для расположения бинарного файла прошивки (необходимо сохранить в репозитории).Периодически отправлять изменения в удаленный репозиторий, соответствующий Вашей фамилии.
-
Количество нажатий по модулю 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).
-
Убедиться в наличии эффекта дребезга контактов кнопки.
-
Доработать программу для устранения дребезга контактов кнопки.
-
Реализовать обработку нажатий на кнопку с использованием прерываний, а также подавления дребезга контактов.
Extra∗
Написать программу для управления яркостью светодиодов.
-
Установить следующие уровни яркости свечения светодиодов:
- Green (PD12) - 25%
- Orange (PD13) - 50%
- Red (PD14) - 75%
- Blue (PD15) - 100%
-
Каждый раз при нажатии на кнопку USER_BUTTON (PA0) уменьшать яркость свечения всех светодиодов на 10%. Следовательно после 10 нажатий все светодиоды должны быть погашены.
-
При обработке нажатий на кнопку обеспечить подавление "дребезга" контактов.
Пример установки значения 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);
}