Страница 1 из 1
STM32 программирование FLASH
Добавлено: Вт авг 14, 2012 22:25:59
zvukovik
пытаюсь записать данные во FLASH, зависает на ожидании завершения операции, с мануалом всё сходится
Код: Выделить всё
if(FLASH->CR&FLASH_CR_LOCK)
{
FLASH->KEYR=FLASH_KEY1;
FLASH->KEYR=FLASH_KEY2;//проверял, разблокируется успешно
}
FLASH->CR|= FLASH_CR_PG;
*addr=(uint16_t)data;
while(FLASH->SR&FLASH_SR_BSY);//вот здесь всё зависает
FLASH->CR &= ~FLASH_CR_PG;
FLASH->CR |= FLASH_CR_LOCK;
может кто знает, что не так?
Re: STM32 программирование FLASH
Добавлено: Вт авг 14, 2012 22:28:49
radio-kot
А с примерами компилятора или к отладочным платам сходится? keil.com база знаний
Re: STM32 программирование FLASH
Добавлено: Вт авг 14, 2012 22:41:59
zvukovik
почему-то не нашёл ни того, ни другого, в интернете всего одна статья про работу с FLASH, с ней код тоже сходится, попробовал использовать стандартные функции - то же самое
Код: Выделить всё
FLASH_Unlock();
FLASH_ProgramHalfWord(0x08004000, (uint16_t)0x1234);
FLASH_Lock();
Re: STM32 программирование FLASH
Добавлено: Ср авг 15, 2012 13:09:33
nick17
Держи, мож поможет

Такая же была проблема
Код: Выделить всё
void save_param_to_flash(uint32_t first_address_page)
{
//unlock flash
FLASH->KEYR=0x45670123;
FLASH->KEYR=0xCDEF89AB;
//set programing bit
FLASH->CR |= FLASH_CR_PG;
//save time
*((uint16_t*)first_address_page) = time;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save frequency
*((uint16_t*)first_address_page+2) = frequency;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save time_on
*((uint16_t*)first_address_page+4) = percent;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save mode
*((uint16_t*)first_address_page+6) = mode;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save current
*((uint16_t*)first_address_page+8) = current;
FLASH->CR &= ~FLASH_CR_PG;
//lock flash
FLASH->CR |= FLASH_CR_LOCK;
}
Re: STM32 программирование FLASH
Добавлено: Ср авг 15, 2012 13:46:10
zvukovik
к сожалению всё сходится с моим кодом, а ещё выяснилась одна деталь, зависает оно на самой строке присвоения, типа этого
предварительное стирание страницы делать пытаюсь, оно проходит, но не помогает
причём зависает мк так, что и прерывания не работают
Re: STM32 программирование FLASH
Добавлено: Чт авг 16, 2012 23:02:50
zvukovik
тема закрыта, стандартные функции всё-таки заработали