Наконец до меня добралась платка с алишки с контроллером stm32f401ccu6, которая обзывается «black pill». Позиционируется, как развития идеи с контроллерами stm32f103, которые установлены в платы «blue pill». Если по-русски, то новая называется «черная таблетка», а вторая «синяя таблетка».
Так же у меня сейчас имеется два программатора, один — это дешевый китайский st-link v2 в виде флешки. Далее для простоты буду так и называть «флешка». И второй это st-link v2 в виде «мыльницы», который как вы можете догадаться буду называть «мыльница».
Данную статью я пишу для того, чтобы самому не забыть, как загружать программы. А также описываю те проблемы, с которыми столкнулся при загрузке программ в данные платы. Сразу предупрежу я не пользуюсь IDE от Arduino. Но думаю, информация, изложенная мной в статье будет полезна и тем, кто ей пользуется.
Сразу определимся с терминологией, а именно, что SWD так называется интерфейс для прошивки контроллеров stm32, SWIM интерфейс для прошивки контроллеров stm8 в данной статьи не буду его рассматривать. SWV интерфейс для трассировки по одному проводу. Так же имеется интерфейс jtag, который имеет больше соединений с платой контроллера и позволяет запускать отладку из IDE.
Программаторы
Программатор в виде флешки
Рассмотрим подробнее программаторы, которые у меня есть. И так не считая встроенных в оценочные платы программаторов от st-link, которых у меня две штуки один в discovery c stm32f407 и discovery с stm8s003. То есть теперь у меня два вида программаторов от товарищей из Китая. Оба являются клоном st-link v2, но отличаются по функционалу.
Первый программатор это тот который в виде флешки. Может загружать программы, как в stm32f, так и в stm8. Подключить можно только интерфейс SWD. Кроме этого, на разъем не выведены сигналы для сброса контроллера и сигнал для отладки по одному проводу.
Ниже показано назначение контактов разъема на программаторе. Как видно из фотографии отсутствует сигнал сброса и сигнал для отладки. Хоть и есть сигнал сброса, но он предназначен для контроллеров stm8. Часто допускают ошибку и пытаются его использовать при загрузке в stm32.
Программатор в виде мыльницы
Второй программатор в виде мыльницы, так же может прошивать stm32 и stm8, но в отличии от более дешевого клона уже имеет на борту интерфейс jtag поддерживающий SWD. Что в отличии его дешевого варианта позволяет подключить сигнал сброса контроллера, а также линию передачи отладочной информации SWO. Добавить данные сигнала на дешевый аналог можно, но это дополнительная возня с паяльником, да и в рамках этой статьи я не хотел рассматривать данный вариант.
Распиновка и нумерация выводов на 20-пиновом разъеме представлена ниже. Пока я не пробовал интерфейс jtag. Но как видим у этого программатора можно кроме 4 проводов для SWD дополнительно подключить контакт SWO для вывода информации из программы, а также сигнал сброса. Красным я пометил те сигналы, которые будут использоваться при подключении.
Подопытные платы
Первая плата — это #bluepill (синяя таблетка) я ее покупал давно на предмет по изучать, что за контроллеры 103 линейки. Когда же руки дошли до нее выяснился один не приятный момент. В нее был впаян китайский клон оригинального stm32f103. И после первой попытки залить в него программулину с мигающим светодиодом он перестал отвечать на попытки загрузить в него с помощью программатора флешки, как говорить окирпичился. Потратив несколько часов чтения форумов, было обнаружено, что в ней стоит китайский клон. И по уверению некоторых форумчан было, что данный клон не прошивается с помощью st-link. Поэтому я просто присобачил к нему переходник uart на первый порт и стал шить через uart. Хорошо, что st и видимо клон тоже повторил все возможности, оригинальных контроллеров.
Как видите я даже не стал отключать от него UART. Программатор же подключается с торца.
Второй экземпляр — это #blackpill ( черная таблетка ) и в нее уже впаян, если конечно китайцы не перемаркировали оригинальный чип от ST stm32f401ccu6. Эта модель контроллера более навороченная имеет больше памяти, да и работает не много на большей частоте чем 103. Ядро уже вместо cortex m3 cortex m4, еще на борту всякие плюшки DSP, FPU и т. д.
Подключения
«синяя таблэтка»
Первое, что надо сделать установить дрова. Без проблем находятся на сайте st, единственной сложностью с которой можно столкнуться это необходимость регистрации там. Дрова найти можно по поисковому запросу «st-link v2» под названием «STSW-LINK009»
Далее подключаем программатор флешку к плате, через разъем с торца. Следующим образом VDD питание от программатора к питанию, обратите внимание, что используется линия 3,3В, землю, SWCLK и SWDIO.
Аналогично подключается программатор «мыльница», только используются контакты от 20 контактного разъема. С номерами 7, 9, 19, 20.
Далее на «синей таблетке» нужно перевести перемычку BOOT 0, как показано на фотографии. Если не отключали питание нажимаем на кнопку сброса, чтоб контроллер перешел в режим программирования. На фотографии черная перемычка стоит в режиме загрузки программы.
«черная таблэтка»
Аналогично подключается черная таблетка при использовании плоского разъема, как на фотографии с программатором мыльницей, даже ничего менять не надо, так разъем SWD разведен так же, как и на синей таблетке.
Проблемы, с которыми я столкнулся.
Проблема первая не определялся программатор мыльница.
С программатором флешкой проблем не было. Обновил на нем прошивку, и он спокойно определяется в stm32cubeprogrammer.
С программатором мыльницей же происходит следующая беда, после подключения его программа определяет, что у него серийный номер 3 и подключения не происходит. Для того, чтоб программатор определился, приходиться включить режим shared см. второй скриншот ниже. Далее все работает так же, как и с программатором флешкой.
Проблема вторая после первой прошивки перестал работа программатор
Это проблема возникла, когда я залил прошивку в первый раз в синюю таблетку. После этого она перестала отвечать по swd. Перерыв кучу форумов и поискав решение в мануалах, так и не нашел сразу решения отложил на другое время. И судя по большинству ресурсов многие #окирпичив #SWD даже не стали искать решение данной проблемы и заливают прошивку через UART. Что в принципе делал и я до момента написания данной статьи. В процессе поиска материалов случайно наткнулся на решение данной проблемы, и оно оказалось достаточно простым, но я бы не додумался до решения сам.
Смысл в том, что в stm32cubemx отключен режим отладки, а значит интерфейс swd перестает работать. Чтоб этого не случилось надо на вкладке sys процессе настройки контроллера включить serial wire.
При этом на данной вкладке можно настроить и режим отладки по четырем проводам и по пяти. Но для того, чтоб swd не отключался достаточно поставить Serial Wire.
Так же обратите внимание, что два пина перешли в режим swd.
Если же у вас уже есть готовый проект, то включить swd можно следующим образом:
Разрешить тактирование порта A, так как используется PA13 PA14 добавив строчку _HAL_RCC_GPIOA_CLK_ENABLE(); в файл main.c функцию инициализации портов static void MX_GPIO_Init(void)
А в файле stm32f1xx_hal_msp.c, строка 76 __HAL_AFIO_REMAP_SWJ_DISABLE(); заменить на __HAL_AFIO_REMAP_SWJ_NOJTAG();
В комментарии написано, что данная функция включает SWD без использования JTAG.
Заключение
В данной статье я постарался собрать базовую информацию по подключению программаторов к #stm32f, а также собрал два решения с которыми столкнулся при использовании данных программаторов и контроллеров stm32f.
Надеюсь, данная статья была кому-то полезна, но выпрашивать лайки и подписку на канал я не будут. Дальше надо будет попробовать использовать режим работы #jtag, а также режим отладки с передачей информации по одному проводу.