Появился новый вопрос.
Столкнулся с непоняткой при самопрограммировании посредством FPEC (unlock FPEC проходит нормально, виснет проц при попытке стереть страничку).
В документации сказано что для стирания/записи FLASH нужно чтобы был включен HSI.
Нужно-ли чтобы ещё и на вход PLL поступала частота от HSI или можно оставить HSE (или я вообще что-то недопонял).
Код
int flash_page_erase(uint32_t page)
{
while (FPEC->SR & FPEC_SR_BSY) {;}
FPEC->SR = FPEC_SR_WRPRTERR | FPEC_SR_PGERR | FPEC_SR_EOP; // clr by writing 1
FPEC->CR = FPEC_CR_PER; // page erase operation w/o interrupts
FPEC->AR = page; // page address
FPEC->CR |= FPEC_CR_STRT; // start operation
while (FPEC->SR & FPEC_SR_BSY) {;}
return ((FPEC->SR & FPEC_SR_EOP) != 0); // EOP is asserted at the end of each successful program or erase operation
}
Посмотрите пожалуйста может, в коде где косяк. Спасибо!
И ещё интересно как соблюдается следующее требование (благодаря кешу инструкций? ибо программа-то выполняет цикл ожидания из ПЗУ, может её в ОЗУ разместить стоит)?
Цитата
During a write operation to the Flash memory, any attempt to read the Flash memory will
stall the bus. The read operation will proceed correctly once the write operation has
completed. This means that code or data fetches cannot be made while a write/erase
operation is ongoing.
Не дайте умереть!!!:) Сегодня уже целый день бьюсь безуспешно.
Пробовал тактироваться и от HSI и от HSE и от HSE со включенным HSI - ноль. Виснет и всё. Да так что SWD отваливается.
FLASH_WRPR = 0xFFFFFFFF - нет защиты.