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кБ флеша такой засады не было!

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org