Я использую плату 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
Но мне до сих пор не удалось подключиться к Blue Pill с помощью программаторов 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, показанные выше, и ни один из них. Ни одна из комбинаций не работает.
Файл interface / 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 из командной строки.
Я не понимаю, что делаю неправильно, и теперь полностью застрял. Если меня кто-то подскажет, я буду очень благодарен. Извините, это такой длинный пост.