Найти тему
Uninterest

Программаторы для контроллеров stm32

Оглавление

Наконец до меня добралась платка с алишки с контроллером 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. Программатор же подключается с торца.

Синяя таблэтка в интерьере
Синяя таблэтка в интерьере
А этот тот самый китайский контроллер, который из себя изображает оригинальный stm32 у этого название cks32f103c8t6
А этот тот самый китайский контроллер, который из себя изображает оригинальный stm32 у этого название cks32f103c8t6

Второй экземпляр — это #blackpill  ( черная таблетка ) и в нее уже впаян, если конечно китайцы не перемаркировали оригинальный чип от ST stm32f401ccu6. Эта модель контроллера более навороченная имеет больше памяти, да и работает не много на большей частоте чем 103. Ядро уже вместо cortex m3 cortex m4, еще на борту всякие плюшки DSP, FPU и т. д.

А это черная таблэтка
А это черная таблэтка
В ней уже вроде, как оригинальный контроллер stm32fccu6
В ней уже вроде, как оригинальный контроллер stm32fccu6

Подключения

«синяя таблэтка»

Первое, что надо сделать установить дрова. Без проблем находятся на сайте st, единственной сложностью с которой можно столкнуться это необходимость регистрации там. Дрова найти можно по поисковому запросу «st-link v2» под названием «STSW-LINK009»

Далее подключаем программатор флешку к плате, через разъем с торца. Следующим образом VDD питание от программатора к питанию, обратите внимание, что используется линия 3,3В, землю, SWCLK и SWDIO.

Вид со стороны программатора
Вид со стороны программатора
Общий вид подключения
Общий вид подключения

Аналогично подключается программатор «мыльница», только используются контакты от 20 контактного разъема. С номерами 7, 9, 19, 20.

Слева начинается нумерация контактов на разъеме. Контакты 19, 20 питание для контроллера.
Слева начинается нумерация контактов на разъеме. Контакты 19, 20 питание для контроллера.
Общий вид подключения
Общий вид подключения

Далее на «синей таблетке» нужно перевести перемычку BOOT 0, как показано на фотографии. Если не отключали питание нажимаем на кнопку сброса, чтоб контроллер перешел в режим программирования. На фотографии черная перемычка стоит в режиме загрузки программы.

Черная перемычка это BOOT 0. В данном положении происходит загрузка программы.
Черная перемычка это BOOT 0. В данном положении происходит загрузка программы.

«черная таблэтка»

Аналогично подключается черная таблетка при использовании плоского разъема, как на фотографии с программатором мыльницей, даже ничего менять не надо, так разъем SWD разведен так же, как и на синей таблетке.

Проблемы, с которыми я столкнулся.

Проблема первая не определялся программатор мыльница.

С программатором флешкой проблем не было. Обновил на нем прошивку, и он спокойно определяется в stm32cubeprogrammer.

Красным отмечен серийный номер программатора.
Красным отмечен серийный номер программатора.

С программатором мыльницей же происходит следующая беда, после подключения его программа определяет, что у него серийный номер 3 и подключения не происходит. Для того, чтоб программатор определился, приходиться включить режим shared см. второй скриншот ниже. Далее все работает так же, как и с программатором флешкой.

Вот так определяется, когда режим "Shared" Disabled
Вот так определяется, когда режим "Shared" Disabled
Так нормальная работа, но при включенном режиме shared
Так нормальная работа, но при включенном режиме 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, а также режим отладки с передачей информации по одному проводу.