Guide d’écriture de mémoire flash STM32 à l’aide de HAL
Si vous avez choisi d’utiliser la mémoire flash STM32 avec la couche d’abstraction matérielle (HAL), ce guide vous fournira les étapes essentielles dont vous avez besoin pour une programmation simple du microcontrôleur. La configuration de la couche d’abstraction matérielle (HAL) est assez facile à gérer en suivant les exemples décrits ci-dessous.
Comment puis-je écrire sur la mémoire flash STM32 avec HAL ?
1. Préparez la mémoire flash pour l’écriture
- Incorporer les fichiers d’en-tête nécessaires : Utilisez
#include "stm32f4xx_hal.h"
. - Déverrouiller la mémoire flash : Vous devez déverrouiller la mémoire flash avant l’écriture, en exécutant :
HAL_FLASH_Unlock();
. - Effacer la mémoire flash : pour écrire des données, effacez le secteur de mémoire flash spécifique que vous souhaitez utiliser. Cela s’effectue avec la fonction
HAL_FLASHEx_Erase :-
FLASH_EraseInitTypeDef EraseInitStruct; uint32_t SectorError; EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS; EraseInitStruct.Sector = FLASH_SECTOR_2; // Define the sector for erasure EraseInitStruct.NbSectors = 1; EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3; if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError)! = HAL_OK) { // Error handling }
-
2. Écriture de données dans la mémoire flash
- Utilisez la fonction HAL_FLASH_Program pour saisir des données dans la mémoire flash. Les données peuvent être écrites sous différentes formes : octets, demi-mots, mots ou doubles mots.
-
uint32_t Address = 0x08008000; // Initial address in flash memory uint32_t Data = 0x12345678; // Information to be saved if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) { // Handle the error }
-
- Reverrouiller la mémoire flash : Après avoir terminé l’écriture des données, il est essentiel de reverrouiller la mémoire flash pour éviter tout écrasement involontaire :
HAL_FLASH_Lock();
.
Exemple de code pour la mémoire flash STM32 avec HAL
Vous trouverez ci-dessous un exemple complet qui regroupe toutes les procédures :
#include "stm32f4xx_hal.h"
void Write_Flash(uint32_t Address, uint32_t Data) {
// Déverrouiller le Flash
HAL_FLASH_Unlock();
// Effacer le secteur Flash
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t SectorError;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.Sector = FLASH_SECTOR_2 ;
EraseInitStruct.NbSectors = 1 ;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError)! = HAL_OK) {
// Gérer l’erreur
}
// Programmer la mémoire Flash
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Gérer l’erreur
}
// Verrouiller le Flash
HAL_FLASH_Lock();
}
int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Boucle principale
}
}
Cette illustration fournit une démonstration complète du déverrouillage, de l’effacement, de l’écriture et du verrouillage ultérieur de la mémoire flash d’un microcontrôleur STM32 avec fonctionnalités HAL. Nous espérons que ce guide vous a été utile pour la programmation de votre mémoire flash STM32.
Si vous rencontrez des difficultés, veuillez vous référer à notre tutoriel sur la résolution de l’erreur HAL INITIALIZATION FAILED.
Si vous avez des questions ou des commentaires, n’hésitez pas à laisser un commentaire ci-dessous.
Laisser un commentaire