02-Button-Library (STM32F4)

Auf dem Discovery Board gibt es einen Button der vom User benutzt werden kann.
Mit dieser Library kann der Status vom Button abgefragt werden.

Durch erweitern der Tabelle im C-File können auch mehrere Buttons abgefragt werden.

Ab der Version 1.1 kann im H-File eingestellt werden ob auch die entprellten Funktionen per Timer benutzt werden sollen. Dann können die Funktionen “OnPressed” , “OnClick” und “OnReleased” benutzt werden.

Diese Funktionen liefern ein “true” wenn das Ereignis eingetreten ist.

1
User-Button an PA0

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, (TIM, MISC)
Benutzte Librarys : keine

Enumerationen :

1
2
3
typedef enum  {
  BTN_USER = 0    // BTN1 auf dem STM32F4-Discovery
}BUTTON_NAME_t;

:

1
2
3
4
typedef enum {
  BTN_RELEASED = 0,  // Button losgelassen
  BTN_PRESSED        // Button gedrueckt
}BUTTON_STATUS_t;

Funktionen :

1
2
3
4
5
void UB_Button_Init(void);                               // zum init der Buttons
BUTTON_STATUS_t UB_Button_Read(BUTTON_NAME_t btn_name);  // um einen Button auszulesen (nicht entprellt)
bool UB_Button_OnPressed(BUTTON_NAME_t btn_name);        // true, wenn der Button betätigt ist (entprellt)
bool UB_Button_OnClick(BUTTON_NAME_t btn_name);          // true, beim drücken vom Button (entprellt)
bool UB_Button_OnRelease(BUTTON_NAME_t btn_name);        // true, beim loslassen vom Button (entprellt)

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//--------------------------------------------------------------
// File     : main.c
// Datum    : 07.10.2013
// Version  : 1.1
// Autor    : 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
// Funktion : Demo der Button-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "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(); // Quarz Einstellungen aktivieren
 
  UB_Button_Init(); // Init der Buttons
  UB_Led_Init();    // Init der LEDs
 
  UB_Led_On(LED_GREEN); // gruene LED einschalten
 
  while(1)
  {
    // Test ob Button gedrückt ist
    if(UB_Button_Read(BTN_USER)==BTN_PRESSED) {
      UB_Led_On(LED_RED);  // rote LED einschalten
    }
    else {
      UB_Led_Off(LED_RED); // rote LED ausschalten
    }
 
    // Test auf OnClick vom Button
    if(UB_Button_OnClick(BTN_USER)==true) {
      UB_Led_Toggle(LED_BLUE); // blaue LED toggeln
    }
  }
}

Beschreibung :

1
2
3
4
5
6
7
8
Funktion :
-grüne LED wird dauerhaft eingeschaltet
-rote leuchtet, solange der Button gedrückt ist
-blaue LED toggelt jedesmal, wenn der Button betätigt wurde
 
Librarys die für das Beispiel benutzt werden :
-stm32_ub_button
-stm32_ub_led

Library um eigene Buttons erweitern :

Falls noch mehr Buttons benutzt werden sollen, dann muss folgendes gemacht werden :

1. Im H-File müssen alle Buttons in der Enumeration “BUTTON_NAME_t” aufgelistet werden und die Anzahl im Define “BUTTON_ANZ” muss entsprechend angepasst werden.

2. Im C-File müssen in der Struktur “BUTTON_t” alleButtons eingetragen und den entsprechenen Ports und Port-Pins zugewiesen werden.

Hier die Library zum Download :

ub_stm32f4_button_v101

Hier der komplette CooCox-Projektordner zum Download :

Demo_02_Button


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert