Завершение дочернего процесса OpenOCD: обнаружено неправильное устройство

Настраивать

У меня есть минимальная тестовая плата STM32F103C8T6 (см. STM32F103C8T6 ).

И я использую ссылку ST, как на картинке ниже.

Я установил System Workbench для Eclipse. Я создал свой собственный проект (C++, пустой проект, набор инструментов: Ac6 STM 32 MCU GCC), серия: STM32F1, Mcu: STM32F103C8Tx, ядро: ARM Cortex-M3, пакет: LQFP48, оперативная память: размер 0x5000, ПЗУ памяти: размер 0x10000 .

Код

Код содержит файл system_stm32f10x.c, сгенерированный (или автоматически включенный) средой IDE.

Программа компилируется нормально:


  * @file    main.c
  * @author  Ac6
  * @version V1.0
  * @date    01-December-2013
  * @brief   Default main function.
  ******************************************************************************
*/


#include "stm32f10x.h"
#include <stm32f10x_rcc.h>

void delay(int counter)
{
    volatile int i;
    for (i = 0; i < counter * 10000; i++) {}
}

int main(void)
{
    GPIO_InitTypeDef gpio;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_StructInit(&gpio);
    gpio.GPIO_Pin = GPIO_Pin_13;
    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &gpio);

    GPIO_SetBits(GPIOC, GPIO_Pin_13);

    while (1)
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13); // LED ON
        delay(400);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13); // LED OFF
        delay(400);
    }
}

Загрузить с помощью OpenSTM32

Когда я создаю конфигурацию «Выполнить» (без изменений) и выбираю «Выполнить», я получаю следующую ошибку (в консоли):

Open On-Chip Debugger 0.10.0-dev-00302-gc211ca5-dirty (2017-07-03-10:41)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_assert_srst
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 950 kHz
adapter_nsrst_delay: 100
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748
Info : using stlink api v2
Info : Target voltage: 3.231135
Info : STM32F103C8Tx.cpu: hardware has 6 breakpoints, 4 watchpoints
adapter speed: 950 kHz
Error: timed out while waiting for target halted
TARGET: STM32F103C8Tx.cpu - Not halted
in procedure 'program' 
in procedure 'reset' called at file "embedded:startup.tcl", line 478
in procedure 'ocd_bouncer'

** Unable to reset target **
shutdown command invoked

Соединения

  • STlink SWDIO контакт 2 -> контакт 7 JTAG
  • STlink GND контакт 4 GND -> контакт 4 JTAG
  • STlink SWCLK контакт 6 -> контакт 9 JTAG
  • USB -> USB (STlink 3.3V контакт 8 не подключен, как и все остальные контакты STlink)

Схема

введите описание изображения здесь СТЛинк

Файл конфигурации отладки

# This is an F103C8T6_Simple board with a single STM32F103C8Tx chip
#
# Generated by System Workbench for STM32
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)

source [find interface/stlink.cfg] 

set WORKAREASIZE 0x5000

transport select "hla_swd"

set CHIPNAME STM32F103C8Tx

# Enable debug when in low power modes
set ENABLE_LOW_POWER 1

# Stop Watchdog counters when halt
set STOP_WATCHDOG 1

# STlink Debug clock frequency
set CLOCK_FREQ 4000

# use hardware reset, connect under reset
# connect_assert_srst needed if low power mode application running (WFI...)
reset_config srst_only srst_nogate connect_assert_srst
set CONNECT_UNDER_RESET 1

source [find target/stm32f1x.cfg]

Экран запуска конфигурации

введите описание изображения здесь

Обновлять

Я мог отправить программу через утилиту Link, см. ниже. Я не вижу мигающего света, но, возможно, программа неверна.

Однако этот путь не очень удобен (и я не вижу ни одной запущенной программы). Кроме того, я до сих пор не могу отлаживать этот способ.

введите описание изображения здесь

Загрузка/проверка программы

ЗАДАЧА РЕШЕНА

Смотрите мой ответ (чтобы помочь другим с аналогичной проблемой)

Всем большое спасибо за ответы и многочисленные полезные замечания.

Вам действительно нужно включить схему вашей макетной платы и указать имя или включить текст вашего скрипта адаптера openocd.
@ChrisStratton Я добавил схемы (извините за плохое изображение, у меня здесь не очень хорошее освещение).
Загрузите инструмент ST-Link Utility и убедитесь, что ваш ST-Link вообще работает.
Похоже, что ваше оборудование не использует линию RST, поэтому вам потребуется «reset_config none».
@Turbo Я еще не знаю, что reset_config не означает, но сегодня вечером я прочитаю больше обо всех проблемах сброса / обработке
@Bence Kaulics ... это сработало, я даже могу загрузить (см. Скриншоты в конце), но я не вижу мигания светодиода.
@BenceKaulics ... мне удалось заставить светодиод мигать ... спасибо за вашу идею.
@TurboJ Спасибо за хороший комментарий, я изменил его на программный сброс (или что-то в этом роде, и это работает).

Ответы (4)

Сделанные соединения: STlink SWDIO контакт 2 -> контакт 7 JTAG STlink GND контакт 4 GND -> контакт 4 JTAG STlink SWCLK контакт 6 -> контакт 9 JTAG STlink 3.3V контакт 8 -> контакт 2 JTAG

Сброс не происходит таинственным образом. На самом деле это прямое подключение к контакту сброса MCU от jtag/swd, которого нет в вашей конфигурации.

редактировать: Это было неправильно. См. комментарий Криса.

* обновлять *

Сброс эмуляции требует правильных параметров конфигурации openocd, которые в настоящее время установлены для аппаратного сброса. «srst» — это сброс системы, а не эмуляция. Также внимательно прочитайте руководство на github: автор делает сброс вручную, нажимая кнопку сброса перед выдачей команды сброса и отпуская в течение периода ожидания сброса openocd.

Также удаление параметра «сброс при подключении» из файла конфигурации может облегчить такой ручной сброс.

Так что решение - либо ручной сброс, либо коррекция параметров для эмуляции (если она есть на вашем чипе; текст выше пришлось вычеркнуть из-за концептуальной ошибки, не знаю, есть ли она у вашего чипа) или адаптация вашего stlink'а сброс сигнала в плату.

Не обязательно. STM32 также поддерживает сброс команды. Практически единственный раз, когда вам нужен аппаратный сброс, это если загружена программа, которая отключает (переназначает) контакты SWD.
Я получил информацию с github.com/rogerclarkmelbourne/Arduino_STM32/wiki/… ... где я также подключил 3,3 В от ST Link к JTAG (контакт 1), потому что я не использую USB.
Вероятно, вам не следует пытаться запитать целевую плату от адаптера SWD. Похоже, что он предназначен для питания USB 5v, и резервное питание неизвестного внутреннего регулятора - сомнительная вещь.
@ChrisStratton: Я сейчас поставил его через USB-кабель, но все равно не работает (переключаю вопрос).
@MichelKeijzers, смотрите обновление.
@Ayhan, какое руководство по GitHub вы имеете в виду (читать)? В ссылке, которую я использовал, я пропустил некоторые части, связанные с терминалом (поскольку я не использую Linux). Также я думаю, что мне не хватает некоторых параметров конфигурации GDB.
@MichelKeijzers, это ссылка выше в вашем комментарии (вики). Найдите слово «reset» в документе. Я не понял, почему линия сброса не используется.
@Ayhan ... да, конечно (о ссылке на вики), извините за мой глупый вопрос. Я проверю это сегодня вечером (не зная, что может быть столько проблем с простым сбросом ... слишком много привык к Arduino).
@Ayhan Я пытался продолжить руководство по github, однако оно предназначено для Unix, поэтому часть сброса не может быть выполнена.
@Ayhan Я мог бы загрузить через STLink, но все же я не знаю, работает ли моя программа (по крайней мере, она не мигает светодиодом)
@MichelKeijzers Я предполагаю, что вы либо перезагрузили, либо выключили / включили плату после программирования. С программированием вроде все в порядке. А вот по поводу программы, может быть что-то не так и может с ней все ок но неправильный порт светодиода. Итак, теперь отладка обязательна, и вы не решили проблему сброса. Это болезненно. Я советую вам использовать интегрированные в stlink платы, такие как обнаружение stm32f3/4 и лучшие учебные пособия. Например, это кажется хорошим, но устаревшим: embeddedprogrammer.blogspot.com.tr/2012/09/…
@Ayhan .. Я сбросил его, но теперь он даже не нужен, я пробую некоторые «вариации» мигания, и он работает мгновенно. Также очень приятно иметь возможность отлаживать (невозможно на Arduino). Может быть, я должен был начать с открытия, однако, похоже, что это работает сейчас. Мне очень жаль, что мне пришлось задавать все эти (для большинства) тривиальные вопросы, и надеюсь, что теперь я смогу продолжить сам (или у меня будет больше «реальных» вопросов). Большое спасибо за Вашу помощь
@Ayhan И спасибо за ссылку ... Я скоро проверю.
@MichelKeijzers, я очень ценю, что вы сделали джейлбрейк Arduino :-) Вам не о чем извиняться, все это были правильные и правильные вопросы. Я рад, что вы решили проблемы, продолжайте в том же духе.
@Ayhan ... спасибо ... Я нашел книгу, так что теперь я надеюсь, что смогу найти больше в книгах по программированию, но с установкой / инструментами и т. Д. Мне действительно нужна была помощь. Еще раз спасибо.

Проблема решена.

Это можно исправить, перейдя на вкладку «Конфигурации запуска», вкладку «Отладчик», вкладку «Отладчик», «Настройка режима», «Режим сброса: изменить на сброс системы программного обеспечения».

Основная проблема заключается в том, что мой STLink имеет версию 2, а не версию 2.1, и у него нет аппаратного сброса.

Нет, у вашей палки есть выход аппаратного сброса на контакте 1, вы просто не подключили его к цели, и в этом нет необходимости, если вы используете программный сброс.
@ChrisStratton В чем преимущество аппаратного сброса? Так как это, кажется, работает нормально.
Программный сброс не будет работать, если контакты SWD отключены. В дополнение к программному обеспечению, которое делает это преднамеренно, эти чипы, похоже, иногда попадают туда в результате неудачной загрузки прошивки. Утверждение сброса в сочетании с установлением соединения SWD может помочь отключить его до того, как оно вступит в силу, оставив отладчику контроль.
@ChrisStratton Я не понимаю всего, что ты написал. Подключил контакты SWD (афик). Я заметил, что иногда IDE больше не видит STM32, я просто отключаю питание USB и перезапускаю его, и он работает ... Или я сам нажимаю кнопку RST ... это будет достаточно хорошо для меня.

Похоже, что ваш конфигурационный файл OpenOCD имеет неверный номер ProductID. Этот номер относится к используемому вами адаптеру клонирования ST-LINK, а не к вашему конкретному микроконтроллеру.

Посмотрите это в консоли OpenOCD:

Информация: STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748

Информация: vid/pid не идентичны: 0x0483/ 0x374B 0x0483/0x3748

Обратите внимание на разницу, которую я выделил. Иногда трудно отличить восьмерку от четверки!

Поскольку клоны ST-LINK должны работать одинаково, сомневаюсь, что это ваша проблема. Но я оставлю информацию здесь, если это кому-то поможет.

Здесь PID соответствует SWD-адаптеру stlink (клону), а не целевому MCU. Существует несколько разных PID, в основном они работают одинаково.
Я не могу найти ни один из этих номеров, кроме как в файле журнала.
@ChrisStratton, спасибо; конечно вы правы. Я оставлю свой ответ (после того, как я его настрою), если он кому-то поможет...
@MichelKeijzers Вы можете найти расположение файла конфигурации OCD, посмотрев на вкладку «Отладчик» на экране «Выполнить конфигурации» в Eclipse. Существует «опция конфигурации», которая выглядит как -f filename.cfg. Скорее всего, он заканчивается на .cfg, но может быть и другим. Кроме того, попробуйте использовать конфигурацию отладки вместо конфигурации запуска.
Команда сброса не всегда работает. Я не могу понять, когда, но иногда я не могу программировать и отлаживать без него и без отключения контактов.
@bitsmack ... Кажется, я нашел его, не смог найти -f, но нашел файл конфигурации. Я добавил это в вопросе.
@bitsmack ... Я думаю, что у меня нет параметров -f, так как у меня нет параметров GDB в моих конфигурациях запуска.
@MichelKeijzers Вы добавили скриншот вкладки «Главная» окна «Конфигурации запуска». Можете ли вы также добавить скриншот вкладки «Отладчик»?
@bitsmack ой... Я обновил его.
@bitsmack Я нашел -f в github, но не могу выполнить эту команду, так как она написана для Linux, а у меня Windows.

Для работы с ARM-чипами на Eclipse я сам использую https://gnu-mcu-eclipse.github.io/ .

Конфигурация для STM32F103C8T6 с использованием флешки ST-Link с использованием этого плагина eclipse будет

-f interface/stlink-v2.cfg -f target/stm32f1x.cfg

PID 0x374B предназначен для ST-Link V2.1. Китайские флешки ST-Link V2. Значит, вы выбрали не тот интерфейс отладчика. Поскольку вы используете другой подключаемый модуль eclipse, я не знаю, где и как его настроить, но взгляните на выбранный интерфейс отладчика.

Спасибо... Я не смог найти -f, но я изменил параметр программного сброса, теперь он выглядит так: # использовать программный системный сброс reset_config none
Еще одна вещь, я вижу, что на вашем ST-Link установлена ​​прошивка V17. Я бы порекомендовал обновить прошивку ( st.com/en/embedded-software/stsw-link007.html ) (обновление отлично работает на клонах, у меня их с десяток и никогда проблем не было)
Хороший вопрос, и действительно, утилита ST Link уже упоминала об этом ... Теперь у меня есть v27: Информация: STLINK v2 JTAG v27 API v2 SWIM v6 VID 0x0483 PID 0x3748