En un proyecto simple basado en un microcontrolador STM32, necesitaba un par de botones adicionales. Así que conecté cada botón entre un pin en el STM32 y GND, configuré los pines como entrada y activé las resistencias de pull-up internas.
Parecía funcionar bien al principio. Al presionar el botón se tira del pin a GND y se dispara una interrupción. Pero pronto surgió un problema, que era que la configuración era extremadamente sensible a las descargas electrostáticas cercanas. Si tocara una pieza de metal a varios pies de distancia, las interrupciones se dispararían.
El STM32 está en una placa de demostración Discovery que tiene un botón pulsador. Ese botón no tiene el problema, así que busqué el esquema (incluido a continuación).
Así que hay 3 resistencias, una tapa y conexiones tanto para VCC como para GND (y quizás también se usa el pull-up interno).
¿Tendré que agregar todo eso para que mis botones sean confiables? Si no es así, ¿qué circuito necesito? ¿Cuál es la razón por la que la resistencia interna no es suficiente para filtrar el ruido de las descargas electrostáticas cercanas?
Actualización1:
Heverificadoquelasresistenciasinternasdepull-upestánactivas.Silosinhabilito,losbotonessedisparanaleatoriamentecadapocossegundos.Paraactivarlospull-ups,uso:
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
Yparadeshabilitarlos:
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
Actualización2:
Cambiémicircuitodepulsadorparaquecoincidaconelesquema(conR20yC22eliminados,R22reemplazadoconcable)ydeshabilitéelpull-upinterno.Nonocambiólasensibilidadalasdescargaselectrostáticas.
Actualización3:
ResultaqueestabausandoelesquemaparalaplacaDiscoveryincorrecta.Heincluidoelcorrectoacontinuación.Estenuevosítienetodosloscomponentesinstaladosyesmuyprobablequeelcircuitoresuelvalosproblemasdeactivaciónaleatoria.