使用HAL的STM32快閃記憶體寫入指南
如果您選擇使用具有硬體抽象層 (HAL) 的 STM32 閃存,本指南將提供簡單的微控制器程式設計所需的基本步驟。按照下面概述的範例設定硬體抽象層 (HAL)是非常容易管理的。
如何使用HAL寫入STM32快閃記憶體?
1. 準備好快閃記憶體進行寫入
- 合併必要的頭檔:使用
#include "stm32f4xx_hal.h"
. - 解鎖快閃記憶體:您必須在寫入之前解鎖閃存,方法是執行:
HAL_FLASH_Unlock();
。 - 擦除快閃記憶體:要寫入數據,請擦除要使用的特定閃存扇區。這是透過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. 向快閃記憶體寫入資料
- 利用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 }
-
- 重新鎖定快閃記憶體:完成資料寫入後,必須再次鎖定快閃記憶體以避免任何意外覆蓋:
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 錯誤的教學。
如果您有任何疑問或回饋,請隨時在下面發表評論。
發佈留言