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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

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

Сообщение 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;
может кто знает, что не так?
Реклама
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

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

Сообщение radio-kot »

А с примерами компилятора или к отладочным платам сходится? keil.com база знаний
Будете проходить мимо- проходите!
Реклама
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

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

Сообщение zvukovik »

почему-то не нашёл ни того, ни другого, в интернете всего одна статья про работу с FLASH, с ней код тоже сходится, попробовал использовать стандартные функции - то же самое

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

FLASH_Unlock();
FLASH_ProgramHalfWord(0x08004000, (uint16_t)0x1234);
FLASH_Lock();
Аватара пользователя
nick17
Встал на лапы
Сообщения: 134
Зарегистрирован: Пт июн 26, 2009 06:40:07
Контактная информация:

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

Сообщение 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;
}
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

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

Сообщение zvukovik »

к сожалению всё сходится с моим кодом, а ещё выяснилась одна деталь, зависает оно на самой строке присвоения, типа этого

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

*((uint32_t*)0x08004000)=0x1234;
предварительное стирание страницы делать пытаюсь, оно проходит, но не помогает
причём зависает мк так, что и прерывания не работают
Реклама
Аватара пользователя
zvukovik
Встал на лапы
Сообщения: 140
Зарегистрирован: Вт авг 03, 2010 15:21:20
Откуда: Екатеринбург

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

Сообщение zvukovik »

тема закрыта, стандартные функции всё-таки заработали
Реклама
Ответить

Вернуться в «ARM»