Cube ide не видит st link
Using the STM32CubeIDE with an STM32F3DISCOVERY board I was able to use the Run menu option to download and start running a program. After a Windows Update which involved updating USB drivers, the Run command no longer works.
After updating my Dell Windows 10 Desktop PC, I am now seeing a popup dialog that says "No ST-LINK detected! Please connect ST-LINK and restart the debug session." The update included two USB device drivers which I'm pretty sure were named (1) Alcor Micro and (2) ASMedia. I do have a card reader installed in this PC.
How can I get back to being able to use the STMCubeIDE to download and run and debug my STM32F3DISCOVERY programs?
ST resources
UM2576 User manual: STM32CubeIDE ST-LINK GDB server which describes in Appendix B a configuration file for starting the ST-LINK GDB server. The GDB Server start-up options are described in section 1.1 on page 2.
Research into the problem
After reading the answers to the posted question stm32 - is there a factory reset? I downloaded and installed STM32CubeProgrammer.
I can modify and build my application using STM32CubeIDE however in order to run it, I have to program the STM32F3DISCOVERY board using STM32CubeProgrammer and use the Erasing & Programming tool to download the .elf file that resulted from the build. In the past I was able to do everything in STM32CubeIDE.
Looking in Device Manager it looks like the ST-LINK device description has changed.
From what I remember it was some kind of a mass storage device and now it is a Serial port. It looks like I have an "Unknown device" which is new.
Additional info
When I right click on the "Unknown device" entry and select "Update driver" I see a list of Common hardware types after I click first "Browse my computer for drivers" and then "Let me pick from a list of available drivers on my computer".
If I scroll down the list to "Universal Serial Bus devices" I see an entry for STMicroelectronics which looks like this:
I'm unable to connect to my STM32F4Discovery board using an ST-Link/v2.
I've removed jumpers from CN3, connected the cables correctly but the utility tool won't detect anything.
Here is the physical connection:
And software settings:
This is the error message that I get when trying to connect:
Here is the log message that I get in trace:
Please help, it's driving me mad.
\$\begingroup\$ Yes, but I soldered another SMT32F chip on an adapter board and tried to access it. I couldn't and then fallen back to a device I know it should work (discovery board) and now having the same issues. So I need to make it work on a professional made board and only then I can move with 100% certainty to my own board. \$\endgroup\$
\$\begingroup\$ Although this post was useful to me, I'd like to add that the picture is wrong. You correctly said that: PIN1 -> VDD PIN7 -> PA13 PIN9 -> PA14 PIN20 -> GND But on the picture you have: PIN1 -> VDD PIN9 -> PA13 PIN11 -> PA14 PIN20 -> GND The problem is with google image search engine, lazy people would make wrong connections (as myself on my first attempt hehe). P.D. This should be a comment, but my reputation doesn't allow me yet ;) \$\endgroup\$
\$\begingroup\$ -1 for posting a picture which shows incorrect SWD connections differing from the text as the middle two pins are incorrectly connected off-by-1 at pins 9 and 11 of the STLINK instead of pins 7 and 9 where they belong. \$\endgroup\$
Рубрики
Приступаем к работе
Модификацию можно произвести только на версии софта под Windows, кроссплатформенная версия софта отказывается обновлять девайс!
Есть несколько вариантов модификации, и часть из них нельзя сделать если чип не подходящий (не хватит памяти).
Например, модификацию STM32+MSD+VCP можно сделать только если чип STM32F1xxCBxx, однако у нее есть аналог STM32+Audio, который даст STM32+VCP (в принципе что нам и требуется).
— Паяльник;
— Мультиметр с прозвонкой;
— ПК с ОС Windows (может получится через Wine, не пробовал);
— Архив с нужным софтом и бутлоадером (PASS: QWK2tn+fM.EdjX6z).
— Китайский клон ST-Link V2;
— USB-UART адаптер либо второй ST-Link.
Вскрываем.
Прошивка
Есть два пути — USB-UART (немного сложнее) либо второй ST-Link.
1) Прозвонкой находим резистор который подключен к BOOT0.
Делаем перемычку от стороны этого резистора которая подключена к BOOT0 к 3.3v.
PA9(TX) может быть подключен к светодиоду или резистору рядом с ним, потому прозваниваем.
Подпаиваем UART на PA9(TX) и PA10(RX).
Я делал это так:
Так же подпаиваем питание.
Прошиваем загрузчик Protected-2-1-Bootloader.bin с помощью STM32 Flash loader demonstrator.
После прошивки отпаиваем перемычку, PA9 и PA10 (PA10 оставляем если хотим вывести SWO).
На платах есть по 4 контакта, в некоторых случаях они уже промаркированы, в противном же случае прозваниваем их относительно PA13(SWDIO) и PA14(SWCLK), подпаиваемся вторым ST-Link.
Так же подпаиваем питание.
Устанавливаем STM32 ST-LINK Utility V4.3 из архива, снимаем защиту от записи и прошиваем загрузчик Protected-2-1-Bootloader.bin.
Для снятия защиты в программе STM32 ST-LINK Utility жмем Target > Option Bytes, переключаем Read Out Protection в Disabled и жмем Apply.
Обновление до ST-Link V2.1
После прошивки подключаем прошитый ST-Link (уже почти V2.1) к ПК.
В программе STM32 ST-LINK Utility V4.3 жмем ST-LINK > Firmware update.
Жмем Device Connect — получаем список возможных модификаций:
Выбираем нужную вам модификацию, в моем случае STM32+MSD+VCP, жмем Yes >>>>.
Ждем пока завершится обновление…
Завершающая часть
Так как SWIM и RST после такой модификации не работают — отрезаю их.
Так же отрезаю дублирующие 5V и 3.3V.
Получается 4 свободных пина.
На них подпаиваюсь проводками к чипу:
PA10 -> SWO
PB0 -> NRST
PA3 -> RX
PA2 -> TX
Вывожу все на основной разъем, на оставшиеся свободные пины.
Получилась такая распиновка:
Накарябал скальпелем маркировку на корпусе:
Не забываем отмыть плату после пайки!
В итоге, в ПК девайс определяется так:
Я без понятия чему равен объем виртуальной флешки (в данном случае к ST-Link V2.1 был подключен F103C8).
Если на нее закинуть файл прошивки — программатор прошьет чип без программ.
Спасибо за внимание!
При копировании попрошу оставлять ссылочку на первоисточник.
Сообщество
Язык сайта
На этом веб-сайте используются файлы cookie, которые обеспечивают работу функций для наиболее эффективной навигации по странице. Если вы не хотите принимать постоянные файлы cookie, пожалуйста, выберите соответствующие настройки на своем компьютере. Продолжая навигацию по сайту, вы косвенно предоставляете свое согласие на использование файлов cookie на этом веб-сайте.
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
Здесь я расскажу как создать минимальный проект на CMSIS с использованием «родной» IDE для микроконтроллеров STM – STM32CubeIDE.
Возможно STM32CubeIDE и обладает рядом недостатков, но у нее, на мой взгляд, есть несколько преимуществ – таких как проприетарность и бесплатность, ради которых, как минимум, стоит обратить внимание на эту среду разработки, если вы не сделали этого раньше.
Объектом прошивки выбран не очень распространенный микроконтроллер STM32F072 с ядром ARM Cortex-M0, для более привычных STM32F103 на ARM Cortex-M3, с поправкой на ядро, процесс идентичен.
-
, я использую Windows версию, но также доступны версии под Mac и Linux
Создание нового проекта — File/New/STM32Project. После некоторого раздумия появляется окно выбора микроконтроллера, в моем случае это STM32F072RB в корпусе LQFP64, выбираю нужную строку, жму далее. Далее предлагается выбрать имя проекта, расположение, язык программирования C/C++, исполняемый файл/статическая библиотека и будет-ли проект сгенерирован с помощью CubeMX или сами с усами. Генерация кубом, в данном случае не нужна, поэтому тип проекта Empty — финиш.
Слева, в окне Project Explorer, появилось дерево проекта, правда он не совсем Empty, как заказывали. Впринципе, если устраивает сгенерированная структура папок, можно добавить туда файлы из библиотеки CMSIS и работать дальше, но здесь я покажу как можно привести структуру проекта в гармонию со своим чувством прекрасного, поэтому удаляется всё, кроме скрипта линкера т.е. файла c расширением .ld — он еще пригодится.
Все манипуляции с папками и файлами можно проводить как в проводнике так и внутри IDE, нажав правой кнопкой на название проекта, к примеру: правая кнопка –> new –> Folder. Если структура проекта изменялась вне IDE, то нужно просто обновить проект: правая кнопка –> Refresh.
Мой вариант структуры проекта выглядит так:
- Startup – здесь будет храниться скрипт линкера, тот самый, оставшийся от сгенерированного проекта, а также startup файл взятый из CMSIS
- CMSIS\src и CMSIS\inc – здесь будут лежать исходники, файлы с расширением .c в папке scr и заголовочные файлы с расширением .h в папке inc соответственно, относящиеся к библиотеке CMSIS
- Core\src и Core\inc – здесь будет расположен собственно сам проект, для начала стоит положить туда main.c и main.h
Теперь нужно перенести файлы библиотеки CMSIS в проект. Библиотека состоит из файлов ядра и файлов периферии. Файлы ядра начинаются с core_ или cmsis_ они общие для всех микроконтроллеров, использующих данное ядро. Файлы периферии содержат в названии наименование микроконтроллера stm32 и специфичны для конкретного производителя, в данном случае, компании STM.
В распакованном виде архив содержит папку STM32Cube_FW_F0_V1.11.0, все пути указаны относительно этой папки. Итого, нужно скопировать:
- Drivers\CMSIS\Include\cmsis_compiler.h
- Drivers\CMSIS\Include\cmsis_gcc.h
- Drivers\CMSIS\Include\cmsis_version.h
- Drivers\CMSIS\Include\core_cm0.h
- Drivers\CMSIS\Device\ST\STM32F0xx\Include\stmf0xx.h
- Drivers\CMSIS\Device\ST\STM32F0xx\Include\stm32f072xb.h
- Drivers\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h
- Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c
- Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\gcc\startup_stm32f072xb.s
Так как были проведены некоторые манипуляции с папками проекта, нужно отобразить это в настройках.
Правая кнопка по названию проекта -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> General – здесь нужно указать новое расположение скрипта линкера с помощью кнопки Browse…
Также нужно указать пути к файлам проекта
Properties -> C/C++ General -> Includes
Properties -> C/C++General -> Source Location
В Includes пути к папкам inc, а в Source Location логично было-бы к папкам src, но если так сделать, то в дереве проекта будут отдельно добавлены эти папки. Чтобы не загромождать визуально дерево, в Source Location можно указать корневые папки Core, CMSIS и Startup.
Для того чтобы проект скомпилировался нужно раскомментировать в файле stm32f0xx.h строку с названием микроконтроллера ну и конечно же в main.c добавить функцию main.
Собственно всё. Безошибочная компиляция и сразу же куда-то подевалось целых полтора килобайта памяти ОЗУ она же RAM, и сразу же вспоминается стек и куча, в процессе создания проекта они нигде не упоминались. Величина стека и кучи указана в файле скрипта линкера, тот что с расширением .ld, их можно и нужно изменять в соответствии с требованиями проекта. Эти значения находятся в начале файла в виде меток _Min_Heap_Size/_Min_Stack_Size с указанием размера в шестнадцатеричном виде.
В качестве примера, приведу небольшой проект традиционного мигания светодиодом.
Светодиод будет мигать на отладочной плате STM32F072B-DISCO, тактирование осуществляться от внутреннего генератора HSI48 частотой 48 МГц, а в качестве источника задержки использоваться таймер SysTick, генерирующий прерывания с периодом в 1 мс, при помощи которых отсчитывается точное время задержки. Светодиод подключен к выводу 6 порта С, настроенного на выход push-pull.
Надеюсь, данная информация кому-то пригодится, т.к. в свое время, несмотря на обилие материалов по программированию STM32, мне пришлось перелопатить достаточно много мануалов, чтобы осознать вещи, кажущиеся сейчас очевидными.
Привет, Хабр!
В данной статье расскажу как модифицировать ST-Link V2 до ST-Link V2.1.
Возможно для кого-то это не будет новостью, но особой инфы по данной теме в инете не нашел.
Кому интересно — прошу под кат.
2 Answers 2
Target voltage detected: 0.601975
You need to power your target. The debug adapter does not provide power, it uses the Vtarget pin to determine the output voltage levels.
\$\begingroup\$ Thanks for quick reply! Now that I have connected 3.3V input it starts to blink and all that demo stuff but I have a new error now: ST-Link/V2 device detected Target voltage detected: 3.242133 Error getting target IDCODE: if SWD, check SWD connection Error (4) while initializing ST-Link in SWD mode \$\endgroup\$
\$\begingroup\$ "Hardware reset" requires the reset line to be connected. This is apparently not the case. \$\endgroup\$
\$\begingroup\$ I connected it now, and it pulls the NRST pin down and it blinks for a moment when I press the connect button and then just throws an error above. And I've tried using Normal mode but it's giving me the same error. \$\endgroup\$
\$\begingroup\$ So, the problem was when I connected discovery board using USB, even though the CN3 jumpers were not connected it still recognized onboard ST-Link v2 and tried to use that one. After painful realization switching it to a external one it worked just fine! Thanks to everybody involved! \$\endgroup\$
Presumably you use the GPIOA port in your source code. If so, first download program to discovery; your code conflicts with swd pins. When you power your board, your source code changes the pa13 and pa14 pins roles. You must connect swd to your board immediately after reset (and do so after power) before loading your code to the CPU.
What should you do? You should erase the flash memory.
First open the STM32 ST-LINK Utility.
- push and hold discover black button (nrst button),
- click target -> setting,
- select "connect under reset” option; at the same time click refresh and release discovery board black button,
- repeat until STM32 ST-LINK Utility connect your board,
- erase flash memory,
- enjoy!
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
Сам себе создал проблему, прошу помочь с решением ) В STM32CubeMx в Pinout & Configuration -> System Core -> SYS -> Debug забыл выбрать SWD интерфейс.
Зашил микроконтроллер и теперь не могу к нему подключиться через ST-Link повторно. Уже и не знаю, что делать 🙄
Добрый вечер, "популярная" проблема, решение такое:
1. Подаем на выводы BOOT0/BOOT1 сигналы, соответствующие режиму загрузки системного бутлодера: BOOT0 - высокий уровень, BOOT1 - низкий:
2. Включаем питание.
3. Подключаемся программатором.
4. Очищаем Flash-память.
5. Возвращаем сигналы на BOOT0/BOOT1 к первоначальным уровням.
6. Контроллер доступен для прошивки 👍
@aveal спасибо, так и сделал, микроконтроллер спасен) Хорошо, что Boot ножки на плате можно перекинуть перемычками быстро.
В данный момент смотрят эту тему 1 гость.
Иконки тем : Не отвечен Отвеченный Активный Актуально Закреплено Неодобренно Решено Приватный Закрыто
Свежие комментарии
- Артур к записи Микроконтроллер STM32 и Bootloader. Пример реализации.
- TQFP к записи Библиотека Button для обработки нажатий кнопок на STM32. KY-004.
- TQFP к записи Библиотека Button для обработки нажатий кнопок на STM32. KY-004.
- Aveal к записи Библиотека Button для обработки нажатий кнопок на STM32. KY-004.
- Klin4 к записи Библиотека Button для обработки нажатий кнопок на STM32. KY-004.
Свежие записи
Предисловие
Так уж случилось, что мне надоели лишние провода.
Немного подумав я вспомнил что на платах Nucleo и Discovery — ST-Link совмещает в себе SWD и VCP (Virtual Com Port).
Первое что пришло в голову — купить самую дешевую из подобных плат, попытаться сдампить прошивку в обход защиты и залить в программатор из китая, либо же развести новую плату.
Однако мне подсказали ссылку на GitHub с уже вытянутым загрузчиком, в итоге получилось то что получилось.
Читайте также: