Я пишу потихоньку свой фреймворк для программирования микроконтроллеров и столкнулся с проблемой. После прошивки программы, собранной моим фреймворком, становится невозможно загрузить прошивку через программатор - st-flash просто зависает. При этом через бутлоадер по-прежнему сохраняется возможность залить прошивку. А возможность отладки через StLink и GDB сохраняется (но если сделать load в gdb, то всё зависнет).
Что характерно, проблема проявляется только на STM32F103 - на STM32F407 всё работает отлично.
Если залить прошивку, собранную с другими библиотеками (скажем, libopencm3 или ChibiOS), то всё начинает работать.
Если запускать st-flash с ключом --debug, то можно видеть бесконечный вывод строки типа
2015-11-23T22:48:24 DEBUG src/stlink-common.c: *** stlink_read_debug32 3 is 0x4002200c
В чём может быть проблема? Я отладку не запрещал специально никакими регистрами, ножки не переназначал. Быть может, отладку надо наоборот в коде специально разрешить?
Кстати, если загрузить в бутлоадер (boot0 = 1), то программатор нормально шьёт. То есть именно как будто я что-то не инициализирую.
UPD: Интересно, 0x4002200c - это адрес статус-регистра контроллера Flash... Всё, что я делаю с контроллером флеш-памяти - это настраиваю задержку при активации PLL:
FLASH_ACR = (FLASH_ACR & ~FLASH_ACR_LATENCY_MASK) | FLASH_ACR_PRFTBE | ((outClk - 1) / 24000000);
Перемещено true_admin из science