STM32F4 Programación de memoria flash

1

Por lo tanto, tengo la placa STM32F4 y mi historia corta: me quedo 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 almaceno?

    
pregunta PauliusM

2 respuestas

1

Para guardar un valor para reiniciar después de un cierre inesperado, sería mucho mejor usar un byte de RAM respaldado por batería que intentar escribir en Flash.

Una actualización de un byte en flash tiene que borrarse y luego actualizar todo el 'sector'. Según la hoja de datos de ST, el tiempo típico para un borrado de sector de 16 kB es 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 alimentación mientras se está actualizando el flash, es posible que todo el sector esté dañado. Además, se borra todo el sector, por lo que no se puede utilizar para el código. Depende de la parte exacta de STM32, pero el sector más pequeño podría ser 16kB, lo que podría ser mucho para perder por el bien de un byte.

Un problema adicional más pequeño con Flash es que solo está garantizado para 10k ciclos de borrado / escritura. Esto podría ser suficiente para su aplicación, pero un error en el programa podría quemarse en una o dos horas.

Otras cosas a considerar, mientras se está escribiendo 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 comprobar Flash no se está cambiando. Por lo tanto, podría ser más complejo de lo que espera utilizar.

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 que se configura, se puede leer y escribir con solo unas pocas instrucciones adicionales. Por lo tanto, el tiempo de acceso es inferior al microsegundo, lo suficientemente rápido para usarlo en una rutina de servicio de interrupción, y no se desgastará.

Esto significa que necesitas poder acceder al pin VBat y conectarlo a una batería pequeña, por ejemplo. una batería para audífonos.

    
respondido por el gbulmer
1

Escriba los datos en la memoria Flash a través de la Emulación EEPROM, como se describe en la Nota de la aplicación AN3969: emulación de EEPROM en microcontroladores STM32F40x / STM32F41x , aquí. / p>     

respondido por el Gabriel Staples

Lea otras preguntas en las etiquetas