реклама на сайте
подробности

 
 
> Эмуляция EEPROM STM32 (an2594) кто пользовался? Подключил, компилируется, подскажите как писать/читать теперь?
smk
сообщение Apr 6 2012, 18:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Прошу подсказать где в памяти искать записанные значения и как правильно пользоваться штатными функциями EE_WriteVariable и EE_ReadVariable ? Прежде чем зашивать в железо решил посмотреть в симуляторе как оно работает. Компилируется и симулируется без замечаний, но я не могу найти куда оно все пишет? По указанным адресам значатся нули. Как писать и читать? Ну например записать/прочитать переменную размером в байт / два байта ? Массив char или int ? Кто пользовался, подскажите пожалуйста. Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smk
сообщение Apr 12 2012, 08:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Как выяснилось, Keil действительно не показывает в симуляторе запись во flash. Уж не знаю почему они так сделали, но собственно сам программный код видно, а записанное из программы нет. И при попытке чтения из программы (в симуляторе) тоже имеем нули, каковые и отображаются симулятором по соответствующим адресам. В железе же работает и чтение и запись. Привожу код, может кому сэкономлю пару минут...

CODE
unsigned int Read32FromFlash (unsigned int address)
{
unsigned int *ip;
unsigned int a;
ip = (unsigned int*)address;
a=*ip;
return a;
}


void FLASH32_Unlock(void)
{
FLASH->KEYR = ((uint32_t)0x45670123);
FLASH->KEYR = ((uint32_t)0xCDEF89AB);
}

void FLASH32_Lock(void)
{
FLASH->CR |= FLASH_CR_LOCK;
}


void FLASH_Program32Word(unsigned int Address, unsigned int Data)
{
__IO uint32_t tmp = 0;
while ((FLASH->SR & FLASH_SR_BSY) != 0 );
FLASH->CR |= FLASH_CR_PG; /* Programm the flash */
//FLASH->CR |= (0x00000001);
*(__IO uint16_t*)Address = (uint16_t)Data;
while ((FLASH->SR & FLASH_SR_BSY) != 0 );
tmp = Address + 2;
*(__IO uint16_t*) tmp = Data >> 16;
while ((FLASH->SR & FLASH_SR_BSY) != 0 );
FLASH->CR &= ~FLASH_CR_PG;
}


Сообщение отредактировал IgorKossak - Apr 19 2012, 08:14
Причина редактирования: [codebox]


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 02:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01535 секунд с 7
ELECTRONIX ©2004-2016