Купил себе на пробу 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.
Я пробовал собрать и запуститься в режиме релиза (переткнул и конфигурацию и билд на Release), но почему-то при запуске RUN все равно IDE пытается запустить дебаггер, ей это не удается, лог запуска все тот же.
Дальше я уже не знаю что делать. Прошу посоветовать что где еще надо докрутить, чтобы помигать светодиодом.
* * *
UPD: Иногда запуск почему-то происходит по-другому, хотя ничего ни в коде ни в конфигурации не меняю. Запуск сопровождается появлением окна с ошибкой:
Код:
Could not verify STM device!
Хотя, как написано выше, такая ошибка была, и верификация устройства отключена (в начало файла stm32f1x.cfg добавлена строка set CPUTAPID 0). Выхлоп запуска при этом немного другой, строки с Info те же самые, но в конце такие ошибки:
Проверьте состояние Reset на микроконтроллере P.S. Предложение перевести отладчик в режим DFU - это не ошибка, а стандартная поведение, для перехода в режим загрузчика
Да. Или нажата, или питание идёт на него напрямую без подтяжки... в общем, подключить питание, понажимать на кнопку, посмтореть, что при этом происходит на reset
Да. Или нажата, или питание идёт на него напрямую без подтяжки... в общем, подключить питание, понажимать на кнопку, посмтореть, что при этом происходит на reset
Кнопка Reset рабочая. Если SWD-интерфейс разместить справа, то на нижних двух контактах кнопки будет земля. При нажатии на кнопку Reset, земля появляется на двух верхних контактах кнопки.
https://www.st.com/en/development-tools/stm32cubeprog.html Даже хотя бы просто считать, то что в нём есть, стереть, записать пустышку... уже будет больше уверенности в работоспособности.
В общем, мне рассказали, что с неродным контроллером (который, похоже, у меня) в Cube каши не сваришь. Он не будет его прошивать, а если и прошьет, то не будет к нему коннектиться для отладки.
Поэтому я попробовал прошить консольной утилитой. Вначале выяснилось, что st-flash v.1.5.1 не может шить такой контроллер.
Пришлось обновиться до 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
Что где еще надо докручивать, чтобы светодиод замигал?
Если СТ-Линк китайский, то там есть проблемы с ногой СБРОС. Все пишут, что можно и так, но лично у нас ни у кого не получилось прошивать без этой ноги. Это во-первых, во-вторых если поднимаете частоту повыше, то нужно устанавливать задержку на флеше. Лучше на первых парах работайте на стандартных 8 МГц.
Если СТ-Линк китайский, то там есть проблемы с ногой СБРОС. Все пишут, что можно и так, но лично у нас ни у кого не получилось прошивать без этой ноги.
И что нужно делать, чтобы прошивать "с этой ногой"?
Это во-первых, во-вторых если поднимаете частоту повыше, то нужно устанавливать задержку на флеше. Лучше на первых парах работайте на стандартных 8 МГц.
Но я брал эту STM потому что для моей задачи не хватает скорости AVR с ее 16MHz. Мне нужно 72MHz, и то это нижний предел, и возможно что придется на Ассемблере писать, чего очень бы не хотелось.
xintrea, ну попробуй ты уже прошить "блинк" без калокуба! Еще лучше — возьми на просторах интернета готовый "блинк" даже без CMSIS, да попробуй, что получится. Там прошивка меньше 100 байт выходит (а то и 20Б, не помню точно).
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
И что нужно делать, чтобы прошивать "с этой ногой"?
Допаять программатор.
xintrea писал(а):
Мне нужно 72MHz
Как заморгает на низкой частоте, ускорить уже не проблема. Смысл в том, что повышение частоты таит в себе несколько побочных эффектов, которые могут стать дополнительным камнем преткновения.
Martian писал(а):
Что касается неродных ST-Link, то под Windows работает без всяких проблем
Вот все пишут, что работает, а у нас не работает без ресета и всё тут. Хоть под виндой, хоть под линью. Видимо, что-то делаем не так.
Добавлено after 6 minutes 17 seconds: Кстати да, у вас программатор определяется в том числе как флешка? Какое у неё имя?
>TEHb<, необязательно что-то не так... скорее всего, множество вариантов клонов. Я брал достаточно давно, как только они появились, и даже тогда, насколько помню, их клепали на двух вариантах мк - один как в оригинале, а другой - нет. В результате чего были тоже жалобы. Может, имеет смысл вскрыть и сравнить схему с оригиналом? Там она не такая уж и здоровая.
Добавлено after 4 minutes 23 seconds: нет, у меня китайский клон как флэшка не определяется. ST-Link на оригинальной отладке определяется без имени, внутри три ссылки на сайты ST
Добавлено after 2 minutes 22 seconds: Кстати, у меня китайский клон успешно перетерпел трансформацию в J-link для Segger и обратно.
Вот так определяется NUCLEO-F410RB. Если к её встроенному программатору подключить другой процессор, то объём меняется, а название нет, тут я попутал что-то. Для прошивки достаточно просто скинуть в него бинарник. Он впитает файл и переоткроется с тем же содержимым, что и на картинке.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения