Я использую MDK-Lite версии 5.23 с платой STM32F072B-Disco «Discovery» STMicroelectronics и пытаюсь использовать пример Flash, предоставленный образцами Discovery.
Я использовал эту плату и набор инструментов для других примеров, и я кодировал некоторые работы SPI и GPIO. IDE работает как чемпион. Тем не менее, для этого конкретного проекта я могу создать код и запустить его, загрузив и используя кнопку сброса. Я не могу использовать отладчик в проекте, как только я использую процедуру HAL_FLASHEx_Erase (). После выполнения этой процедуры в среде IDE появляется диалоговое окно «Не удается получить доступ к цели. Завершение сеанса отладки».
Что бы это ни стоило, я знаю, что это не ошибка программирования, потому что, если я скачаю код, а затем выполню код, нажав кнопку сброса, он будет работать. Я использовал тот же отладчик с платой TI, и он также мог программировать флэш-память и выполнять флэш-процедуры. Я почти уверен, что не стираю часть flash, где хранится код, так что это не так.
Если я перейду эту строку в main.c
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
тогда это отбрасывает сеанс отладки. Если вместо этого я войду в одну и ту же строку, а затем перейду через каждый из вызовов в процедуре флэш-стирания, это сработает и в конечном итоге выйдет из процедуры, и я смогу отладить оставшуюся часть кода.
Ответы:
Я предполагаю, что это источник питания, связанный на некотором уровне. Либо внешнее питание, либо бортовое переключение силовых шин.
Чтобы прояснить сценарий, отладка работает нормально после аппаратного сброса, но когда ваша цель стирает блок флэш-памяти, отладочное соединение прерывается?
Отладка не заботится о корректной работе кода - вы можете находиться в состоянии блокировки, и остановка отладки все равно должна работать. Единственная вещь на стороне процессора, которая блокирует отладку, это тупиковый доступ AHB. Это означает, что проблема связана либо с интерфейсом SWD между STM32F7 и встроенным интерфейсным чипом USB-SWD (я полагаю, также STM32). У этого устройства есть некоторая коммутация шины питания, что смутило меня, когда я впервые использовал плату.
Стоит отметить, что стирание флэш-памяти увеличит ток, потребляемый устройством - ваш внешний блок питания работает, и можете ли вы использовать альтернативу?
Изменить: на основе ваших отзывов, что перешагивание через код вызывает сбой отладчика, в то время как одноступенчатый нет, я думаю, что ваша проблема связана с этим вопросом .
Переход осуществляется с использованием точки останова (и опроса состояния останова), тогда как одношаговое поддерживается аппаратно. Это по-прежнему не объясняет, почему отладчик кажется запутанным, но допускает возможность того, что отладчик пытается получить доступ к коду (из флэш-памяти), пока контроллер флэш-памяти активен.
Основываясь на этих наблюдениях, я бы предложил вам установить точку останова после стирания и постараться избежать запуска этого сценария.
источник