Keil uVision MDK-Lite, плата STM32F072B-Discovery и API-интерфейс для флеш-памяти

10

Я использую 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)

тогда это отбрасывает сеанс отладки. Если вместо этого я войду в одну и ту же строку, а затем перейду через каждый из вызовов в процедуре флэш-стирания, это сработает и в конечном итоге выйдет из процедуры, и я смогу отладить оставшуюся часть кода.

netskink
источник
Не уверен, но, возможно, USB-сторона CMSIS-DAP была выключена. Эта плата имеет довольно сложное распределение питания для внешних компонентов отладки. Не удается получить доступ к цели, вероятно, означает, что соединение (по последовательному каналу) с DAP было разорвано.
Шон
Мы говорим о встроенном ST-LINK / V2 как отладчике?
Бенс Кауликс
Если вы можете поделиться изображением кода, кто-то другой сможет проверить (и исключить проблемы с оборудованием). Только у меня есть доска M7 ...
Шон
Bence Kaulics, его отладчик, встроенный в плату диско stm32f072B. Это отладчик ST-Link, а не отладчик Keil ULINK2, который является ST-LINK / V2. У меня есть один из тех, кто подключил USB-отладчик Keil, но он подключается к плате с помощью ленточного кабеля. Я использую разъем mini-USB ST-Link на плате, а не разъем ленточного кабеля. Плата питается от разъема mini-usb, а не от отдельного источника питания.
netskink
1
По поводу примера кода. Образец предоставлен репо обнаружения от STMicro. Путь проекта в репозитории ST - Projects / STM32F072B-Discovery / examples / FLASH / FLASH_EraseProgram. Я использую проект MDK-ARM в этом каталоге. Это терпит неудачу на линии 108, где это делает HAL_FLASHEx_Erase ()
netskink

Ответы:

7

Я предполагаю, что это источник питания, связанный на некотором уровне. Либо внешнее питание, либо бортовое переключение силовых шин.

Чтобы прояснить сценарий, отладка работает нормально после аппаратного сброса, но когда ваша цель стирает блок флэш-памяти, отладочное соединение прерывается?

Отладка не заботится о корректной работе кода - вы можете находиться в состоянии блокировки, и остановка отладки все равно должна работать. Единственная вещь на стороне процессора, которая блокирует отладку, это тупиковый доступ AHB. Это означает, что проблема связана либо с интерфейсом SWD между STM32F7 и встроенным интерфейсным чипом USB-SWD (я полагаю, также STM32). У этого устройства есть некоторая коммутация шины питания, что смутило меня, когда я впервые использовал плату.

Стоит отметить, что стирание флэш-памяти увеличит ток, потребляемый устройством - ваш внешний блок питания работает, и можете ли вы использовать альтернативу?

Изменить: на основе ваших отзывов, что перешагивание через код вызывает сбой отладчика, в то время как одноступенчатый нет, я думаю, что ваша проблема связана с этим вопросом .

Переход осуществляется с использованием точки останова (и опроса состояния останова), тогда как одношаговое поддерживается аппаратно. Это по-прежнему не объясняет, почему отладчик кажется запутанным, но допускает возможность того, что отладчик пытается получить доступ к коду (из флэш-памяти), пока контроллер флэш-памяти активен.

Основываясь на этих наблюдениях, я бы предложил вам установить точку останова после стирания и постараться избежать запуска этого сценария.

Шон Хулихейн
источник
Правильно, работает нормально, но когда я стираю блок, соединение usb с отладчиком обрывается. Я использовал USB-концентратор без питания, так что это казалось логичным; однако, прямое подключение к компьютеру и использование другого концентратора дает тот же результат.
netskink
Если вы выполняете код во время работы с флэш-доступом, вы временно заблокируете AHB. Я, шагая по этому сценарию, может быть грязным. stackoverflow.com/questions/3445598 имеет больше.
Шон