Программирование флэш-памяти микроконтроллеров 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
Команды, которые вы передаете 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/
Вопрос — что именно делают правила udev и зачем именно они нужны? У меня удалось пользоваться stlink, когда я выполнил от рута описанное тут — fabooh.com/2014/03/16/how-to-deal-with-a-problematic-stm32-st-linkv1-device-and-ubuntu/
- diewindowsdie
- 05 декабря 2016, 14:11
- ↓
Есть статья в Википедии, посвящённая udev: https://ru.wikipedia.org/wiki/Udev
В этих файлах прописаны правила доступа к устройствам, в том числе привилегии доступа к файлам устройств.
udev — менеджер устройств для новых версий ядра Linux, являющийся преемником devfs, hotplug и HAL. Его основная задача — обслуживание файлов устройств (англ. device nodes) в каталоге /dev и обработка всех действий, выполняемых в пространстве пользователя при добавлении/отключении внешних устройств, включая загрузку firmwareКрайне желательно, чтобы были файлы /etc/udev/rules.d/*.rules
В этих файлах прописаны правила доступа к устройствам, в том числе привилегии доступа к файлам устройств.
Об этом нельзя не упомянуть.
Провёл эксперимент на другой ЭВМ. Сделал так, как описано выше. Но по неизвестной мне причине самопроизвольно была установлена защита от записи определённых областей флэш-памяти микроконтроллера, что не позволяло загружать программу во флэш-память микроконтроллера. Пришлось загрузить Windows и с помощью ST-LINK Utility снять биты защиты, после чего стало возможным использовать снова OpenOCD для программирования флэш-памяти. Поэтому будьте осторожны!
Удачи!
Провёл эксперимент на другой ЭВМ. Сделал так, как описано выше. Но по неизвестной мне причине самопроизвольно была установлена защита от записи определённых областей флэш-памяти микроконтроллера, что не позволяло загружать программу во флэш-память микроконтроллера. Пришлось загрузить Windows и с помощью ST-LINK Utility снять биты защиты, после чего стало возможным использовать снова OpenOCD для программирования флэш-памяти. Поэтому будьте осторожны!
Удачи!
О каком кате речь?
Речь идёт об этой строке, наверное?
-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
Она вплоне видима, есть полоса прокрутки. В Файрфоксе отображается вполне естественно.
Речь идёт об этой строке, наверное?
-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
Она вплоне видима, есть полоса прокрутки. В Файрфоксе отображается вполне естественно.
Строку параметров советую дополнить словом 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
Это необходимо для снятия битов защиты с сегментов флэш-памяти. Может помочь, но не всегда.
НЕ СОВЕТУЮ ПОВТОРЯТЬ ТО, ЧТО НАПИСАНО В ДАННОЙ СТАТЬЕ!
ВОЗНИКАЛИ ПРОБЛЕМЫ ВПЛОТЬ ДО ПОЛНОЙ БЛОКИРОВКИ ПРОГРАММИРУЕМОЙ МИКРОСХЕМЫ.
СОВЕТУЮ ИСПОЛЬЗОВАТЬ БОЛЕЕ СОВРЕМЕННЫЕ ПЛАТЫ С ПРОГРАММАТОРАМИ ST-LINK V2, которые поддерживает программа System Workbench for STM32 IDE (SWSTM32) в ОС Ubuntu.
Приношу извинения за доставленные неудобства, если таковые имели место!
ВОЗНИКАЛИ ПРОБЛЕМЫ ВПЛОТЬ ДО ПОЛНОЙ БЛОКИРОВКИ ПРОГРАММИРУЕМОЙ МИКРОСХЕМЫ.
СОВЕТУЮ ИСПОЛЬЗОВАТЬ БОЛЕЕ СОВРЕМЕННЫЕ ПЛАТЫ С ПРОГРАММАТОРАМИ ST-LINK V2, которые поддерживает программа System Workbench for STM32 IDE (SWSTM32) в ОС Ubuntu.
Приношу извинения за доставленные неудобства, если таковые имели место!
Комментарии (16)
RSS свернуть / развернуть