Intento descubrir cómo puedo asegurarme de que mi controlador (STM32F030K6) siempre puede guardar un entero de 16 bits en el flash cuando la alimentación se está descomponiendo rápidamente.
Este controlador tiene un Watchdog analógico que dispara una interrupción cuando detecta un valor por debajo de un determinado umbral.
El ADC se ejecuta en modo continuo y multiplexa 4 canales, de los cuales uno es crítico y se utiliza para el Watchdog analógico. Así que pensé que obtendría un nuevo valor para este canal cada 350 ciclos (87.5 * 4, para escanear y convertir 1 canal, el adc necesita 71 + 12.5 = 87.5 ciclos). Cuando el IRQ se dispara ejecuta esta función:
uint16_t data=...;
...
void ADC1_IRQHandler(void)
{
HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_HALFWORD,0x8007C00, data);
HAL_FLASH_Lock();
HAL_ADC_IRQHandler(&hadc);
}
Según la hoja de datos, toma este chip ~ 50µs para programar un valor de 16 bits para el flash.
Mi configuración es una PCB con un suministro de 24 V, un LM317 que genera 3,3 V y una bomba de carga para un MOSFET, que toma el reloj del controlador. Pensé en apagar todo antes de escribir en flash, para ahorrar algo de energía, pero apagar los ciclos de costos ...
Tengo 100 nF en la entrada de 24 V y 1 µ en la entrada y salida del regulador de voltaje LM317.
¿Cómo puedo asegurarme de que siempre pueda guardar ese valor, incluso si el voltaje en la entrada se rompe inmediatamente?