На плате STM32F4Discovery установлена кнопка, которую может использовать пользователь. С помощью библиотеки, описанной в статье, можно опрашивать состояние кнопки. Расширяя таблицу в файле «stm32_ub_button.c» (речь идет о BUTTON_t BUTTON[] – примечание переводчика) можно опрашивать состояние нескольких кнопок. В библиотеке версии 1.1 в файле «stm32_ub_button.h», может быть включена функция защиты от дребезга контактов, которая использует таймер. В библиотеке используются функции "OnPressed", "OnClick" и "OnReleased" которые возвращают "true", когда происходит событие.
Пользовательская кнопка подключена к выводу PA0.
Требования:
- Подключаемые модули CooCox-IDE : GPIO, (TIM, MISC).
- Поддерживаемые библиотеки: отсутствуют.
Перечисления:
typedef enum { BTN_USER = 0 // BTN1 на STM32F4-Discovery }BUTTON_NAME_t; typedef enum { BTN_RELEASED = 0, // Кнопка не нажата BTN_PRESSED // Кнопка нажата }BUTTON_STATUS_t;
Функции:
void UB_Button_Init(void); // Инициализация кнопок BUTTON_STATUS_t UB_Button_Read(BUTTON_NAME_t btn_name); // Считать состояние кнопки (без фильтрации дребезга) bool UB_Button_OnPressed(BUTTON_NAME_t btn_name); // "True", при нажатии кнопки (защита от дребезга) bool UB_Button_OnClick(BUTTON_NAME_t btn_name); // "True", при кратковременном нажатии (защита от дребезга) bool UB_Button_OnRelease(BUTTON_NAME_t btn_name); // "True", при отпускании кнопки (защита от дребезга)
Пример использования:
//-------------------------------------------------------------- // File : main.c // Date : 07.10.2013 // Version : 1.1 // Author : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Function : Demo of Button Library // Reference: These two files must be written to 8MHz // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_button.h" #include "stm32_ub_led.h" int main(void) { SystemInit(); // Инициализация настроек кварца UB_Button_Init(); // Инициализация кнопок UB_Led_Init(); // Инициализация светодиодов UB_Led_On(LED_GREEN); // Включение зеленого светодиода while(1) { // Проверка нажатия кнопок if(UB_Button_Read(BTN_USER)==BTN_PRESSED) { UB_Led_On(LED_RED); // Включение красного светодиода } else { UB_Led_Off(LED_RED); // Выключение красного светодиода } // Проверка отпускания кнопки if(UB_Button_OnClick(BTN_USER)==true) { UB_Led_Toggle(LED_BLUE); // Переключение синего светодиод } } }
Режим работы:
Зеленый светодиод горит постоянно.
Красный светодиод горит, пока не будет нажата кнопка.
Синий светодиод переключается при нажатии кнопки.
Библиотека, использованная в примере: stm32_ub_button, stm32_ub_led.
Увеличение числа кнопок:
Если вы собираетесь использовать большее число кнопок, необходимо сделать следующее:
- В файле «stm32_ub_button.h» все кнопки должны быть перечислены в списке "BUTTON_NAME_t" и "BUTTON_ANZ" изменено в соответствии с количеством кнопок.
- В файле «stm32_ub_button.h» в "BUTTON_t" для всех кнопок необходимо указать порты и номера выводов.
В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_button_v101_rus.rar (6 Кб)
- Demo_02_Button_rus.rar (202 Кб)
Комментарии (5) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
А нет ли ошибки в названиях файлов?
В обеих случаях указан «stm32_ub_button.h»