Flash STM32 tương tự EEPROM khi mất điện dữ liệu vẫn được lưu .
Các ứng dụng đơn giản có thể dùng flash thay các IC EEPROM
Mình giới thiệu 1 số hàm ghi đọc flash
void write_flash_eeprom1 ( uint32_t adress,uint32_t len)
{
unsigned char i=0;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
FLASH_EraseSector(FLASH_Sector_7 , VoltageRange_3);
for(i=0; i<len; i++)
{
I WDG_ReloadCounter();
FLASH_ProgramWord(adress+ i*4,save_buff_eeprom[i]);
}
FLASH_Lock();
}
uint32_t Address0= 0x08060000;
Trong đó với
#define FLASH_Sector_7 ((uint16_t)0x0038) /*!< Sector Number 7 */
//VoltageRange_1 ((uint8_t)0x00) /*!< Device operating range: 1.8V to 2.1V */
//VoltageRange_2 ((uint8_t)0x01) /*!<Device operating range: 2.1V to 2.7V */
//VoltageRange_3 ((uint8_t)0x02) /*!<Device operating range: 2.7V to 3.6V */
//VoltageRange_4 ((uint8_t)0x03) /*!<Device operating range: 2.7V to 3.6V +
VD: write_flash_eeprom1(Address0,16);
void read_flash_eeprom( uint32_t Address ,uint32_t lenght )
{
unsigned long i5=0;
__IO uint32_t* ptr;
ptr = (( uint32_t*)Address );
for(i5=0; i5< lenght ; i5++)
{ IWDG_ReloadCounter();
read_buff_eeprom[i5] = *ptr;
ptr++; //ptr+4 long 4byte
}
}
read_flash_eeprom(Address0,16);