eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2022-07-14 10:04 pm

Ядрен микроконтроллер!

Сегодня экспериментировал с сохранением показаний азимутального энкодера, когда телескоп останавливается (чтобы, если вдруг произойдет отключение питания, можно было эту точку восстановить). И наткнулся на непонятный косяк: на экспериментальной плате, с которой я баловался, и на плате контроллера энкодера стоят внешне одинаковые STM32F072C8T6. Однако, содержимое регистра FLASH_SIZE у "на побаловаться" — 64кБ, а у "на серьезно" — 128кБ. А я еще намедни не понимал, отчего это у меня не получается конфигурацию сохранить...
ОК, поменял в коде линкер на 072CB, и опять фигвам: в перую же страницу после кода сохраняться не хочет. ОК, забульбенил тест - каждые полсекунды инкрементировать позицию сохранения. Где-то на тысячной стало успешно сохраняться. Не понимаю. Пытаюсь стереть память — выхожу на подвисание на
while(!(FLASH->SR & FLASH_SR_EOP));

Чертовщина какая-то. ОК, заменил на:
uint32_t ctr = 0;
while(!(FLASH->SR & FLASH_SR_EOP) && ++ctr < 1000000);

Фигвам: не стирается!
Гугол подсказал лишь, что для успешного стирания флеш-памяти должен работать HSI. Но он ведь и так у меня врубается сразу же! Лишь затем я врубаю еще и HSI48 для подключения USB (но HSI сам не отключаю, проверил).

Буду разбираться, что за нафиг. Причем, на "подопытном" МК с 64кБ флеша такой засады не было!