Si su código no funciona, ya que la velocidad del reloj disminuye, suena como si estuviera manteniendo vivas todas las fuentes interrumpidas (interrupciones anidadas) cuando realiza el mantenimiento de una rutina interrumpida. Con todas las interrupciones habilitadas todo el tiempo, saltará de algún código y entrará en una interrupción de orden superior si se produce una, y solo regresará a una interrupción de orden inferior una vez que haya finalizado la orden más alta.
Esto puede llevar a problemas importantes de tiempo si las prioridades de interrupción no se administran adecuadamente, especialmente con puertos de comunicación como UART & TARJETA SD. Si se asume que las GPIO están conectadas al exterior de su caja, entonces las interrupciones de GPIO sucederán "a voluntad" en un registrador de datos y no se pueden predecir, por lo que es ventajoso mantener estas rutinas muy cortas.
Esto puede llevar a establecer una tasa de conmutación GPIO máxima para estos pines externos, por lo que su código seguirá siendo válido (máximo 100Hz en cualquier pin de entrada externo, y un máximo de 2 KHz en todas las entradas, por ejemplo).
Si desea reducir la corriente, entonces se ejecuta en modo activo a una velocidad de reloj más alta, modificando el código para que todas las rutinas sean activadas por eventos y entren en modo de espera o espera durante el resto del tiempo para reducir el suministro. corriente. Algunos microcontroladores tienen modos de espera de corriente extremadamente bajos en un 75% del modo activo (CPU apagada, periféricos encendidos), pero la mayoría solo reduce la corriente en un ~ 20-30% del modo activo.
Uno o dos micro vendedores pueden incluso mantener los periféricos funcionando en modo de sueño profundo con activación rápida, pero la mayoría de los microemprendedores normalmente apagan todos los periféricos en sueño profundo y solo permiten el GPIO, WDT, POR, BOR o un RTC para despertar un micro.