При написании загрузчика столкнулся с непонятными граблями. Пользуюсь стандартной библиотекой
Код
* @file stm32f2xx_flash.c
* @version V1.0.0
* @date 18-April-2011
* @version V1.0.0
* @date 18-April-2011
Вызываю
FLASH_Unlock ()
FLASH_EraseSector () - возвращает complete
FLASH_Unlock ()
FLASH_ProgramByte ()
ProgramByte выпадает в hardfault на команде branch на FLASH_WaitForLastOperation()
Код
/* if the previous operation is completed, proceed to program the new data */
FLASH->CR &= CR_PSIZE_MASK;
FLASH->CR |= FLASH_PSIZE_BYTE;
FLASH->CR |= FLASH_CR_PG;
*(__IO uint8_t*)Address = Data;
/* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation();
FLASH->CR &= CR_PSIZE_MASK;
FLASH->CR |= FLASH_PSIZE_BYTE;
FLASH->CR |= FLASH_CR_PG;
*(__IO uint8_t*)Address = Data;
/* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation();
Пробовал перемещать весь модуль stm32f2xx_flash в ОЗУ, не помогло. (а надо ли? в reference manual сказано, что к flash нельзя обращаться в момент записи, но в примерах EEPROM Emulation ничего для этого не предпринимается).
Кто-нибудь вообще запись во флеш делал?