ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
25 марта
1507451 Топик полностью
FDA (21.03.2025 13:45, просмотров: 78) ответил AlexBi на Возникла непонятная проблема при записи во встроенную флеш у AT32F407. Запись ведется при исполнении программы из этого же флеша, в область не занятую программой. Перед записью работают уарты, таймеры, ацп, дма, ethernet, ни чего не запрещается, только запрещаются прерывания через __disable_irq() То, что программа остановится на время записи меня не смущает. Запись в итоге выполняется (записывается один сектор), но после записи программа может улететь не пойми куда, что
Я в этом контроллере вот так читаю/пишу: 

#define FLASH_PAGE_SIZE 2048

#define FLASH_PRG_ADDR ((uint32_t)0x08000000)

#define FLASH_DATA_ADDR (FLASH_PRG_ADDR + (1024 * 1024 - FLASH_PAGE_SIZE))



//------------------------------


void flashPageRead(uint8_t *pBuf)

{

uint32_t* src = (void*)FLASH_DATA_ADDR;

uint32_t* dest = (void*)pBuf;


for (uint16_t i = 0; i < FLASH_PAGE_SIZE / 4; i++)

dest[i] = src[i];

}


//------------------------------


void flashPageWrite(uint8_t *pBuf)

{

flash_unlock();

flash_sector_erase(FLASH_DATA_ADDR);

flash_lock();

flash_unlock();

flash_status_type status = FLASH_OPERATE_DONE;

uint32_t* src = (void*)pBuf;

for (uint16_t i = 0; i < FLASH_PAGE_SIZE / 4; i++)

{

status = flash_word_program(FLASH_DATA_ADDR + i * 4, src[i]);

if (status != FLASH_OPERATE_DONE)

break;

}


flash_lock();

}