Stm32 RTC activación desde el modo de espera

0

Estoy usando un STM32L053C8 y estoy tratando de configurar un evento de activación de RTC, y mientras tengo éxito, solo puedo hacerlo hasta un tiempo máximo, que es un par de segundos. Necesito ponerlo en espera y despertarme días después. En este momento estoy usando la velocidad interna de 40 KHz como el reloj RTC, finalmente obtendré un cristal de 32.768.

DeacuerdoconCarmineNoviello-MasteringSTM32,deberíasercapazdeestablecerelretrasodeactivaciónduranteuntiempobastantelargo.Yaunqueséquedicequeusarunrelojexterno,usarunointernodeunospocosKhzdeberíasercapazdeproporcionarunretrasobastantedecenteparapropósitosdeprueba.Simplementenopuedoentenderlo.Cuandoelegílaconfiguraciónde1Hzparaelrelojdeactivación,esosolosignificaqueusaráelrelojRTC(40Khz)/(Asynch_prediv+1xSynch_prediv+1)=nuevafrecuenciaderelojdeactivación.Lollama1Hzporqueasumequetienesconfiguraelcalendarioparatenerunafrecuenciade1Hz.Esunalástimaquepuedausarelcalendariocomouneventodeactivación.

    
pregunta Edwin Fairchild

1 respuesta

3

El supuesto de que CK_SPRE es de 1 Hz se debe al hecho de que esto es esencial para el correcto cronometraje.

Lo que te faltan son los contadores de activación (debajo del reloj de activación en tu pantalla). Es decir, el RTC cuenta los pulsos de reloj (por ejemplo, provenientes de CK_SPRE ) y solo lo despierta cuando el conteo alcanza el valor establecido en el contador de activación. Suponiendo que CK_SPRE está a 1 Hz, esto le da un período de activación máximo de 36 horas (como se indica en manual de referencia ).

Ahora, ¿de dónde vinieron esos 48 días? O bien el autor multiplicó de manera errónea el período por 2 ** 5 o asumió que CK_SPRE es 1/32 Hz (lo que arruina la hora).

Hay dos soluciones para esto:

  • contador de software
  • alarmas

Contadores de software: simplemente use una variable en su código y haga algo como esto en su página principal:

int i = 0;
while(true) {
    sleep(WFE); // forgot exact code
    ++i;
    if(i % 10 != 0)
        continue;

    // your stuff goes here
}

Use las alarmas RTC (que están justo antes de los contadores de activación en su libro):

  • despertar (el mismo WFE)
  • obtener la hora actual de RTC
  • agregue N días a esta hora
  • configurar la siguiente alarma
  • haz tus cosas.
respondido por el Jan Dorniak

Lea otras preguntas en las etiquetas