例えば、FLASHに5という整数の変数を書き込み、電源が切れてデバイスの電源がオンになった後、再度読み取ります。
何かを書くためには、まずページを消去してから書く必要があることをすでに知っています。
マニュアルには次のように書かれています:
- フラッシュオプションキーレジスタ(FLASH_OPTKEYR)にOPTKEY1 = 0x0819 2A3Bを書き込む
- フラッシュオプションキーレジスタ(FLASH_OPTKEYR)にOPTKEY2 = 0x4C5D 6E7Fを書き込みます。
このタスクを実行するにはどうすればよいですか?
セクター0には、0x0800 0000から0x0800 3FFFまでのブロックアドレスがあります。これは、書き込み先です。
71ページのマニュアルへのリンク: STM32 Manual
HALライブラリを使用してフラッシュにデータを書き込むために、次のコードを使用できます。
void Write_Flash(uint8_t data)
{
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
FLASH_Erase_Sector(FLASH_SECTOR_6, VOLTAGE_RANGE_3);
HAL_FLASH_Program(TYPEPROGRAM_Word, FlashAddress, data);
HAL_FLASH_Lock();
}
次のようにリンカースクリプトを更新する必要があります。 DATA
にMEMORY
を追加し、SECTIONS
に.user_data
を追加します。
MEMORY
{
RAM (xrw) : Origin = 0x20000000, LENGTH = 320K
CCMRAM (rw) : Origin = 0x10000000, LENGTH = 64K
FLASH (rx) : Origin = 0x8000000, LENGTH = 2048K
DATA (rwx) : Origin = 0x08040000, LENGTH = 128k
}
/* Define output sections */
SECTIONS
{
.user_data :
{
. = ALIGN(4);
KEEP(*(.user_data))
. = ALIGN(4);
} > DATA
電源投入後にデータを読み取るために、メインコードに次の属性を追加する必要があります
__attribute__((__section__(".user_data"))) const char userConfig[64];
これらすべての後、userConfig[0]
を呼び出してフラッシュデータを読み取ることができます。