Решил я написать статью про подключение отладочной платы STM32VLDiscovery (еще одна статья учебного курса по STM32). Казалось бы это вообще элементарно, воткнул провод и вперед, но на деле можно наступить на огромное количество граблей. Поэтому нельзя оставлять этот вопрос неосвещенным.
Программирование STM32VLDiscovery через Keil.
Подключаем нашу платку к USB, и ждем пока она определится как внешний носитель. Если Windows не увидел вашу плату (как было у меня), то советую проверить в первую очередь кабель и разъем для него на плате. У меня, например, отошел контакт на Discovery, и я очень долго пытался понять, почему же плата не работает )
Но чаще всего подключение проходит без проблем, так что двигаемся дальше. Идем в папку с Keil’ом и находим драйвер для USB. Он лежит вот тут:
- ARM\STLink\USBDriver (это в папке, куда установлен Keil)
Запускаем ST-Link_V2_USBdriver.exe и устанавливаем его. Возвращаемся чуть назад – в папку C:\Keil\ARM\STLink и видим там файл STLinkUSBDriver.dll размером около 65 кб. Его надо заменить на файл - STLinkUSBDriver.dll (подменять файл следует только в том случае, если ST-LINK завести не удается (!) ).
Первый этап позади!
Запускаем Keil и открываем там проект, который будем заливать в железку. Идем в меню Flash-Configure Flash Tools. Во вкладке Debug выбираем Use ST-Link Debugger и ставим галочку Run to main():
Теперь открываем вкладку Utilities и тоже выбираем ST-Link Debugger.
Думаете все? А вот и нет, продолжаем настройку. Нажимаем кнопку Settings и в появившемся окне нужно добавить Programming algorithm для нашего девайса:
В этом же окне открываем вкладку Debug, находим поле Port и вместо JTAG ставим SW:
С настройкой закончили, но и это еще не все. Открываем файл stm32f10x.h и находим в районе 45-55 строк такой текст:
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) /* #define STM32F10X_LD */ /* STM32F10X_LD: STM32 Low density devices */ /* #define STM32F10X_LD_VL */ /* STM32F10X_LD_VL: STM32 Low density Value Line devices */ /* #define STM32F10X_MD */ /* STM32F10X_MD: STM32 Medium density devices */ /* #define STM32F10X_MD_VL */ /* STM32F10X_MD_VL: STM32 Medium density Value Line devices */ /* #define STM32F10X_HD */ /* STM32F10X_HD: STM32 High density devices */ #define STM32F10X_XL /* STM32F10X_XL: STM32 XL-density devices */ /* #define STM32F10X_CL */ /* STM32F10X_CL: STM32 Connectivity line devices */ #endif
Надо чтобы тут обязательно была раскомментирована строка #define STM32F10X_MD_VL и закомментированы все остальные, иначе программа зашьется, но не заведется.
Не забываем в настройках проекта попросить компилятор генерировать hex:
Собираем проект и нажимаем кнопку Load. В случае удачной прошивки видим строки:
Load "Здесь путь к файлу прошивки"
Erase Done.
Programming Done.
Verify OK.
Если все-таки почему-то у вас не вышло прошить плату через Keil, то есть второй способ.
Время традиционной вставки: поскольку компания STMicroelectronics прекратила поддержку библиотеки SPL, которая использовалась в этом курсе, я создал новый, посвященный работе уже с новыми инструментами, так что буду рад видеть вас там - STM32CubeMx. Кроме того, вот глобальная рубрика по STM32.
Программирование STM32VLDiscovery через STM32 ST-Link Utility.
Ну, здесь все намного проще, чем в Keil’e. Просто скачиваем утилиту, устанавливаем (скачать можно по этой ссылке - ST-Link Utility). Как и в первом случае заменяем файл STLinkUSBDriver.dll. Он лежит здесь:
- STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility
В принципе, это все! Запускаем утилиту, ну а дальше все прозрачно – кнопка Connect для подключения, меню Open File – для выбора файла прошивки. В общем, все понятно.
Итак, мы рассмотрели два способа прошивки STM32VLDiscovery, выбирайте любой на свой вкус! )
Хорошая статья. только не понятно, зачем подменять STLinkUSBDriver.dll вашим вариантом? интересно:вижу,что размер ее много больше родной, а что там? и еще вопрос: можно ли слить hex-файл с отладочной платы?
Просто часто не заводится ST-Link, если файл не подменить, хотя у меня на работе, например, и с новым (это тот, который меньше) нормально работало. Слить можно, если не установлен бит защиты
Спасибо за быстрый ответ 🙂 Курю STM32L Discovery. Хочу для начала слить тестовый hex, зашитый при покупке. Установил ST-LINK Utility, подменил драйвер STLinkUSBDriver.dll , диспетчер устройств винды видит "STMmicroelectronics STLink dongle" при включении ST-LINK Utility ругается "No STLink detected" в settings-connection protocol стоит SWD (неактивна, серым цветом) ниче поменять не дает. Плата подключена, блымает свой тест на ЖКИ, посмеивается, наверное)) Куда копнуть, посоветуйте?
Ну вообще у меня один раз в жизни только ST-Link Utility не увидела девайс, в итоге оказалось, что разъем на плате для мини USB не контачит ) Если все норм с подключением, то в моем компьютере платка должна как флэш-накопитель определяться
Решил попробовать родной STLinkUSBDriver.dll - тот, что 65 кб весит. Девайс определился сразу ( кстати, win7 ultimate, 32 bit) и порекомендовал мне firmware upgrade, подождет)). Загрузился код с адреса 0х8000000 размером 0х1000, слово 32бит. Смог сохранить в hех. Опять же вопрос: чтобы слить всю прошивку "100%" какой стартовый адрес и длину блока выставить? Заранее спасибо 🙂
В Keil'е в настройках, во вкладке target по-моему, прописан адрес и размер как раз области памяти
Здравствуйте. Пожалуйста подскажите как сделать следующее в Keil. Пример для PIC PORTB=0x10010001; установка сигналов на порту B. Спасибо.
У STM32 свои регистры, отличающиеся от PIC. Надо смотреть в reference manual какой регистр и за что отвечает.
Если есть возможность вставьте кусок кода, а под свой контроллер я сам подгоню. Просто не до конца понимаю как в порты загонять данные. Спасибо.
Поздравляю всех с праздником великой победы!
Так что за версию STLinkUSBDriver.dll вы продвигаете и где Вы ее взяли?
В IAR6.5 - 64KB,
В IAR7.0 - 84KB.
Это фирменные драйверы, отлично работают кстати у меня на разных компьютерах.
Почему у Вас размер 381 КБ, объяснитесь!
Не надо истерик 😉
Несколько лет назад была распространенная проблема с неработающим ST-LINK. В итоге, какими то людьми в интернете был создан/найден/придуман файл подменяющий стандартный. Конкретно у меня только на одном ПК не завелся ST-LINK за все время использования. Все исправилось подменой файла. Если у Вас работает, то это очень хорошо)
ок, скорее всего это файл от старой версии железа.
Вопрос, можно ли с помощью st-linka от stm32f4discovery прошивать чипы с питанием 1.8 вольт? (LIS331EB) Достаточно ли поставить пару резисторов для падения напряжения в разрыв swdio и swclk ?
Добрый день.
Может можете подсказать.
При программировании stm32LVDiscovery получилась опечатка в задаче частоты генератора. На порядок кажется ошибся. После прошивки видно, что работает микросхема, но перестала прошиваться, стираться через внутренний программатор. Что можно сделать? На ATMega -х в таком случае можно было собрать и подключить внешний тактовый генератор - спасало.
Честно говоря, не сталкивался с такой проблемой..не знаю даже, что предложить
Проблема решается легко:
1.Подключить дискавери к компу.
2.Отключить usb шнур от дискавери.
3.Закоротить вывод boot0 и Vdd.
4.Подключить usb шнур к дискавери.
5.Снять перемычку с boot0 и Vdd.
6.Утилитой или из Keil дать команду Erase.
После этого все видится и St-Link и "камень" на борту дискавери.
Спасибо! Действительно помогло!
17.03.2016
Вопрос связан с подключением платы STM32VL Discovery и связи её с STM32 ST-LINK Utility v3.8.0.
Сначала о том, что у меня получается. Купил STM32VL Discovery, подключил к компьютеру с ОС WindowsXP: в проводнике появляется съёмный диск объёмом 31 Мв, в котором содержатся три ссылки (не рабочие) на сайт http://www.st.com. Запустил дистрибутив stm32_st-link_utility.exe; прошла установка самой программы и драйвера. Программа оказалась версии 2.5.0. и рабочей, контроллер на плате читается и пишется.
Захотелось установить последнюю версию, STM32 ST-LINK Utility v3.8.0, скачанную с сайта http://www.st.com/web/catalog/tools/FM146/CL1984/SC720/SS1454/PF219866?sc=internet/evalboard/product/219866.jsp#. Во время установки дистрибутив предлагает установить два драйвера. Программа отказалась работать: не находит нужного драйвера. Заставил работать программу так: запустил дистрибутив v3.8.0, отказался от установки драйверов. В «Диспетчере устройств» удалил виртуальный нерабочий СОМ-порт (он не нужен), появляющийся при установке программы v3.8.0. Установил драйвер, взяв для него дистрибутив ST-Link_V2_USBdriver.exe из директории установленной программы версии 2.5.0. Программа STM32 ST-LINK Utility v3.8.0 получилась рабочей. Когда в ней открываю закладку «Инструменты», в окне, где выводится номер СОМ-порта, вижу: «ST-Link/1_on_I». I это – буква съёмного диска объёмом 31 Мв, появляющегося, когда втыкаешь кабель от платы STM32VL Discovery в USB-порт компьтера. Эту ситуацию я понимаю так: плата при её подключении к компьютеру, создаёт виртуальный диск в оперативной пямяти компьютера (вместо виртуального СОМ-порта) и работает через этот диск с программой STM32 ST-LINK Utility v3.8.0. Щелкаю по кнопке, включающей связь программы с платой, вижу код, зашитый в контроллер, объём которого около 2/3 от объёма памяти контроллера (128 кВт).
Теперь вопросы: что за программа зашита производителем в микроконтроллер и что она мне может дать? И второй: всё ли я сделал правильно при установке программы STM32 ST-LINK Utility v3.8.0 или надо делать что-то по-другому?
С уважением, Вячеслав.
Доброго дня! Есть ли возможность слить прошивку с контроллера stm32f100 VDT6B. Если да, то как это сделать? нужна помощь специалиста с щедрой оплатой!
Через ST-Link Utility можно в том случае, если прошивка не защищена от чтения тем, кто ее зашивал в контроллер.