STM32F103 emulacja eeprom?

Wszystko o naszych nuklejkach od STM
ODPOWIEDZ
Pawel5
Użytkownik
Posty: 15
Rejestracja: 19 lut 2018, 17:13

STM32F103 emulacja eeprom?

Post autor: Pawel5 » 06 mar 2018, 20:58

Witam.
Odbieram tablicę char po rs232 z PC i wyświetlam na ekranie hd44780, bardzo dobrze to działa.
Dane które odbieram to konfiguracja urządzenia więc wypada żeby ją zapisać w pamięci stałej czyli w przypadku stm32 flash.
Czytałem trochę o tym że trzeba ustawić linkier aby program był zapisywany od danej częsci flash a przez to zrobić sobie miejsce na emulację eeprom.
Jakie opcje Panowie stosujecie i są sprawdzone? Podtrzymanie bateryjne dodatkowej pamięci nie wchodzi w grę bo urządzenie docelowo będzie w nie ogrzewanym miejscu.
Pozdrawiam i liczę na ciekawe pomysły ;)

Awatar użytkownika
SunRiver
Administrator
Posty: 416
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: STM32F103 emulacja eeprom?

Post autor: SunRiver » 06 mar 2018, 21:01

chyba najprostszy i najskuteczniejszy ....

po prostu podłącz eeproma na i2C ...
albo zgrywaj na SD
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Ciastkolog
Nowy
Posty: 2
Rejestracja: 27 sty 2018, 16:12
Kontakt:

Re: STM32F103 emulacja eeprom?

Post autor: Ciastkolog » 07 mar 2018, 8:01

Prosty sposób na zapis we flash:

Kod: Zaznacz cały

#define Page_127        0x0801FC00

void FLASH_write(uint16_t* data, uint16_t size)
{
	uint16_t i;
	FLASH->KEYR = FLASH_KEY1;
	FLASH->KEYR = FLASH_KEY2;
	//FLASH_Erase Page
	while((FLASH->SR&FLASH_SR_BSY));
	FLASH->CR |= FLASH_CR_PER; //Page Erase Set
	FLASH->AR = Page_127; //Page Address
	FLASH->CR |= FLASH_CR_STRT; //Start Page Erase
	while((FLASH->SR&FLASH_SR_BSY));
	FLASH->CR &= ~FLASH_CR_PER; //Page Erase Clear
	//FLASH_Program HalfWord
	FLASH->CR |= FLASH_CR_PG;
	for(i=0; i<size; i++){
		while((FLASH->SR&FLASH_SR_BSY));
		*(__IO uint16_t*)(Page_127 + i*2) = data[i];
	}
	FLASH->CR &= ~FLASH_CR_PG;
	FLASH->CR |= FLASH_CR_LOCK;
}

void FLASH_read(uint16_t* data, uint16_t size)
{
	uint16_t i;
	for(i=0; i<size; i++){
		data[i] = *(__IO uint16_t*)(Page_127 + i*2);
	}

}


Pawel5
Użytkownik
Posty: 15
Rejestracja: 19 lut 2018, 17:13

Re: STM32F103 emulacja eeprom?

Post autor: Pawel5 » 07 mar 2018, 21:15

Dziękuję kolego, na dniach sprawdzę. Nie muszę edytować linkera?

Ciastkolog
Nowy
Posty: 2
Rejestracja: 27 sty 2018, 16:12
Kontakt:

Re: STM32F103 emulacja eeprom?

Post autor: Ciastkolog » 07 mar 2018, 22:18

Nic nie musisz zmieniać w linkerze. Ja używałem tych funkcji na STM32F103RB(128k flash) jeśli chcesz je wykorzystać na procku z mniejszą pamięcią flash musisz zmienić "Page". Tu znajdziesz więcej informacji na temat pamięci flash w stm32f10xx: CD00283419.pdf

ODPOWIEDZ