Добрый день.
Имеется устройство с бутлоадером на МК STM32F205RBT6, бутлоадер лежит в 0 секторе, настройки программы хранятся в первом, с адреса (0x08004000). Сама программа находится с адреса 0x08010000.
Пытаюсь записать в память следующим кодом:
Код:
|
FLASH_Unlock();
FLASH_EraseSector(FLASH_Sector_1, VoltageRange_3);
FLASH_Lock();
FLASH_Unlock();
FLASH_ProgramWord(0x08004000,screw.pauseTime);
FLASH_ProgramWord(0x08004000+(4*1),screw.workTime) ;
FLASH_ProgramWord(0x08004000+(4*2),feeder.pauseTim e);
FLASH_ProgramWord(0x08004000+(4*3),feeder.workTime );
FLASH_ProgramWord(0x08004000+(4*4),pumpCO.gisterez is);
FLASH_ProgramWord(0x08004000+(4*5),pumpCO.temperat ureOn);
FLASH_ProgramWord(0x08004000+(4*6),pumpGVS.gistere zis);
FLASH_ProgramWord(0x08004000+(4*7),pumpGVS.tempera tureOn);
FLASH_Lock(); |
Но в память ничего не сохраняется, даже не пытается записаться. В чем может быть проблема? Подскажите на что обратить внимание? Что может влиять на запись во флеш? Питание контроллера 3.3в
В примере от СТ нашел что еще сбрасывают флаги:
Код:
|
/* Clear pending flags (if any) */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); |
а так все это же:
Код:
|
/* Unlock the Flash to enable the flash control register access *************/
FLASH_Unlock();
/* Erase the user Flash area
(area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR) ***********/
/* Clear pending flags (if any) */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
/* Get the number of the start and end sectors */
StartSector = GetSector(FLASH_USER_START_ADDR);
EndSector = GetSector(FLASH_USER_END_ADDR);
for (SectorCounter = StartSector; SectorCounter ‹ EndSector; SectorCounter += 8)
{
/* Device voltage range supposed to be [2.7V to 3.6V], the operation will
be done by word */
if (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE)
{
/* Error occurred while sector erase.
User can add here some code to deal with this error */
while (1)
{
}
}
}
/* Program the user Flash area word by word
(area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR) ***********/
Address = FLASH_USER_START_ADDR;
while (Address ‹ FLASH_USER_END_ADDR)
{
if (FLASH_ProgramWord(Address, DATA_32) == FLASH_COMPLETE)
{
Address = Address + 4;
}
else
{
/* Error occurred while writing data in Flash memory.
User can add here some code to deal with this error */
while (1)
{
}
}
}
/* Lock the Flash to disable the flash control register access (recommended
to protect the FLASH memory against possible unwanted operation) *********/
FLASH_Lock(); |