Notice: Memcache::get(): Server localhost (tcp 11211) failed with: Connection refused (111) in /home/a146/www/we.easyelectronics.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Memcached.php on line 134
Программирование флэш-памяти микроконтроллеров STM32F через ST-LINK V1 из System Workbench for STM32 IDE (SWSTM32) в ОС Ubuntu (GNU/Linux) / STM32 / Сообщество EasyElectronics.ru

Программирование флэш-памяти микроконтроллеров STM32F через ST-LINK V1 из System Workbench for STM32 IDE (SWSTM32) в ОС Ubuntu (GNU/Linux)

НЕ СОВЕТУЮ ПОВТОРЯТЬ ТО, ЧТО НАПИСАНО В ДАННОЙ СТАТЬЕ!
ВОЗНИКАЛИ ПРОБЛЕМЫ ВПЛОТЬ ДО ПОЛНОЙ БЛОКИРОВКИ ПРОГРАММИРУЕМОЙ МИКРОСХЕМЫ.
СОВЕТУЮ ИСПОЛЬЗОВАТЬ БОЛЕЕ СОВРЕМЕННЫЕ ПЛАТЫ С ПРОГРАММАТОРАМИ ST-LINK V2, которые поддерживает программа System Workbench for STM32 IDE (SWSTM32) в ОС Ubuntu.
Приношу извинения за доставленные неудобства, если таковые имели место! Статью со временем удалю или поменяю тему статьи вместе с названием.

Думаю, не только мне приходится работать с платой STM32VLDISCOVERY. По сравнению с другими ознакомительными платами она (иногда) хороша тем, что на ней не навешены дополнительные устройства, следовательно, можно задействовать большинство контактов данной платы для быстрого прототипирования. Недостатки часто становятся достоинствами. :)

Особенность платы STM32VLDISCOVERY в том, что на ней установлен программатор/отладчик ST-LINK V1. Возникли сложности с поддержкой ST-LINK V1 в ОС Ubuntu (GNU/Linux). Поэтому отсутствует поддержка ознакомительных плат, содержащих ST-LINK V1, в программах STM32CubeMX и SWSTM32, портированных на GNU/Linux, в частности на Ubuntu.

Потратив немало времени, удалось таки заставить System Workbench for STM32 IDE (SWSTM32) программировать флэш-память микроконтроллеров STM32F через ST-LINK V1 в Ubuntu! Но, увы, не совсем естественно.

Сперва следовал инструкции в статье: How to deal with a problematic STM32 ST-Link/v1 device and Ubuntu
В первую очередь создаётся файл /etc/modprobe.d/usb-storage.conf с содержимым:
# stlink/v1 ignore mass storage
options usb-storage quirks=0483:3744:i


Затем необходимо создать файл /etc/udev/rules.d/49-stlinkv1.rules с содержимым(ссылку на соответствующую статью, увы, не помню):
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", \
    MODE:="0666", \
    SYMLINK+="stlinkv1_%n"

Затем нужно в терминале запусить команду:
sudo udevadm control --reload-rules

или перезагрузить ЭВМ.
OpenOCD, который загружается из репозитория Ubuntu, будет в этом случае работать с ST-LINK V1, если задавать правильные параметры командной строки.

Далее следовал инструкции, приведенной в первой части статьи: Setting up a GCC/Eclipse toolchain for STM32Nucleo – Part II
Нужно из панели главного меню вызывать меню «Run->External Tools->External Tools Configurations...» для того, чтобы открыть окно «External Tools Configurations». Вид окна «External Tools Configurations» приведен на первой картинке.

Далее:
— в графе «Name» присвойте название, например «ST-LINK V1».
— в графе «Location» укажите путь к OpenOCD(установите из репозитория Ubuntu): /usr/bin/openocd
— в графе «Working Directory» укажите переменную "${workspace_loc}"
— в поле «Arguments» напишите следующее:
-d2 -f board/stm32vldiscovery.cfg -c init -c targets -c halt -c "stm32f1x unlock 0" -c "reset halt" -c "flash write_image erase unlock ${project_loc}/Debug/${project_name}.elf" -c halt -c "verify_image ${project_loc}/Debug/${project_name}.elf" -c "reset run" -c shutdown

Нажмите кнопку «Apply». Таким образом создана конфигурация «ST-LINK V1».
Уже можно програмировать микроконтроллер, вызвав окно «External Tools Configurations» через меню «Run->External Tools->External Tools Configurations...» и нажав кнопку «Run».

Но нельзя не упомянуть одной особенности. В данном случае выбрана была конфигурация «Debug», поэтому в поле «Arguments» при описании пути к программному файлу присутствует название директории «Debug»: ${project_loc}/Debug/${project_name}.elf
Если бы была конфигурация «Release», тогда путь к программному файлу выглядел бы примерно так: ${project_loc}/Release/${project_name}.elf

Но это ещё не всё.
Из панели главного меню, через меню «Run->Run Configurations...» вызовите окно «Run Configurations», вид которого показан на второй картинке.

Выберите пункт «Launch Group» и нажмите кнопочку «New Launch Configuration», которая выглядит как иконка с плюсом. Появится название конфигурации «New_Configuration». Затем нажмите кнопку «Add...», после чего появится окно «Add Launch Configuration». Вид окна «Add Launch Configuration» приведен на третьей картинке.

В окне «Add Launch Configuration» в пункте «Program» выберите конфигурацию «ST-LINK V1» и нажмите кнопку «OK». В окне «Add Launch Configuration» в графе «Name» вместо названия «New_configuration» напишите новое название, например «Using ST-LINK V1» и нажмите кнопку «Apply».
Вид окна «Run Configurations» после указанных действий показан на четвёртой картинке.

Затем можете нажать кнопку «Run» для прошивки микроконтроллера.

Каждый раз, когда вы захотите перепрограммировать флэш-память микроконтроллера, вызывайте меню «Run->Run Configurations...» из панели главного меню и выберите нужную конфигурацию, например «Using ST-LINK V1», затем нажимаете кнопку «Run». Это можно сделать также через выпадающее меню «Run As->Run Configurations...».

Надеюсь, что разработчики программ STM32CubeMX и System Workbench for STM32 IDE (SWSTM32), портированных на GNU/Linux, в будущем решат проблему с ST-LINK V1.

Удачи! :)

Дополнение от 06.12.2016
Провёл эксперимент на другой ЭВМ. Сделал так, как описано выше. Но по неизвестной мне причине самопроизвольно была установлена защита от записи определённых областей флэш-памяти микроконтроллера, что не позволяло загружать программу во флэш-память микроконтроллера. Пришлось загрузить Windows и с помощью ST-LINK Utility снять биты защиты, после чего стало возможным использовать снова OpenOCD для программирования флэш-памяти. Поэтому будьте осторожны!
Удачи!
  • 0
  • 04 декабря 2016, 22:11
  • sw1972

Комментарии (16)

RSS свернуть / развернуть
Команды, которые вы передаете openocd через -c, можно написать в конфиг, и вызывать openocd… -f flash.cfg — получится короче )

Вопрос — что именно делают правила udev и зачем именно они нужны? У меня удалось пользоваться stlink, когда я выполнил от рута описанное тут — fabooh.com/2014/03/16/how-to-deal-with-a-problematic-stm32-st-linkv1-device-and-ubuntu/
0
Есть статья в Википедии, посвящённая udev: https://ru.wikipedia.org/wiki/Udev
udev — менеджер устройств для новых версий ядра Linux, являющийся преемником devfs, hotplug и HAL. Его основная задача — обслуживание файлов устройств (англ. device nodes) в каталоге /dev и обработка всех действий, выполняемых в пространстве пользователя при добавлении/отключении внешних устройств, включая загрузку firmware
Крайне желательно, чтобы были файлы /etc/udev/rules.d/*.rules
В этих файлах прописаны правила доступа к устройствам, в том числе привилегии доступа к файлам устройств.
0
Затем нужно перезагрузить ЭВМ.
Этож не виндовс. Достаточно перезагрузить правила udev
udevadm control --reload-rules
0
  • avatar
  • ikSS
  • 05 декабря 2016, 23:00
Спасибо за совет! Дополню статью.
0
Об этом нельзя не упомянуть.
Провёл эксперимент на другой ЭВМ. Сделал так, как описано выше. Но по неизвестной мне причине самопроизвольно была установлена защита от записи определённых областей флэш-памяти микроконтроллера, что не позволяло загружать программу во флэш-память микроконтроллера. Пришлось загрузить Windows и с помощью ST-LINK Utility снять биты защиты, после чего стало возможным использовать снова OpenOCD для программирования флэш-памяти. Поэтому будьте осторожны!
Удачи!
0
Тег невидим, я говорил о кате.
0
О каком кате речь?
Речь идёт об этой строке, наверное?
-d2 -f board/stm32vldiscovery.cfg -c init -c targets -c halt -c «stm32f1x unlock 0» -c «reset halt» -c «flash write_image erase ${project_loc}/Debug/${project_name}.elf» -c halt -c «verify_image ${project_loc}/Debug/${project_name}.elf» -c «reset run» -c shutdown

Она вплоне видима, есть полоса прокрутки. В Файрфоксе отображается вполне естественно.
0
О теге <cut>, очевидно же.
0
Не понимаю, о чём идёт речь, так как сам блогов не веду.
Объясните, пожалуйста, зачем нужен тег «кат»? Что с ним делать? В каком месте текста его следует установить?
Спасибо
0
Ссылку тыкать пробовал?
0
Сделал как просили. Я понял о чём речь — чтобы текст не занимал слишком много пространства.
0
Статье не хватает тега .
0
Строку параметров советую дополнить словом unlock.
Теперь она будет выглядеть так:
-d2 -f board/stm32vldiscovery.cfg -c init -c targets -c halt -c "stm32f1x unlock 0" -c "reset halt" -c "flash write_image erase <strong>unlock</strong> ${project_loc}/Debug/${project_name}.elf" -c halt -c "verify_image ${project_loc}/Debug/${project_name}.elf" -c "reset run" -c shutdown

Это необходимо для снятия битов защиты с сегментов флэш-памяти. Может помочь, но не всегда.
0
НЕ СОВЕТУЮ ПОВТОРЯТЬ ТО, ЧТО НАПИСАНО В ДАННОЙ СТАТЬЕ!
ВОЗНИКАЛИ ПРОБЛЕМЫ ВПЛОТЬ ДО ПОЛНОЙ БЛОКИРОВКИ ПРОГРАММИРУЕМОЙ МИКРОСХЕМЫ.
СОВЕТУЮ ИСПОЛЬЗОВАТЬ БОЛЕЕ СОВРЕМЕННЫЕ ПЛАТЫ С ПРОГРАММАТОРАМИ ST-LINK V2, которые поддерживает программа System Workbench for STM32 IDE (SWSTM32) в ОС Ubuntu.
Приношу извинения за доставленные неудобства, если таковые имели место!
0
Статью со временем удалю или поменяю тему статьи вместе с названием.
Лучше оставь, с предупреждением.
0
Хорошо, оставлю. Это тоже опыт, хоть и отрицательный.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.