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 :
Hier der komplette CooCox-Projektordner zum Download :