Taula de continguts:
- Pas 1: Requisits de maquinari i programari
- Pas 2: entendre el problema
- Pas 3: Configuració de STM32CubeMX
- Pas 4: desenvolupament de programari Keil
- Pas 5: Conclusió
Vídeo: Botó STM32CubeMX Rebounce amb interrupció: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Hola, en aquest tutorial intentaré donar la meva solució senzilla per evitar el rebot de botons, que és un problema molt greu. A Internet hi ha molts vídeos per oferir solució a aquest problema, però cap d'ells per a interrupcions externes. En tots aquests vídeos, es prem el botó mitjançant un mètode de sondeig que és ineficient. Comencem, doncs,
Pas 1: Requisits de maquinari i programari
Requisits de maquinari:
- Taula de desenvolupament STM32 ARM
- Un ordinador
Requisits de programari:
- STM32CubeMX
- Keil uVision5
Pas 2: entendre el problema
Per tant, intentem trobar una solució per al problema de rebot de botons. Per tant, hem d’entendre el problema. Per tant, quan premem un botó hauria d’arribar a un estat oposat al seu estat anterior. Per exemple, si era ALTA ha de ser BAIX i si era BAIX, ha de ser ALTA. Tanmateix, aquest és l'estat ideal (en PROTEUS:)) En realitat, quan premem un botó comença a rebotar entre HIGH i LOW abans que arribi a l'estat d'inactivitat. Per tant, fa veure que s’ha premut diverses vegades, cosa que provoca problemes. Què hem de fer, doncs?
Aquí vull assenyalar que, en aquest exemple, utilitzarem una interrupció externa per detectar la premuda de botó. Per tant, després de detectar el botó, hem d’esperar una estona de temps, com ara 50 mS, per arribar a l’estat inactiu i tornar a comprovar si el botó està inactiu o no. Si es troba en estat d'inactivitat, podem continuar amb la nostra tasca. Veiem el codi:)
Pas 3: Configuració de STM32CubeMX
Per tant, primer hem d’habilitar la interrupció externa per al nostre botó (suposo que aquí utilitzeu la placa de descobriment STM32F407VG):
- A la pestanya "Fixació i configuració", feu clic al pin PA0 que està connectat al polsador i trieu GPIO_EXTI0 que permet la interrupció externa en aquest pin.
- Canvieu l '"etiqueta d'usuari" del pin a "Push_Button" o qualsevol cosa que vulgueu.
A continuació, hem de configurar el temporitzador per tal de crear un retard de 50 mS:
- Introduïu la secció "Temporitzadors"
- Feu clic a TIM1
- Trieu "Rellotge intern" com a font de rellotge
-
A la configuració (si voleu entendre aquesta secció, consulteu aquest tutorial, molt recomanable "Servo Motor Control With STM32F4 ARM MCU"):
- Estableix el prescaler com a 32000
- I contrapunt a 50
- A la pestanya "Configuració NVIC", activeu totes les interrupcions
Activa el LED com a sortida:
Feu clic a PD12 i configureu com a "GPIO_Output"
A continuació, configureu el rellotge tal com es mostra a la imatge anterior i creeu el codi.
Pas 4: desenvolupament de programari Keil
En primer lloc, definim la variable d’estat que ens assegurarà que no iniciem el temporitzador dins d’una interrupció externa quan hagi rebotat:
/ * CODI D'USUARI COMENÇA PFP * / bool state = true; / * CODI D'USUARI FINAL PFP * /
A continuació, escrivim ISR per a una interrupció externa:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); estat = fals; } else {_NOP (); }}
Quan es prem el botó, comprovem si era el nostre botó definit i si l'estat és cert. Al principi, l'estat serà cert per introduir la sentència if. Després d’entrar, iniciem el temporitzador i fem que l’estat sigui fals per assegurar-nos que el rebot no reiniciarà el temporitzador.
A continuació, escrivim ISR per a la interrupció del temporitzador:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Eviteu l'advertiment de compilació d'arguments no utilitzats * / UNUSED (htim);
/ * NOTA: Aquesta funció no s'ha de modificar quan es necessiti la devolució de trucada, es podria implementar el HAL_TIM_PeriodElapsedCallback al fitxer d'usuari * / if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD_P, GPIO_); estat = cert; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * CODI USUARI FINAL 4 * /
Després de 50 mS comprovem si el botó encara està en estat de reinici o ha estat alliberat, si és així, sabem que el botó està en estat d'inactivitat. A continuació, commutem el led, fem que l'estat sigui cert per poder detectar un altre botó que premem i aturar el temporitzador per poder tornar-lo a iniciar.
Per tant, aquest procés garantirà que evitem problemes de rebot.
Pas 5: Conclusió
Aquest era el codi per a rebutjar botons. Vull assenyalar que aquest codi el vaig desenvolupar jo i no sóc un programador expert. Per tant, segurament pot haver-hi errors. Si teniu una solució millor, tingueu en compte. No ho oblideu, si teniu algun problema, escriviu-me i intentaré ajudar-vos.
Recomanat:
Tutorial Arduino: botó amb estil BLYNK i mòdul de relé ESP-01: 3 passos (amb imatges)
Tutorial Arduino - BLYNK Styled Button i ESP-01 Relay Module: Benvingut a un altre tutorial del nostre canal, aquest és el primer tutorial d'aquesta temporada dedicat als sistemes IoT, aquí descriurem algunes de les característiques i funcionalitats dels dispositius utilitzat en aquest tipus de sistemes. Per crear aquests s
Aplicació d'un botó extensible amb comentaris de vibracions: 7 passos (amb imatges)
Aplicació d’un botó extensible amb comentaris de vibració: en aquest tutorial, primer us mostrarem com utilitzar un Arduino Uno per controlar un motor de vibració mitjançant un botó ampliat. La majoria dels tutorials sobre botons automàtics impliquen el botó de la taula de proves física, mentre que en aquest tutorial, el botó ha estat
Disseny d'un controlador d'interrupció programable en VHDL: 4 passos
Disseny d'un controlador d'interrupció programable en VHDL: estic aclaparat pel tipus de respostes que rebo en aquest bloc. Gràcies nois per visitar el meu bloc i motivar-me a compartir el meu coneixement amb vosaltres. Aquesta vegada, presentaré el disseny d’un altre mòdul interessant que veiem a tots els SOCs: Interrupt C
Sensor de bloqueig de llum Arduino (mòdul d’interrupció de fotos): protecció de les vostres targetes (prototip): 4 passos
Sensor de bloqueig de llum Arduino (mòdul d’interrupció de fotos): protecció de les vostres targetes (prototip): aquest projecte és un prototip i en aquest projecte parlaré de com es poden conservar les vostres targetes (com ara targetes de crèdit, targetes de dèbit, targetes regal). Caixa forta. Feu una ullada a les imatges anteriors per veure com funciona aquest projecte. Deixeu-me fer una ullada a
Arduino - Interrupció periòdica: 4 passos
Arduino: interrupció periòdica: aquest instructiu tracta d’utilitzar una interrupció periòdica per a la sincronització dels programes Arduino. Aquest és un pas per a un incipient programador Arduino que sap que l’Arduino pot fer més, però que no sap com fer-ho possible. Si hi ha una actuació pr