Detecte qué interruptor momentáneo provocó la activación de una cpu STM32

10

Editar : esta pregunta es incorrecta. El stm325105 tiene un solo 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 esas.

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 alguno de los botones, o se enciende el temporizador RTC, la CPU se activa.

El problema es que quiero que la CPU haga diferentes cosas dependiendo de qué entrada de activación se activó. De acuerdo con 5.3.5 de ST stm32f105xx manual de referencia , no se conservan registros a excepción de un registro de estado que indica que hemos sido despertados (pero no por quién) y 42 registros de copia de seguridad.

  

El modo de espera permite lograr el menor consumo de energía. Se basa en la   Cortex ® -M3 modo de sueño profundo, con el regulador de voltaje desactivado. El dominio 1.8 V es   en consecuencia se apaga. El PLL, el oscilador HSI y el oscilador HSE también son   apagado. Los contenidos de SRAM y registros se pierden, excepto los registros en el dominio de copia de seguridad   y circuitos en espera.

     

Después de levantarse del modo de espera, la ejecución del programa se reinicia de la misma manera que después de   Reinicio (muestra de patas de arranque, reinicio del vector es recuperado, etc.). La bandera de estado SBF en el Poder   el registro de control / estado (PWR_CSR) indica que la MCU estaba en modo de espera.

Esta publicación en el foro de ST, ¿Cómo determinar el origen de Wakeup from Standby? , sugiere que no puedo detectar que se activó la activación en el software. No encontré otras publicaciones allí que dieran más información.

¿Cómo puedo usar software o hardware para determinar, después de despertarme, qué entrada de activación se activó?

    
pregunta Daniel Näslund

1 respuesta

11

No conozco los detalles de esta parte ST, por lo que asumiré que su descripción es correcta.

El procesador debería activarse muy poco después de presionar cualquiera de los botones. Esto debería ser especialmente cierto si tiene un oscilador RC interno. Incluso si necesita correr desde un cristal eventualmente por razones de precisión, quizás pueda comenzar la parte 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, lea ambas entradas lo antes posible después de la activación. A menos que haya algo inusual en este ST micro, esto debería ser desde unos ms hasta unos 10s de ms con solo presionar el botón.

Para garantizar que la línea aún esté baja, use un condensador para mantener la línea baja durante hasta 100 ms después de soltar el botón.

Por ejemplo, digamos que el bajo nivel de entrada lógico garantizado es el 20% de la tensión de alimentación. La línea se detiene con una resistencia y tiene un condensador a tierra. El botón corta la línea a tierra. Por lo tanto, la línea flota alta 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.

El decaimiento al 20% del valor final ocurre en 0.22 constantes de tiempo. Digamos que quiere 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. Por lo tanto, una tapa de 4.7 µF 10 V haría bien.

En resumen, aquí está el circuito:

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas