Страница 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
к сожалению всё сходится с моим кодом, а ещё выяснилась одна деталь, зависает оно на самой строке присвоения, типа этого

Код: Выделить всё

*((uint32_t*)0x08004000)=0x1234;
предварительное стирание страницы делать пытаюсь, оно проходит, но не помогает
причём зависает мк так, что и прерывания не работают

Re: STM32 программирование FLASH

Добавлено: Чт авг 16, 2012 23:02:50
zvukovik
тема закрыта, стандартные функции всё-таки заработали