1.はじめに
1.1オンチップEEPROMの概要
L0のオンチップeeprom機能は、主にシステム構成情報を保存するために使用されます。f103が構成情報を保存する必要がある場合は、追加のeepromチップが必要です。オンチップeepromメカニズムは、このシリーズの低消費電力属性にも準拠しています。
1.2EEPROM操作の書き込み
この操作の目的は、ワードまたはワードの一部をデータEEPROMに書き込むことです。ユーザーは、正しいアドレスと大文字と小文字で正しい値を書き込む必要があります。メモリインターフェイスは、必要に応じて自動的に消去操作を実行します(現在、すべてのビットが0に設定されている場合、書き込む前に古いコンテンツを削除する必要はありません)。同様に、書き込むデータが0の場合、消去操作のみが実行されます。書き込み操作または消去操作のみが実行される場合、継続時間はTprog(3.2 ms)です。両方が実行される場合、継続時間は2 x Tprog(6.4 ms)です。消去および書き込み操作ごとにFIXフラグが1に設定されている場合、メモリインターフェイスを強制的に実行することができます。
ご注意ください
- 通常、フラッシュ消去後は0xff、オンチップEEPROM消去後は0x00です。
- 通常、フラッシュはプログラミングの前に消去する必要があり、stm32のメモリインターフェイスは、ユーザーが追加の消去命令を実行する必要なしに、消去操作を自動的に実行します。
2、プログラミング
//eeprom地址
#define EEPROM_BASE_ADDR 0x08080000
//向偏移地址写入len个字节
void eeprom_write(uint16_t BiasAddress, uint8_t *Data, uint16_t len)
{
uint16_t i;
HAL_StatusTypeDef status = HAL_OK;
HAL_FLASHEx_DATAEEPROM_Unlock();
for(i=0;i<len;i++)
{
status +=HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE, EEPROM_BASE_ADDR+BiasAddress+i, *Data);
Data++;
}
HAL_FLASHEx_DATAEEPROM_Lock();
}
//向偏移地址读取len个字节
void eeprom_read(uint16_t BiasAddress,uint8_t *Buffer,uint16_t Len)
{
uint8_t *wAddr;
wAddr=(uint8_t *)(EEPROM_BASE_ADDR+BiasAddress);
while(Len--)
{
*Buffer++=*wAddr++;
}
}
3、テスト
3.1テストコード
//测试
printf("开始测试\r\n");
printf("写入eeprom数据:[0]:%x [1]:%x\r\n",eeprom_write_data[0],eeprom_write_data[1]);
eeprom_write(0,eeprom_write_data,2);
HAL_Delay(10);
eeprom_read(0,eeprom_read_data,2);
printf("读取的eeprom数据:[0]:%x [1]:%x\r\n",eeprom_read_data[0],eeprom_read_data[1]);
printf("片上eeprom测试完成\r\n");
3.2テスト結果
0x08080000に2バイトを書き込み、アドレスから2バイトを読み取る内容は同じで、テストは成功します。