Editar : esta pregunta es incorrecta. El stm325105 solo tiene un pin de activación. Pero otras partes ST tienen más de un pin de activación, por lo que la respuesta dada es válida para ellas.
Tengo un stm32f105 que tiene dos botones momentáneos conectados a las entradas de activación. El procesador se pone en MODO DE ESPERA. Cuando se presiona cualquiera de los botones, o se dispara el temporizador RTC, la CPU se activa.
El problema es que quiero que la CPU haga cosas diferentes dependiendo de qué entrada de activación se haya activado. De acuerdo con 5.3.5 del manual de referencia ST stm32f105xx , no se conservan registros excepto un registro de estado que indica que nos despertaron (pero no quién) y 42 registros de respaldo.
El modo de espera permite lograr el menor consumo de energía. Se basa en el modo de sueño profundo de Cortex ® -M3, con el regulador de voltaje deshabilitado. En consecuencia, el dominio de 1,8 V se apaga. El PLL, el oscilador HSI y el oscilador HSE también se apagan. La SRAM y el contenido de los registros se pierden, excepto los registros en el dominio de copia de seguridad y los circuitos de espera.
Después de salir del modo de espera, la ejecución del programa se reinicia de la misma manera que después de un reinicio (muestreo de pines de arranque, se recupera el reinicio del vector, etc.). El indicador de estado de SBF en el registro de estado/control de energía (PWR_CSR) indica que la MCU estaba en modo de espera.
Esta publicación del foro ST, ¿Cómo determinar el origen de Wakeup from Standby? , sugiere que no puedo detectar qué activación se activó en el software. No encontré otras publicaciones allí que proporcionaran más información.
¿Cómo puedo usar software o hardware para determinar, después de despertar, qué entrada de despertar se activó?
No conozco los detalles de esta parte ST, así que asumiré que su descripción es correcta.
El procesador debería activarse muy pronto después de presionar cualquiera de los botones. Esto debería ser especialmente cierto si tiene un oscilador RC interno. Incluso si finalmente necesita ejecutar desde un cristal por razones de precisión, tal vez pueda hacer que la parte comience desde un RC interno y luego cambiar al cristal más tarde. Hay micros que pueden hacer esas cosas, aunque no sé si el tuyo es uno de ellos.
En cualquier caso, lee ambas entradas lo antes posible después de la activación. A menos que haya algo inusual en este micro ST, debería ser de un ms a unas pocas decenas de ms desde que se presiona el botón.
Para garantizar que la línea siga siendo baja, use un condensador para mantener la línea baja hasta 100 ms después de soltar el botón.
Por ejemplo, supongamos que el nivel de entrada bajo lógico garantizado es el 20 % de la tensión de alimentación. La línea se levanta con una resistencia y tiene un capacitor a tierra. El botón corta la línea a tierra. Por lo tanto, la línea flota alto y se fuerza activamente a tierra cuando se presiona el botón. Cuando se suelta el botón, el voltaje decae exponencialmente hacia el suministro.
La caída al 20% del valor final ocurre en 0,22 constantes de tiempo. Digamos que desea garantizar que la línea se vea baja durante 100 ms después de presionar un botón. Eso significa que la constante de tiempo RC debe ser de 450 ms. Con un pullup de 100 kΩ, la capacitancia debería ser de 4,5 µF. Entonces, una tapa de 4.7 µF 10 V funcionaría bien.
En resumen, aquí está el circuito:
PlasmaHH
siguió a Mónica a Codidact
Daniel Naslund
siguió a Mónica a Codidact