Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Сб мар 26, 2022 23:37:39

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

Купил себе на пробу 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/587 ... -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 Вс мар 27, 2022 00:01:18, всего редактировалось 1 раз.

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

Сб мар 26, 2022 23:48:59

Проверьте состояние Reset на микроконтроллере
P.S.
Предложение перевести отладчик в режим DFU - это не ошибка, а стандартная поведение, для перехода в режим загрузчика

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

Вс мар 27, 2022 00:02:37

Проверьте состояние Reset на микроконтроллере


Что для этого надо сделать, что имеете в виду?

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

Вс мар 27, 2022 00:21:21

Может, он постоянно куда-то подтянут/замкнут и st-link не может им оперировать. Это предположение, но подобное мне уже встречалось.

Добавлено after 5 minutes 25 seconds:
хотя, тут же swd же не требует reset... :dont_know:

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

Вс мар 27, 2022 00:21:37

Может, он постоянно куда-то подтянут/замкнут и st-link не может им оперировать. Это предположение, но подобное мне уже встречалось.


Вы имеете в виду кнопку Reset, которая может быть постоянно нажатой в результате какого-то дефекта, или что-то другое?

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

Вс мар 27, 2022 00:22:52

Да. Или нажата, или питание идёт на него напрямую без подтяжки... в общем, подключить питание, понажимать на кнопку, посмтореть, что при этом происходит на reset

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

Вс мар 27, 2022 00:33:15

Да. Или нажата, или питание идёт на него напрямую без подтяжки... в общем, подключить питание, понажимать на кнопку, посмтореть, что при этом происходит на reset


Кнопка Reset рабочая. Если SWD-интерфейс разместить справа, то на нижних двух контактах кнопки будет земля. При нажатии на кнопку Reset, земля появляется на двух верхних контактах кнопки.

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

Вс мар 27, 2022 00:36:40

А если просто откомпилировать и залить, не из IDE, удаётся?
То есть, убедиться, что микроконтроллер живой.
И тогда грешить на OpenOCD, наверное.

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

Пн мар 28, 2022 10:10:16

А если просто откомпилировать и залить, не из IDE, удаётся?


Если бы я знал как, то проверил бы. Cлишком много информации для новичка.

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

Пн мар 28, 2022 14:09:39

https://www.st.com/en/development-tools ... eprog.html
даже хотя бы просто считать, то что в нём есть, стереть, записать пустышку... уже будет больше уверенности в работоспособности.

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

Вт мар 29, 2022 02:19:11

https://www.st.com/en/development-tools/stm32cubeprog.html
Даже хотя бы просто считать, то что в нём есть, стереть, записать пустышку... уже будет больше уверенности в работоспособности.

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

Поэтому я попробовал прошить консольной утилитой. Вначале выяснилось, что st-flash v.1.5.1 не может шить такой контроллер.

https://github.com/stlink-org/stlink/issues/833

Пришлось обновиться до 1.6.1, и в этой версии прошивание, похоже что заработало. A программа, которая шьется, - нет.

Заливаю так:

Код:
$ st-flash write second_led_blink.bin 0x8000000
st-flash 1.6.1
2022-03-29T01:52:14 INFO common.c: F1xx Medium-density: 20 KiB SRAM, 64 KiB flash in at least 1 KiB pages.
file second_led_blink.bin md5 checksum: 4fde16efc5dbad7bba6aec467d8370, stlink checksum: 0x0006997c
2022-03-29T01:52:14 INFO common.c: Attempting to write 4732 (0x127c) bytes to stm32 address: 134217728 (0x8000000)
2022-03-29T01:52:14 INFO common.c: Flash page at addr: 0x08000000 erased
2022-03-29T01:52:14 INFO common.c: Flash page at addr: 0x08000400 erased
2022-03-29T01:52:14 INFO common.c: Flash page at addr: 0x08000800 erased
2022-03-29T01:52:14 INFO common.c: Flash page at addr: 0x08000c00 erased
2022-03-29T01:52:14 INFO common.c: Flash page at addr: 0x08001000 erased
2022-03-29T01:52:14 INFO common.c: Finished erasing 5 pages of 1024 (0x400) bytes
2022-03-29T01:52:14 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2022-03-29T01:52:14 INFO flash_loader.c: Successfully loaded flash loader in sram
  5/5 pages written
2022-03-29T01:52:14 INFO common.c: Starting verification of write complete
2022-03-29T01:52:14 INFO common.c: Flash written and verified! jolly good!

Потом смотрю через графическую утилиту stlink содержимое памяти. Оно совпадает с тем, что в файле second_led_blink.bin. То есть, прошивание сработало.

Одна проблема: светодиод не мигает. Нажимаю кнопку Reset на плате, толку никакого.

Попробовал прошивать с опцией --reset, но тогда прошивание завершается ошибкой:

Код:
$ st-flash --reset write second_led_blink.bin 0x8000000
st-flash 1.6.1
2022-03-29T01:51:47 INFO common.c: F1xx Medium-density: 20 KiB SRAM, 64 KiB flash in at least 1 KiB pages.
file second_led_blink.bin md5 checksum: 4fde16efc5dbad7bba6aec467d8370, stlink checksum: 0x0006997c
2022-03-29T01:51:47 INFO common.c: Attempting to write 4732 (0x127c) bytes to stm32 address: 134217728 (0x8000000)
2022-03-29T01:51:47 INFO common.c: Flash page at addr: 0x08000000 erased
2022-03-29T01:51:47 INFO common.c: Flash page at addr: 0x08000400 erased
2022-03-29T01:51:47 INFO common.c: Flash page at addr: 0x08000800 erased
2022-03-29T01:51:47 INFO common.c: Flash page at addr: 0x08000c00 erased
2022-03-29T01:51:47 INFO common.c: Flash page at addr: 0x08001000 erased
2022-03-29T01:51:47 INFO common.c: Finished erasing 5 pages of 1024 (0x400) bytes
2022-03-29T01:51:47 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2022-03-29T01:51:47 INFO flash_loader.c: Successfully loaded flash loader in sram
2022-03-29T01:51:47 ERROR flash_loader.c: flash loader run error
2022-03-29T01:51:47 ERROR common.c: stlink_flash_loader_run(0x8000000) failed! == -1
stlink_fwrite_flash() == -1

Что где еще надо докручивать, чтобы светодиод замигал?

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

Вт мар 29, 2022 10:37:58

Если СТ-Линк китайский, то там есть проблемы с ногой СБРОС. Все пишут, что можно и так, но лично у нас ни у кого не получилось прошивать без этой ноги. Это во-первых, во-вторых если поднимаете частоту повыше, то нужно устанавливать задержку на флеше. Лучше на первых парах работайте на стандартных 8 МГц.

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

Вт мар 29, 2022 11:40:49

Если СТ-Линк китайский, то там есть проблемы с ногой СБРОС. Все пишут, что можно и так, но лично у нас ни у кого не получилось прошивать без этой ноги.

И что нужно делать, чтобы прошивать "с этой ногой"?

Это во-первых, во-вторых если поднимаете частоту повыше, то нужно устанавливать задержку на флеше. Лучше на первых парах работайте на стандартных 8 МГц.

Но я брал эту STM потому что для моей задачи не хватает скорости AVR с ее 16MHz. Мне нужно 72MHz, и то это нижний предел, и возможно что придется на Ассемблере писать, чего очень бы не хотелось.

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

Вт мар 29, 2022 11:55:47

xintrea, ну попробуй ты уже прошить "блинк" без калокуба!
Еще лучше — возьми на просторах интернета готовый "блинк" даже без CMSIS, да попробуй, что получится. Там прошивка меньше 100 байт выходит (а то и 20Б, не помню точно).

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

Вт мар 29, 2022 12:05:57

Так вродеж получилось прошить без?
Что касается неродных ST-Link, то под Windows работает без всяких проблем... но я тоже не использую куб.

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

Вт мар 29, 2022 12:46:40

xintrea писал(а):И что нужно делать, чтобы прошивать "с этой ногой"?

Допаять программатор.

xintrea писал(а):Мне нужно 72MHz

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

Martian писал(а):Что касается неродных ST-Link, то под Windows работает без всяких проблем

Вот все пишут, что работает, а у нас не работает без ресета и всё тут. Хоть под виндой, хоть под линью. Видимо, что-то делаем не так.

Добавлено after 6 minutes 17 seconds:
Кстати да, у вас программатор определяется в том числе как флешка? Какое у неё имя?

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

Вт мар 29, 2022 12:54:54

>TEHb<, необязательно что-то не так... скорее всего, множество вариантов клонов. Я брал достаточно давно, как только они появились, и даже тогда, насколько помню, их клепали на двух вариантах мк - один как в оригинале, а другой - нет. В результате чего были тоже жалобы.
Может, имеет смысл вскрыть и сравнить схему с оригиналом? Там она не такая уж и здоровая.

Добавлено after 4 minutes 23 seconds:
нет, у меня китайский клон как флэшка не определяется.
ST-Link на оригинальной отладке определяется без имени, внутри три ссылки на сайты ST

Добавлено after 2 minutes 22 seconds:
Кстати, у меня китайский клон успешно перетерпел трансформацию в J-link для Segger и обратно.

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

Вт мар 29, 2022 13:03:21

Martian писал(а):ST-Link на оригинальной отладке определяется без имени

У меня определяется именем подключенного процессора и с правильным объёмом. Показать или это и так известная штука?

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

Вт мар 29, 2022 13:08:10

Не, не слышал. Но я как-то не интересовался таким. Но любопытно. Наверное, это что-то из более современных? у меня древняя Дискавери для STM32F100

Добавлено after 1 minute 41 second:
а что внутри такой флэшки?

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

Вт мар 29, 2022 17:56:18

Вот так определяется NUCLEO-F410RB. Если к её встроенному программатору подключить другой процессор, то объём меняется, а название нет, тут я попутал что-то. Для прошивки достаточно просто скинуть в него бинарник. Он впитает файл и переоткроется с тем же содержимым, что и на картинке.
Изображение
Ответить