使用HAL的STM32快閃記憶體寫入指南

使用HAL的STM32快閃記憶體寫入指南

如果您選擇使用具有硬體抽象層 (HAL) 的 STM32 閃存,本指南將提供簡單的微控制器程式設計所需的基本步驟。按照下面概述的範例設定硬體抽象層 (HAL)是非常容易管理的。

如何使用HAL寫入STM32快閃記憶體?

1. 準備好快閃記憶體進行寫入

  1. 合併必要的頭檔:使用#include "stm32f4xx_hal.h".
  2. 解鎖快閃記憶體:您必須在寫入之前解鎖閃存,方法是執行:HAL_FLASH_Unlock();
  3. 擦除快閃記憶體:要寫入數據,請擦除要使用的特定閃存扇區。這是透過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. 向快閃記憶體寫入資料

  1. 利用HAL_FLASH_Program函數將資料輸入到快閃記憶體中。資料可以以多種形式寫入:位元組、半字、字或雙字。
    • 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. 重新鎖定快閃記憶體:完成資料寫入後,必須再次鎖定快閃記憶體以避免任何意外覆蓋:HAL_FLASH_Lock();

帶有 HAL 的 STM32 快閃記憶體範例程式碼

以下是合併所有過程的綜合範例:


#include "stm32f4xx_hal.h"

void Write_Flash(uint32_t Address, uint32_t Data) {
// 解鎖快閃
HAL_FLASH_Unlock();

// 擦除Flash磁區
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t 磁區錯誤;

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) {
// 處理錯誤
}

// 對 Flash 記憶體進行程式設計
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)!= HAL_OK) {
// 處理錯誤
}

// 鎖定快​​閃記憶體
HAL_FLASH_Lock();
}

int main(void) {
HAL_Init();
Write_Flash(0x08008000, 0x12345678);
while (1) {
// 主循環
}
}

該插圖完整演示瞭如何解鎖、擦除、寫入以及隨後鎖定具有 HAL 功能的 STM32 微控制器的快閃記憶體。我們相信本指南對您的 STM32 快閃記憶體程式設計有所幫助。

如果您遇到任何挑戰,請參閱我們有關解決 HAL INITIALIZATION FAILED 錯誤的教學。

如果您有任何疑問或回饋,請隨時在下面發表評論。

來源和圖片

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *