Si el código no está funcionando, ya que la velocidad de reloj reduce suena como que usted está manteniendo todos los interrumpe fuentes vivas (anidada interupts) cuando el servicio de un interrumpe la rutina. Con todos los interupts habilitada todo el tiempo, saltar de un poco de código y en un orden superior interrumpe si se produce alguno, sólo volver a un orden inferior interrumpe una vez que la orden más alta que se ha terminado.
Esto puede dar lugar a importantes problemas de sincronización si la interrumpe prioridades no son adecuadamente gestionados, especialmente con puertos de comunicación como una UART Y TARJETA SD. Si uno asume que el GPIO están conectados a la parte exterior de la caja, a continuación, el GPIO interupts va a pasar "a voluntad" en un registrador de datos y no puede ser predicho, por lo que mantener estas rutinas muy corto es ventajoso.
Esto puede conducir a la configuración de un máximo GPIO alternar tarifa para estos pines externos para el código sigue siendo válida (máximo de 100 hz en cualquier pin de Entrada, y un máximo de 2 KHz a través de todas las entradas, por ejemplo).
Si desea reducir la actual, a continuación, ejecutar en modo activo en una mayor velocidad de reloj, alterando el código de modo que todas las rutinas son por evento y entrar en un sueño o esperar modo para el resto de el tiempo para reducir la corriente de alimentación. Un par de microcontroladores extremadamente bajos de Espera actual de los modos de 75% de los activos de modo de la CPU (off, periféricos), pero la mayoría sólo reducir la corriente por ~20-30% de modo activo.
Uno o dos micro vendedores pueden incluso mantener los periféricos que se ejecuta en el sueño profundo de los modos con un rápido despertar, pero la mayoría de las micro, generalmente apague todos los dispositivos periféricos en el sueño profundo y sólo permitir el GPIO, WDT, POR, BOR o un RTC para despertar a un micro.