Obsah:
- Krok 1: Hardwarové a softwarové požadavky
- Krok 2: Porozumění problému
- Krok 3: Konfigurace STM32CubeMX
- Krok 4: Vývoj softwaru Keil
- Krok 5: Závěr
Video: Tlačítko STM32CubeMX Debounce s přerušením: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Ahoj, v tomto tutoriálu se pokusím poskytnout své jednoduché řešení, jak zabránit odrazu tlačítek, což je velmi závažný problém. Na internetu existuje mnoho videí, která nabízejí řešení tohoto problému, ale žádná z nich pro externí přerušení. U všech těchto videí je stisknutí tlačítka kontrolováno metodou hlasování, která je neúčinná. Začněme tedy!
Krok 1: Hardwarové a softwarové požadavky
Hardwarové požadavky:
- Vývojová deska STM32 ARM
- Počítač
Softwarové požadavky:
- STM32CubeMX
- Keil uVision5
Krok 2: Porozumění problému
Pokoušíme se tedy najít řešení problému s odskakováním tlačítek. Proto musíme tomuto problému porozumět. Když tedy stiskneme tlačítko, mělo by dojít ke stavu, který je opačný k předchozímu stavu. Pokud například bylo VYSOKÉ, musí být NÍZKÉ a pokud bylo NÍZKÉ, pak musí být VYSOKÉ. Toto je však ideální stav (v PROTEUS:)) Ve skutečnosti, když stiskneme tlačítko, začne poskakovat mezi VYSOKOU a NÍZKOU, než přejde do klidového stavu. Předstírá, že bylo několikrát stisknuto, což způsobuje problémy. Co bychom tedy měli udělat?
Zde chci poznamenat, že v tomto příkladu použijeme externí přerušení, abychom detekovali stisknutí tlačítka. Poté, co zjistíme stisknutí tlačítka, musíme chvíli počkat, například 50 mS, abychom dosáhli klidového stavu a znovu zkontrolovali, zda je tlačítko v klidovém stavu nebo ne. Pokud je v klidovém stavu, můžeme pokračovat ve svém úkolu. Pojďme se tedy podívat na kód:)
Krok 3: Konfigurace STM32CubeMX
Musíme tedy nejprve povolit externí přerušení pro naše tlačítko (předpokládám, že zde používáte desku zjišťování STM32F407VG):
- Na kartě "Pinout a konfigurace" klikněte na pin PA0, který je připojen k tlačítku, a vyberte GPIO_EXTI0, který umožňuje externí přerušení na tomto pinu.
- Změňte „štítek uživatele“na pinu na „Push_Button“nebo cokoli chcete.
Poté musíme nakonfigurovat časovač, abychom vytvořili časové zpoždění 50 mS:
- Vstupte do sekce „Časovače“
- Klikněte na TIM1
- Jako zdroj hodin vyberte „Interní hodiny“
-
V konfiguraci (Pokud chcete porozumět této části, nahlédněte do tohoto tutoriálu, vysoce doporučeného „Řízení servomotoru s MCU STM32F4 ARM“):
- Nastavit prescaler jako 32000
- A počítat období do 50
- Na kartě „Nastavení NVIC“povolte všechna přerušení
Povolit LED jako výstup:
Klikněte na PD12 a nastavte jako „GPIO_Output“
Poté nakonfigurujte hodiny jako na obrázku výše a vygenerujte kód.
Krok 4: Vývoj softwaru Keil
Nejprve definujeme stavovou proměnnou, která zajistí, že při odrazu nespustíme časovač uvnitř externího přerušení:
/ * USER CODE BEGIN PFP */bool state = true; / * KÓD UŽIVATELE KONEC PFP */
Potom napíšeme ISR pro externí přerušení:
neplatné HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); state = false; } else {_NOP (); }}
Po stisknutí tlačítka zkontrolujeme, zda to bylo naše definované tlačítko a zda je stav pravdivý. Na začátku bude stav pravdivý, aby bylo možné zadat příkaz if. Po zadání spustíme časovač a nastavíme stav na nepravdivý, abychom zajistili, že odrážení nerestartuje časovač.
Poté napíšeme ISR pro přerušení časovače:
neplatné HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Zabraňte nepoužitým varováním při kompilaci argumentů * / UNUSED (htim);
/* POZNÁMKA: Tato funkce by neměla být upravována, pokud je potřeba zpětné volání, HAL_TIM_PeriodElapsedCallback lze implementovat do uživatelského souboru */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); stav = true; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * KÓD UŽIVATELE KONEC 4 */
Po 50 mS zkontrolujeme, zda je tlačítko ještě ve stavu reset nebo uvolněno, pokud ano, víme, že je tlačítko v klidovém stavu. Poté přepneme LED, make state true, abychom mohli detekovat další stisknutí tlačítka a zastavit časovač, abychom jej mohli znovu spustit.
Tento proces tedy zajistí, že zabráníme problému s odskakováním.
Krok 5: Závěr
Toto byl kód pro odblokování tlačítka. Chci poznamenat, že tento kód jsem vytvořil já a nejsem odborný programátor. Určitě tedy může dojít k chybám. Pokud máte lepší řešení, poznamenejte si to. Nezapomeňte, pokud narazíte na nějaký problém, napište mi a já se pokusím pomoci.
Doporučuje:
Tlačítko rotačního kodéru: 6 kroků
Tlačítko rotačního kodéru: Toto je otočné dálkové ovládání založené na rotačním kodéru. Má následující funkce: Baterie provozovaná při aktivaci s velmi nízkým odběrem proudu Automatická aktivace při otočení ovladače Automatický spánek po období nečinnosti Konfigurovat
Tlačítko Octopus: 8 kroků
Tlačítko Octopus: Octopus s knoflíkovými články nahrazuje knoflíkové baterie. To je užitečné, když nemáte po ruce náhradní baterii. Sloužil k provozu teploměru a vlhkoměru z 4 centové baterie. Je také ukázána výroba této baterie
Nožně ovládané tlačítko Push to Talk: 5 kroků
Nožně ovládané tlačítko Push to Talk: Takto jsem vytvořil tlačítko Push To Talk, které můžete použít s nohama
Senzor Hallova efektu Arduino s přerušením: 4 kroky
Čidlo Arduino Hall Effect s přerušeními: Ahoj všichni, dnes vám ukážu, jak můžete připojit snímač halového efektu k Arduinu a používat jej s přerušením. Nástroje a materiály použité ve videu (odkazy na affiliate partnery): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zK Senzory efektů haly: h
Generátor tónů Arduino bez knihovny nebo sériových funkcí (s přerušením): 10 kroků
Generátor tónů Arduino bez knihovny nebo sériových funkcí (s přerušeními): Není to něco, o čem bych normálně dělal instruktáž, dávám přednost své zámečnické práci, ale jelikož jsem student elektrotechniky a musím absolvovat třídu na mikrokontrolérech ( Embedded Systems Design), myslel jsem si, že udělám instruktáž na jednom ze svých