Comment écrire dans la mémoire Flash de l’STM32 en utilisant HAL

Comment écrire dans la mémoire Flash de l’STM32 en utilisant HAL

Écrire dans la mémoire Flash d'un microcontrôleur STM32 peut sembler déroutant, surtout si l'on débute avec les systèmes embarqués. Toutefois, grâce à la couche d'abstraction matérielle (HAL), cette tâche devient beaucoup plus accessible. Dans ce guide, nous vous détaillerons les étapes essentielles pour écrire des données dans la mémoire Flash, en vous fournissant des exemples concrets. Que vous soyez développeur novice ou expérimenté, ce tutoriel vous aidera à maîtriser cette compétence indispensable. Alors, préparez-vous à plonger dans le monde fascinant de la programmation STM32 !

1) Préparation de la mémoire Flash pour l'écriture

  • Inclure les en-têtes nécessaires : #include "stm32f4xx_hal.h".
  • Déverrouiller la mémoire Flash : pour écrire des données, commencez par déverrouiller la mémoire avec la commande HAL_FLASH_Unlock();.
  • Effacer la mémoire Flash : il est impératif d'effacer le secteur de la mémoire Flash où vous souhaitez écrire. Utilisez la fonction suivante :
  • 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 */ }

Notre sélection Amazon

Lenovo LOQ 15IRX10 - Ordinateur Portable 15.6'' FHD (Intel Core i5-13450HX, RAM 16Go, SSD 512Go, NVIDIA RTX 5060 8GB, sans Système d'Exploitation) Clavier rétroéclairé AZERTY Français - Gris
Lenovo LOQ 15IRX10 - Ordinateur Portable 15.6'' FHD (Intel Core i5-13450HX, RAM 16Go, SSD 512Go, NVIDIA RTX 5060 8GB, sans Système d'Exploitation) Clavier rétroéclairé AZERTY Français - Gris
999,99  EUR
FIREBAT Ordinateur portable gaming RTX 5060 GDDR7, plus léger, 300Hz, 2560x1600, 2,5 K, 16'' QHD, Core i7-13700HX, 32 Go (16x2) DDR5, SSD PCIe 4.0 1 To, 500nits, 100%sRGB, Wi-Fi6E, Bluetooth5.3, métal
FIREBAT Ordinateur portable gaming RTX 5060 GDDR7, plus léger, 300Hz, 2560x1600, 2,5 K, 16'' QHD, Core i7-13700HX, 32 Go (16x2) DDR5, SSD PCIe 4.0 1 To, 500nits, 100%sRGB, Wi-Fi6E, Bluetooth5.3, métal
1 196,00  EUR
AOC Ordinateur Portable Gaming AMD Ryzen 7 7735HS9(Jus qu'à 4.75GHZ) 8 cœurs,DDR5 4800MHz,16GO Ram 512Go SSD Étendre à 4 to,Boîtier métallique,Rétroéclairé,WiFi 6,BT5.2,Type C,Pc 16 Pouces
AOC Ordinateur Portable Gaming AMD Ryzen 7 7735HS9(Jus qu'à 4.75GHZ) 8 cœurs,DDR5 4800MHz,16GO Ram 512Go SSD Étendre à 4 to,Boîtier métallique,Rétroéclairé,WiFi 6,BT5.2,Type C,Pc 16 Pouces
629,99  EUR
HP Victus 16-r0003sf Ordinateur Portable Gaming 16" FHD IPS 144 Hz, PC Portable Gamer (Intel Core i7-13620H, RAM 16 Go, SSD 512 Go, Nvidia GeForce RTX 4060 8Go, Windows 11), Laptop Gris, AZERTY
HP Victus 16-r0003sf Ordinateur Portable Gaming 16" FHD IPS 144 Hz, PC Portable Gamer (Intel Core i7-13620H, RAM 16 Go, SSD 512 Go, Nvidia GeForce RTX 4060 8Go, Windows 11), Laptop Gris, AZERTY
999,00  EUR
Lenovo LOQ 15IAX9E - Ordinateur Portable Gaming 15.6'' FHD 144Hz (Intel Core i5-12450HX, RAM 16Go, SSD 512Go, NVIDIA RTX 4050 6Go, sans Système d'Exploitation) Clavier AZERTY - Gris
Lenovo LOQ 15IAX9E - Ordinateur Portable Gaming 15.6'' FHD 144Hz (Intel Core i5-12450HX, RAM 16Go, SSD 512Go, NVIDIA RTX 4050 6Go, sans Système d'Exploitation) Clavier AZERTY - Gris
649,99  EUR

2) Écriture des données dans la mémoire Flash

  • Utilisez la fonction HAL_FLASH_Program pour écrire vos données. Vous pouvez écrire des données en octets, mots, demi-mots ou double mots.
  • Définissez l'adresse de départ dans la mémoire Flash : uint32_t Address = 0x08008000;
  • Spécifiez les données à écrire : uint32_t Data = 0x12345678;
  • Exécutez la fonction d'écriture :
  • if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data) != HAL_OK) { /* Gérer l'erreur */ }
  • HAL_FLASH_Lock();

3) Exemple de code pour la programmation de la mémoire Flash STM32

Voici un exemple complet qui illustre toutes les étapes mentionnées :

  • #include "stm32f4xx_hal.h"
  • Définissez une fonction pour écrire dans la mémoire Flash :
  • void Write_Flash(uint32_t Address, uint32_t Data) {
  • HAL_FLASH_Unlock();
  • Effacer le secteur de la 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 */ }
  • if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data) != HAL_OK) { /* Gérer l'erreur */ }
  • int main(void) { HAL_Init(); Write_Flash(0x08008000, 0x12345678); while (1) { /* Boucle principale */ } }

Passinné en jeuxvidéo, high tech, config PC, je vous concote les meilleurs articles

Newsletter

Newsletter VIP gratuit pour les 10 000 premiers

Inscris-toi à notre newsletter VIP et reste informé des dernières nouveautés ( jeux, promotions, infos exclu ! )

Commentaires