Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

STM32F4. Урок 2 - нажатие кнопки

На плате 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.

Увеличение числа кнопок:

Если вы собираетесь использовать большее число кнопок, необходимо сделать следующее:

  1. В файле «stm32_ub_button.h» все кнопки должны быть перечислены в списке "BUTTON_NAME_t" и "BUTTON_ANZ" изменено в соответствии с количеством кнопок.
  2. В файле «stm32_ub_button.h» в "BUTTON_t" для всех кнопок необходимо указать порты и номера выводов.

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 21.08.2014 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (5) | Я собрал (0) | Подписаться

0
Gauss #
Вполне полезно, как только закуплю плату с STM, буду держать на примете ваши статьи!
Ответить
0

[Автор]
Rough #
В переводимом цикле статей очень много интересного, от UART до USB HID и от зажигания светодиода, до подключения VGA монитора
Ответить
0
naruto_b #
Ребята, подскажите начинающему как понимать дребезг контактов?
Ответить
0
Alexey_leon #
Все просто. Представляешь структуру кнопки? Там металлическая пластинка замыкает или размыкает другую, когда на нее давят. Так вот при нажатии происходит так называемый дребезг, то есть эта пластинка колеблется как струна на гитаре, только не с такой большой амплитудой. В этот момент происходят тысячи нажатий одновременных, хотя на самом деле на кнопку нажал ты один раз. Так вот защита от дребезга, предназначена, чтобы обойти это физическое явление (избежать его невозможно, практически). Способов решения тысячи, а вообще Гугли
Ответить
0
Shahter #
Если вы собираетесь использовать большее число кнопок, необходимо сделать следующее:
А нет ли ошибки в названиях файлов?
В обеих случаях указан «stm32_ub_button.h»
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
UNI-T UT-61A Мультиметр DT9205A
вверх