Перейти к содержанию
    

Не могу помигать диодом на STM32F103C8Tx из STM32CubeIDE

Привет, народ.

 

Купил себе на пробу STM32F103C8T6 (BluePill) с программатором STLink-V2. Вот что о нем рассказывает st-info --probe:

Found 1 stlink programmers
 serial: 132014026315303030303032
openocd: "\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32"
  flash: 65536 (pagesize: 1024)
   sram: 20480
 chipid: 0x0410
  descr: F1 Medium-density device


Установил среду STM32CubeIDE Version: 1.8.0 Build: 11526_20211125_0815 (UTC).

 

И попытался собрать и запустить программку мигания светодиодом. Сделал новый проект для STM32F103C8Tx, настройки брал из вот этого видео: https://www.youtube.com/watch?v=e_NSqz5P8Qk

 

По-сути сгенерировался дефолный проект для STM32F103C8Tx, частота настроена на 72MHz, активирован пин PC13 на режим Output. В коде в бесконечный цикл вписаны команды:

  while (1)
  {
      HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
      HAL_Delay(500);
  }


По ходу попыток запуска, вначале STM32CubeIDE сказал, что прошивка устарела, и надо обновить. Я согласился, но пришлось пару раз вставить-вытащиить программатор в USB, так как была ошибка:

st-link is not in the DFU mode. Please restart it.


Прошивка залилась, а в сети нашел инфу что если обновление прошивки предваряется такой ошибкой, то это нормально.

 

Потом пришлось подредактировать файл stm32f1x.cfg, так как при запуске была ошибка:

linux gdb ST-LINK: Could not verify ST device! Abort connection.


Эту ошибку убрал по инструкции: https://stackoverflow.com/questions/58783393/atollic-couldnt-verify-st-device, заодно отладку переключил с STLink GDB Server на STLink OpenOCD (сам GDB, естественно, установлен и работает, обычный C/C++ код через него отлаживается).

 

В результате, после устранения предыдущей ошибки, стали появляться другие ошибки:

Error: STM32F103C8Tx.cpu -- clearing lockup after double fault
Polling target STM32F103C8Tx.cpu failed, trying to reexamine


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

 

Тогда я решил снова сделать новый проект, все повторил заново, и на этот раз почти получилось. Во всяком случае, явных ошибок в логе запуска нет. Но светодиод не мигает, отладка не работает:

Open On-Chip Debugger 0.11.0+dev-00438-ga75fc63 (2021-11-03-15:26)
Licensed under GNU GPL v2
For bug reports, read
   http://openocd.org/doc/doxygen/bugs.html
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : STLINK V2J39S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 2.427853
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
Info : clock speed 4000 kHz
Info : stlink_dap_op_connect(connect)
Info : SWD DPIDR 0x2ba01477
Info : STM32F103C8Tx.cpu: Cortex-M3 r2p1 processor detected
Info : STM32F103C8Tx.cpu: target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for STM32F103C8Tx.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
Info : device id = 0x20036410
Info : flash size = 64kbytes
undefined debug reason 8 - target needs reset
O.K.
	O.K.:0xE00FFFD0
	undefined debug reason 8 - target needs reset
shutdown command invoked
Info : dropped 'gdb' connection


Я пробовал собрать и запуститься в режиме релиза (переткнул и конфигурацию и билд на Release), но почему-то при запуске RUN все равно IDE пытается запустить дебаггер, ей это не удается, лог запуска все тот же.

 

Дальше я уже не знаю что делать. Прошу посоветовать что где еще надо докрутить, чтобы помигать светодиодом.

 

* * *

 

UPD: Иногда запуск почему-то происходит по-другому, хотя ничего ни в коде ни в конфигурации не меняю. Запуск сопровождается появлением окна с ошибкой:

Could not verify STM device!

Хотя, как написано выше, такая ошибка была, и верификация устройства отключена (в начало файла stm32f1x.cfg добавлена строка set CPUTAPID 0).
Выхлоп запуска при этом немного другой, строки с Info те же самые, но в конце такие ошибки:

undefined debug reason 8 - target needs reset
O.K.
	O.K.:0xE00FFFD0
	Error: Failed to read memory at 0xfffffffe
Error: Failed to read memory at 0xfffffffe
undefined debug reason 8 - target needs reset
shutdown command invoked
Info : dropped 'gdb' connection


Вот как выглядит скриншот: https://ibb.co/JvyD2HK

 

Изменено пользователем xintrea

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


source [find interface/stlink.cfg]

transport select hla_swd
#ALI chip fake
set CPUTAPID 0x2ba01477

source [find target/stm32f1x.cfg]

reset_config connect_assert_srst

Попробуйте такой конфиг. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, VladimirG said:

Попробуйте такой конфиг. 

Не пойму, что нужно сделать.

Нужно найти файл interface/stlink.cfg и в нем обеспечить наличие строк

transport select hla_swd
#ALI chip fake
set CPUTAPID 0x2ba01477

И нужно найти файл target/stm32f1x.cfg, и обеспечить в нем наличие строки:

reset_config connect_assert_srst

Так?

 

Или весь ваш код - это законченный конфиг? Но тогда в каком конфиг-файле этот текст должен находиться?

 

Или это нужно понатыкать в интерфейсе проекта в STM32CubeIDE?

Изменено пользователем xintrea

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 minutes ago, VladimirG said:

Попробуйте такой конфиг. 

Поковырялся, и нашел файл конфига проекта, прямо в корне проекта, который называется <имя_проекта>.cfg.

Видимо, вы его имели в виду. Сейчас конфиг выглядит так (еще не редактировал):
 

source [find interface/stlink-dap.cfg]

set WORKAREASIZE 0x5000

transport select "dapdirect_swd"

set CHIPNAME STM32F103C8Tx
set BOARDNAME genericBoard

# 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 8000

# Reset configuration
# use software system reset if reset done
reset_config none
set CONNECT_UNDER_RESET 0
set CORE_RESET 0

# ACCESS PORT NUMBER
set AP_NUM 0
# GDB PORT
set GDB_PORT 3333

# BCTM CPU variables

source [find target/stm32f1x.cfg]

Вопрос: его полностью надо заменить, или редактировать отдельные строки?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, xintrea said:

Вопрос: его полностью надо заменить, или редактировать отдельные строки?

 

Попробуйте полностью. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/27/2022 at 10:11 AM, VladimirG said:

Попробуйте полностью. 

Происходит следующее:

1. Я меняю конфиг, сохраняю изменения в файле.

2. Запускаю Build All

3. Запускаю Run

4. Вначале отрабатывает какая-то сборка, вижу надпись finish building, затем происходит попытка запуска. В этот момент конфиг-файл прямо на экране меняется на дефолтное значение, которое я показал выше, только сверху прилепляется заголовок:

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

Я залез в настройки Debug Configuration, и переставил галку в Configuration Script с Automated Generation на User Defined. Снова прописал вашу конфигурацию, пересобрал, запустил. В результате вылазит ошибка:

Error in final launch sequence:

Failed to execute MI command:
target extended-remote localhost:3333

Error message from debugger back end:
localhost:3333: Время ожидания соединения истекло.
Failed to execute MI command:
target extended-remote localhost:3333

Error message from debugger back end:
localhost:3333: Время ожидания соединения истекло.
localhost:3333: Время ожидания соединения истекло.

Скриншот с этой ошибкой прикреплен.

 

Если же переставить отладчик с STLink (OpenOCD) на STLink GDB Server, то запуск завершается такой ошибкой:

 

Error in final launch sequence:

Failed to start GDB server
Failed to start GDB server
Error in initializing ST-LINK device.
Reason: (18) Could not verify ST device! Abort connection.

 

Куда дальше ковырять?


 

 

Снимок экрана от 2022-03-28 14-07-11.png

Изменено пользователем xintrea

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ох... Сколько возни во благо галки "опенсорс". Поставьте Keil или IAR (если дома, например), там сразу будете программировать, а не ерундой заниматься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильней разобраться. Почему-то у меня без всяких "кайло" и "кубов" получается… ТС выбрал в корне неверную стратегию. Нельзя так делать. Сначала надо документацию почитать, написать Makefile, сделать под себя стартап и ld-скрипт, скачать CMSIS под свою серию. И спокойно, без всяких гнилых псевдобиблиотек или убогих недо-IDE написать код.

Если же нужна IDE, так их куча же более вменяемых! Хоть тот же qt-creator!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, Arlleex said:

Ох... Сколько возни во благо галки "опенсорс". Поставьте Keil или IAR (если дома, например), там сразу будете программировать, а не ерундой заниматься.

Не понял, у меня везде Linux стоит. Это хорошо или плохо? В нем стоит проприетарная среда от производителя STM32CubeIDE. Это хорошо или плохо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие-то странные у вас критерии хорошо/плохо. За 10 минут создать проект, прошить и посмотреть как работает - хорошо. Несколько дней трахаться с софтом не понимая как оно должно и почему не работает - плохо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А через STM32CubeProgrammer пробовали залить elf? 

Обычно всё работает сразу без проблем, с левыми чипами только нужно в конфиг 1 строчку добавлять. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как оказалось, у ТС не STM32, а GD32. Он залил свежим st-link'ом, но, похоже, то ли в калокубе дело, то ли этот GD32 бракованный, то ли еще что — но не мигает… Я ему предложил попробовать без всяких библиотек (даже CMSIS) для начала "блинк" сделать. И проверить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, VladimirG said:

А через STM32CubeProgrammer пробовали залить elf? 

Обычно всё работает сразу без проблем, с левыми чипами только нужно в конфиг 1 строчку добавлять. 

В какой конфиг (желательно, путь к файлу) и какую строчку добавлять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Eddy_Em сказал:

Я ему предложил попробовать без всяких библиотек (даже CMSIS) для начала "блинк" сделать. И проверить.

Для банальной проверки лапы МК даже CMSIS-ов не нужно - достаточно зайти под отладчиком в регистры RCC/GPIO и жмакать мышой по нужному светодиоду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 minutes ago, Arlleex said:

достаточно зайти под отладчиком

Чтобы это сделать, для начала нужно научиться прицеплять gdb к микроконтроллеру! Я, например, это не умею. И не собираюсь учиться. Мне и без SWD-отладки отлично живется!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...