Instrukcja pisania pamięci flash STM32 przy użyciu HAL

Instrukcja pisania pamięci flash STM32 przy użyciu HAL

Jeśli zdecydowałeś się wykorzystać pamięć flash STM32 z warstwą abstrakcji sprzętowej (HAL), ten przewodnik przedstawi Ci niezbędne kroki potrzebne do prostego programowania mikrokontrolerów. Konfiguracja warstwy abstrakcji sprzętowej (HAL) jest całkiem łatwa, jeśli zastosujesz się do poniższych przykładów.

Jak mogę dokonać zapisu do pamięci flash STM32 za pomocą HAL?

1. Przygotuj pamięć flash do zapisu

  1. Dodaj niezbędne pliki nagłówkowe : Użyj #include "stm32f4xx_hal.h".
  2. Odblokuj pamięć flash : Przed zapisem musisz odblokować pamięć flash, wykonując polecenie: HAL_FLASH_Unlock();.
  3. Wymaż pamięć Flash : Aby zapisać dane, wymaż konkretny sektor pamięci Flash, którego zamierzasz użyć. Można to zrobić za pomocą funkcji 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. Zapisywanie danych do pamięci flash

  1. Użyj funkcji HAL_FLASH_Program, aby wprowadzić dane do pamięci flash. Dane mogą być zapisane w różnych formach: bajtów, półsłów, słów lub podwójnych słów.
    • 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 }
  2. Ponowne zablokowanie pamięci flash : Po zakończeniu zapisu danych konieczne jest ponowne zablokowanie pamięci flash w celu uniknięcia niezamierzonego nadpisania: HAL_FLASH_Lock();.

Przykładowy kod dla pamięci flash STM32 z HAL

Poniżej znajduje się kompleksowy przykład łączący wszystkie procedury:


#include "stm32f4xx_hal.h"

void Write_Flash(uint32_t Address, uint32_t Data) {
// Odblokuj Flasha
HAL_FLASH_Unlock();

// Wymaż sektor 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) {
// Obsługuj błąd
}

// Zaprogramuj pamięć Flash
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)! = HAL_OK) {
// Obsłuż błąd
}

// Zablokuj Flasha
HAL_FLASH_Lock();
}

int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// Pętla główna
}
}

Ta ilustracja przedstawia kompletną demonstrację odblokowywania, kasowania, zapisywania i późniejszego blokowania pamięci flash mikrokontrolera STM32 z funkcjonalnościami HAL. Mamy nadzieję, że ten przewodnik był pomocny w programowaniu pamięci flash STM32.

Jeśli napotkasz jakiekolwiek trudności, zapoznaj się z naszym poradnikiem dotyczącym rozwiązywania błędu HAL INITIALIZATION FAILED.

Jeśli masz jakieś pytania lub uwagi, możesz je śmiało zostawić w komentarzu poniżej.

Źródło i obrazy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *