Así que tengo una placa STM32F4 y, para resumir, estoy atascado al poner un número definido por el usuario (0 - 60) en la memoria FLASH, por lo que después de reiniciar, podría usar la última configuración utilizada. ¿Cómo asigno el espacio correcto en la memoria flash para que no interfiera con mi código? ¿Cómo lo guardo?
Escriba datos en la memoria Flash a través de la emulación de EEPROM, como se describe en la Nota de aplicación AN3969: Emulación de EEPROM en microcontroladores STM32F40x/STM32F41x , aquí.
Para guardar un valor para reiniciar después de un apagado inesperado, sería mucho mejor usar un byte de RAM respaldada por batería que intentar escribir en Flash.
Una actualización de un byte en flash tiene que borrar y luego actualizar todo el 'sector'. De acuerdo con la hoja de datos de ST, el tiempo típico para un borrado de sector de 16 kB es de 250 ms para un STM32F405/7 (5.3.12 "Características de la memoria", Tabla 40 "Programación de la memoria Flash"). Si se pierde la energía mientras se actualiza el flash, todo el sector puede corromperse. Además, se borra toda la sección, por lo que no se puede usar para el código. Depende de la parte exacta de STM32, pero el sector más pequeño puede ser de 16 kB, lo que podría ser mucho que perder por un byte.
Otro problema más pequeño con Flash es que solo está garantizado para ciclos de borrado/escritura de 10k. Esto podría ser suficiente para su aplicación, pero un error en el programa podría eliminarlos en una o dos horas.
Otras cosas a considerar, mientras se escribe Flash, la CPU no podrá acceder a ese sector, por lo que no podrá actualizar el valor mágico, por lo que es posible que deba proteger el acceso al valor con algún código para verificar Flash no se está cambiando. Por lo tanto, podría ser más complejo de lo que espera usar.
La alternativa obvia, sin agregar una EEPROM externa, es usar RAM respaldada por batería. Esto es un poco más complejo de programar que usar una variable en memoria porque es parte del RTC que debe inicializarse. Sin embargo, una vez configurado, se puede leer y escribir con solo unas pocas instrucciones adicionales. Por lo tanto, su tiempo de acceso es de submicrosegundos, lo suficientemente rápido como para usarlo en una rutina de servicio de interrupción y no se desgastará.
Esto significa que debe poder acceder al pin VBat y conectarlo a una batería pequeña, por ejemplo, una batería para audífonos.
Eugenio Sh.
usuario72833
gbulmer
viejo contador de tiempo
PauliusM
PauliusM
PauliusM
viejo contador de tiempo
scott seidman