Я использую плату Blue Pill (STM32F103CB с 128 КБ флэш-памяти в соответствии с st-info --probe) через клон ST-Link / V2, такой как , этот .Я также протестировал использование оригинальной ST-Link / V2, такой как , этой .Я получаю одинаковый результат, описанный ниже, с обоими программистами.
Моя система - Linux (Debian LXDE), и я установил OpenOCD из выпусков Ливиу Ионеску здесь .
Моя установка OpenOCD работает.Как и Blue Pill, у меня есть плата ST-Nucleo-F103RB, и я могу подключиться к ней с помощью OpenOCD.Команда
openocd -f board/st_nucleo_f103rb.cfg
с использованием стандартного файла .cfg, поставляемого с OpenOCD, дает
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v29 API v2 SWIM v18 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.271135
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Но мне все еще не удалось подключиться к моей Синей таблетке с помощью ST-Link /Программисты V2.Я прочитал все, что могу найти, включая соответствующие разделы https://elinux.org/Category:OpenOCD и столько, сколько я могу лично переварить из http://openocd.org/doc/.. Вот куда я попал.
Файл .cfg stm32f103c8_blue_pill.cfg не работает для меня.Он производит вывод, описанный ниже.
На основании прочитанного я подготовил свой собственный файл .cfg по адресу ../board/stm32f103.cfg.Там написано:
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
#source [find board/stm32f103c8_blue_pill.cfg]
#reset_config srst_only
#reset_config none separate
Источники, которые я читал, предполагают, что это должно работать, но это не так.Используя мой .cfg, описанный выше, я могу использовать либо target / stm32f1x.cfg, либо board / stm32f103c7_blue_pill.cfg, и я по-прежнему получаю такой же вывод, как описано ниже.(В случае обоих этих файлов .cfg я использую стандартные файлы, поставляемые с OpenOCD.) Я протестировал оба варианта reset_config, показанных выше, и ни с одним из них.Ни одна из комбинаций не работает.
Файл интерфейса / stlink.cfg, который я использую, изменен.Я изменил его, указав правильный device_desc "ST-LINK / V2" и правильный vid_pid 0x0483 0x3748.(Оба подтвердили использование lsusb.) Итак, игнорируя закомментированные строки, stlink.cfg читает
interface hla
hla_layout stlink
hla_device_desc "ST-LINK/V2"
hla_vid_pid 0x0483 0x3748
Я экспериментировал с включением hla_serial программиста.Интересно, что lsusb не может найти полный серийный номер.st-info --probe находит серийный номер, но немного отличается от номера прошивки приложения STLinkUpgrade.Я пытался использовать оба серийных номера.Без разницы.
Вот команда, которую я даю OpenOCD:
openocd -s ~/stm32/openocd/scripts -f board/stm32f103.cfg
Обратите внимание, что я должен задать путь, используя -s для этой команды.С платой ST-Nucleo-F103RB мне не нужно этого делать.Однако, с файлом stm32f103.cfg, если я не установил путь, я получаю:
Error: Can't find board/stm32f103.cfg
in procedure 'script'
Если я использую полную команду, показанную выше, с -s, чтобы установить путь, я получаю:
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
/[..]stm32/openocd/scripts/target/stm32f1x.cfg:47: Error: invalid command name "dap"
in procedure 'script'
at file "embedded:startup.tcl", line 60
at file "/[..]stm32/openocd/scripts/board/stm32f103.cfg", line 18
at file "/[..]stm32/openocd/scripts/target/stm32f1x.cfg", line 47
Вот неправильная строка 47 в stm32f1x.cfg:
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
Я искал элементы в Stackoverflow / похожие по Ошибка: недопустимое имя команды "dap" .Используя документацию OpenOCD, я понимаю, что команда dap create существует, и примерно то, что она делает.Самая похожая ошибка, о которой я обнаружил, документирована в https://elinux.org/OpenOCD_Troubleshooting:_Invalid_Command_Name_JTAG,, и предложенное решение, похоже, неприменимо, потому что я не вызываю interface / stlink.cfg из командной строки.
Я не вижу, что я делаю неправильно, и теперь я полностью застрял.Если бы кто-то мог дать мне управление, я был бы очень благодарен.Извините, это такой длинный пост.