Tabla de contenido:
- Paso 1: requisitos de hardware y software
- Paso 2: Comprensión del problema
- Paso 3: Configuración de STM32CubeMX
- Paso 4: Desarrollo de software de Keil
- Paso 5: Conclusión
Video: Rebote del botón STM32CubeMX con interrupción: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Hola, en este tutorial intentaré dar mi solución simple para evitar que los botones reboten, lo cual es un problema muy serio. En Internet hay muchos videos para ofrecer una solución a este problema, pero ninguno para interrupciones externas. En todos estos videos, la presión del botón se verifica mediante un método de sondeo que es ineficaz. Entonces, ¡comencemos!
Paso 1: requisitos de hardware y software
Requisitos de hardware:
- Placa de desarrollo STM32 ARM
- Un ordenador
Requisitos de Software:
- STM32CubeMX
- Keil uVision5
Paso 2: Comprensión del problema
Por lo tanto, intentamos encontrar una solución para el problema de rebote de botones. Por tanto, tenemos que entender el problema. Entonces, cuando presionamos un botón, debería llegar a un estado opuesto al estado anterior. Por ejemplo, si era ALTO tiene que ser BAJO y si es BAJO, entonces tiene que ser ALTO. Sin embargo, este es el estado ideal (en PROTEUS:)) En realidad, cuando presionamos un botón, comienza a rebotar entre HIGH y LOW antes de llegar al estado inactivo. Entonces, finge que ha sido presionado varias veces lo que causa problemas. Entonces, ¿qué debemos hacer?
Aquí quiero señalar que en este ejemplo, usaremos una interrupción externa para detectar la pulsación de un botón. Entonces, después de que detectemos la presión del botón, debemos esperar un poco de tiempo, como 50 ms para alcanzar el estado inactivo y verificar nuevamente si el botón está inactivo o no. Si está en estado inactivo, podemos continuar con nuestra tarea. Entonces, veamos el código:)
Paso 3: Configuración de STM32CubeMX
Por lo tanto, primero debemos habilitar la interrupción externa para nuestro botón pulsador (supongo que aquí usa la placa de descubrimiento STM32F407VG):
- En la pestaña "Pinout & Configuration", haga clic en el pin PA0 que está conectado al botón pulsador y elija GPIO_EXTI0 que habilita la interrupción externa en ese pin.
- Cambie la "etiqueta de usuario" del pin a "Push_Button" o cualquier cosa que desee.
Luego, necesitamos configurar el temporizador para crear un retardo de tiempo de 50 ms:
- Ingrese a la sección "Temporizadores"
- Haga clic en TIM1
- Elija "Reloj interno" como fuente de reloj
-
En la configuración (si desea comprender esta sección, consulte este tutorial, muy recomendable "Control de servomotor con STM32F4 ARM MCU"):
- Establecer el prescaler como 32000
- Y contador a 50
- En la pestaña "Configuración de NVIC", habilite todas las interrupciones
Habilite el LED como salida:
Haga clic en PD12 y establezca como "GPIO_Output"
Luego, configure el reloj como se muestra en la imagen anterior y genere el código.
Paso 4: Desarrollo de software de Keil
Primero, definimos la variable de estado que asegurará que no iniciemos el temporizador dentro de la interrupción externa cuando ocurrió el rebote:
/ * CÓDIGO DE USUARIO COMIENZO PFP * / bool state = true; / * CÓDIGO DE USUARIO FIN PFP * /
Luego, escribimos ISR para interrupción externa:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && estado == true) {HAL_TIM_Base_Start_IT (& htim1); estado = falso; } más {_NOP (); }}
Cuando se presiona el botón, verificamos si era nuestro botón pulsador definido y si el estado es verdadero. Al principio, el estado será verdadero para poder ingresar la declaración if. Después de ingresar, iniciamos el temporizador y hacemos que el estado sea falso para asegurarnos de que el rebote no reiniciará el temporizador.
Luego, escribimos ISR para la interrupción del temporizador:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Prevenir la advertencia de compilación de argumentos no utilizados * / UNUSED (htim);
/ * NOTA: Esta función no debe modificarse, cuando se necesita la devolución de llamada, el HAL_TIM_PeriodElapsedCallback podría implementarse en el archivo de usuario * / if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD_12);_PIN estado = verdadero; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * CÓDIGO DE USUARIO FIN 4 * /
Después de 50 mS, verificamos si el botón aún está en estado de reinicio o suelto, si es así, sabemos que el botón está en estado inactivo. Luego cambiamos el led, hacemos que el estado sea verdadero para poder detectar otra pulsación de botón y detenemos el temporizador para poder volver a encenderlo.
Por lo tanto, este proceso garantizará que evitemos problemas de rebote.
Paso 5: Conclusión
Este era el código para el rebote del botón. Quiero señalar que este código fue desarrollado por mí y no soy un programador experto. Entonces, seguramente puede haber errores. Si tiene una mejor solución, tenga en cuenta. No lo olvides, si tienes algún problema escríbeme y trataré de ayudarte.
Recomendado:
Rebote simple de Arduino: 4 pasos
Arduino Simple Debounce: este instructivo trata sobre cómo hacer un rebote fácil con 2 botones pulsadores. Todo lo que necesita es conocimiento básico en electrónica y programación arduino. yo en mi correo: iwx
Sensor de bloqueo de luz Arduino (módulo de interrupción de fotos): mantener sus tarjetas seguras (prototipo): 4 pasos
Sensor de bloqueo de luz Arduino (módulo de interrupción de fotos): mantener sus tarjetas seguras (prototipo): este proyecto es un prototipo y en este proyecto hablaré sobre cómo se pueden mantener sus tarjetas, como tarjetas de crédito, tarjetas de débito, tarjetas de regalo a salvo. Echa un vistazo a las imágenes de arriba para ver cómo funciona este proyecto. Déjame darte un vistazo de
INSTALACIÓN DE REEMPLAZO DEL BOTÓN TRASERO DEL BOTÓN TRASERO DEL CERRADURA DEL PORTÓN TRASERO DE RENAULT SCENIC / MEGANE: 3 Pasos
INSTALACIÓN DE REEMPLAZO DEL BOTÓN TRASERO DEL BOTÓN DE LA PUERTA TRASERA DE RENAULT SCENIC / MEGANE: La junta tórica de mala calidad que mantiene el botón del maletero en su lugar se desgasta y se pierde el botón del maletero del vehículo. La única solución de Renaults para esto es un mecanismo de bloqueo de arranque de reemplazo completo que solo fallará nuevamente y costará
Microcontrolador AVR. Cambie los LED con un interruptor de botón. Desactivación del botón pulsador: 4 pasos
Microcontrolador AVR. Cambie los LED con un interruptor de botón. Desactivación del botón pulsador: En esta sección, aprenderemos cómo hacer el código C del programa para ATMega328PU para alternar el estado de los tres LED de acuerdo con la entrada de un interruptor de botón. Además, hemos explorado una solución al problema de "Switch Bounce". Como de costumbre, nosotros
Arduino - Interrupción periódica: 4 pasos
Arduino - Interrupción periódica: este Instructable trata sobre el uso de una interrupción periódica para la sincronización en los programas Arduino. Este es un paso para un programador de Arduino en ciernes que sabe que Arduino puede hacer más, pero no sabe muy bien cómo hacer que eso suceda. Si hay una actuación pr