|
Использование SWDIO & SWCLK пинов как GPIO, но и дебаг нужно сохранить! |
|
|
|
May 9 2016, 11:27
|
Профессионал
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807
|
STM32F030F4P6, IAR v7.60.1, Jet-Link Ultra. Уже в который раз попадаю на одни и те же грабли: если внутри main делаю попытку переинициализировать SWDIO и SWCLK как выход в лог 1 / выход в лог 0 соответственно, то отладчик более не может подключиться к MCU. Странно, но код переинициализации выводов расположен после точки останова main - то есть по сбросу должны быть активны дебажные свойства пинов. Лечится это тяжело, и у меня - только в Иаре, если в опциях стоит "подключаться во время сброса". Замыкаем вывод сброса на землю и отпускаем одновременно с запуском дебага. В этом случае, с ...дцатой попытки удается подключиться к кристаллу и стереть его, после чего можно нормально шить правленной прошивкой. Прошу помощи: кто и как организует работу с этими выводами, чтобы и отлаживать можно было, и коннектился дебаггер нормально, и после отладки и прога могла нормально работать с переиниц выводами? Сейчас у меня они выведены на разъем без пуллапов и пулдаунов (по идее должны использоваться внутренние...).
|
|
|
|
|
May 9 2016, 13:36
|
Гуру
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095
|
QUOTE (ivainc1789 @ May 9 2016, 14:27) Странно, но код переинициализации выводов расположен после точки останова main - то есть по сбросу должны быть активны дебажные свойства пинов. Не знаю, как это организовано при работе с кортексами, но старые ARM7TDMI работать при активном сигнале сброса не могли и с ними работа происходила примерно так: Отпускается сброс, (процессор при этом начинает работать и успевает кое-что сделать), отладчик дает команду halt, останавливает ядро, расставляет точки останова (если стоит галочка - ставит точку останова на входе в main()) , ставит счетчик команд на первую команду и запускает выполнение (если стояла галочка "бежать до main()). Так вот, если процессор от отпускания сброса до halt успевал запретить JTAG или поломать тактирование - ситуация была в точности ваша. Производителями отладчиков рекомендовалось в отладочной версии программы в самое начало стартапа ставить задержку из пустого цикла, чтобы за время исполнения этой задержки отладчик успевал выполнить команду halt. Возможно, для кортексов у отладчиков в режиме без галочки "подключаться с зажатым Reset" алгоритм работы такой же. Для стирания такого кристалла можно перед сбросом зажать ногу BOOT0 - тогда кристалл запустится в режиме встроенного загрузчика, swd останется активным и сможет стереть кристалл.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 10 2016, 10:16
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(Aner @ May 10 2016, 13:08) Понятно что не догнал, еще разок ... 6 пинов это +; -; Reset; Boot0; Rx;Tx Обсуждалась минимизация числа проводников. Цитата В итоге, как мы не пытаемся прийти к минимальному кол-ву пинов в SWD - все равно получается от 4 до 5-ти... Можно, конечно, сделать джампер "BOOT0" и кнопку "Reset", а для прошивки использовать существующий в некоторых изделиях UART/RS232/422-порт. Кста, я тоже везде стараюсь выводить эти самые 6 пинов (uart используется как отладочная консоль).
|
|
|
|
|
Jun 6 2018, 20:39
|
Группа: Новичок
Сообщений: 2
Регистрация: 6-06-18
Пользователь №: 104 932
|
Всех приветствую! Схожая ситуация, но с другой стороны. На таком же камне. После отладки проги по SWD, активировал РА13 и РА14 на выход (так должно быть по задумке) - не работают. Дебагер тоже перастает работать, но так и должно быть! Снял инициализацию РА13 и РА14, все вернулось. Нужно что бы заработали ноги РА13 и РА14. Может кто сталкивался? Может компилятор ставит какой затык? Или подпалил ноги пока отлаживал прогу?
|
|
|
|
|
Jun 7 2018, 05:29
|
Знающий
Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250
|
Цитата(Aner @ May 10 2016, 13:08) 6 пинов это +; -; Reset; Boot0; Rx;Tx Можно сделать хитрый PCB-разъем (навроде камаковских разъемов или ISA): пока вставляете, закоротится сначала Boot0, потом Reset, потом отпустится Boot0 и отпустится Reset. В итоге от платы к компьютеру только 4 проводочка идти будет… Сам прошиваю STM32 только через бутлоадер (т.к. это очень удобно: после прошивки этот же преобразователь USB<->TTL используется для отладки), но Boot и Reset делаю в виде кнопочек и жму их вручную.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|