STM32 Discovery. Подключение отладочной платы.

Решил я написать статью про подключение отладочной платы STM32 Discovery (еще одна статья учебного курса по STM32 — весь он тут). Казалось бы это вообще элементарно, воткнул провод и вперед, но на деле можно наступить на огромное количество граблей. Поэтому нельзя оставлять этот вопрос неосвещенным.

Итак, часть 1, программирование STM32 Discovery через 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():

Настройка отладки в Keil

Теперь открываем вкладку Utilities и тоже выбираем ST-Link Debugger.

Выбор отладчика для STM32

Думаете все? А вот нет, танцы с бубном только начинаются! Нажимаем кнопку Settings и в появившемся окне нужно добавить Programming algorithm для нашего девайса:

Настройка SWD в Keil

В этом же окне открываем вкладку Debug, находим поле Port и вместо JTAG ставим SW:

Выбор SWD отладчика в Keil

С настройкой закончили, но и это еще не все. Открываем файл 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:
Генерация hex-файла в Keil
Собираем проект и нажимаем кнопку Load. В случае удачной прошивки видим что-то типа:

Load «D:\\Documentation\\stm\\STMProjects\\stm32discovery\\stm32discovery.AXF»
Erase Done.
Programming Done.
Verify OK.

Если все-таки почему-то у вас не вышло прошить плату через Keil, то читайте дальше……

Часть 2, программирование STM32 Discovery через STM32 ST-Link Utility.

Ну, здесь все намного проще, чем в Keil’e. Просто скачиваем утилиту, устанавливаем (а где скачать ST-Link Utility, а вот 😉 — качаем дружно отсюда). Как и в первом случае заменяем файл STLinkUSBDriver.dll. Он лежит вот там:

STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility

В принципе, это все. Запускаем утилиту, ну а дальше все прозрачно – кнопка Connect для подключения, меню Open File – для загрузки файла прошивки. В общем, все понятно.

Итак, в итоге, мы рассмотрели два способа прошивки STM32 Discovery, какой ближе вам, смотрите сами )

Понравилась статья? Поделись с друзьями!

STM32 Discovery. Подключение отладочной платы.: 20 комментариев
  1. Хорошая статья. только не понятно, зачем подменять STLinkUSBDriver.dll вашим вариантом? интересно:вижу,что размер ее много больше родной, а что там? и еще вопрос: можно ли слить hex-файл с отладочной платы?

    • Просто часто не заводится ST-Link, если файл не подменить, хотя у меня на работе, например, и с новым (это тот, который меньше) нормально работало. Слить можно, если не установлен бит защиты

  2. Спасибо за быстрый ответ 🙂 Курю 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 не контачит ) Если все норм с подключением, то в моем компьютере платка должна как флэш-накопитель определяться

  3. Решил попробовать родной STLinkUSBDriver.dll — тот, что 65 кб весит. Девайс определился сразу ( кстати, win7 ultimate, 32 bit) и порекомендовал мне firmware upgrade, подождет)). Загрузился код с адреса 0х8000000 размером 0х1000, слово 32бит. Смог сохранить в hех. Опять же вопрос: чтобы слить всю прошивку «100%» какой стартовый адрес и длину блока выставить? Заранее спасибо 🙂

    • В Keil’е в настройках, во вкладке target по-моему, прописан адрес и размер как раз области памяти

  4. Здравствуйте. Пожалуйста подскажите как сделать следующее в Keil. Пример для PIC PORTB=0x10010001; установка сигналов на порту B. Спасибо.

    • У STM32 свои регистры, отличающиеся от PIC. Надо смотреть в reference manual какой регистр и за что отвечает.

  5. Если есть возможность вставьте кусок кода, а под свой контроллер я сам подгоню. Просто не до конца понимаю как в порты загонять данные. Спасибо.

  6. Так что за версию STLinkUSBDriver.dll вы продвигаете и где Вы ее взяли?
    В IAR6.5 — 64KB,
    В IAR7.0 — 84KB.
    Это фирменные драйверы, отлично работают кстати у меня на разных компьютерах.
    Почему у Вас размер 381 КБ, объяснитесь!

    • Не надо истерик 😉
      Несколько лет назад была распространенная проблема с неработающим ST-LINK. В итоге, какими то людьми в интернете был создан/найден/придуман файл подменяющий стандартный. Конкретно у меня только на одном ПК не завелся ST-LINK за все время использования. Все исправилось подменой файла. Если у Вас работает, то это очень хорошо)

  7. ок, скорее всего это файл от старой версии железа.

    Вопрос, можно ли с помощью st-linka от stm32f4discovery прошивать чипы с питанием 1.8 вольт? (LIS331EB) Достаточно ли поставить пару резисторов для падения напряжения в разрыв swdio и swclk ?

  8. Добрый день.
    Может можете подсказать.
    При программировании stm32LVDiscovery получилась опечатка в задаче частоты генератора. На порядок кажется ошибся. После прошивки видно, что работает микросхема, но перестала прошиваться, стираться через внутренний программатор. Что можно сделать? На ATMega -х в таком случае можно было собрать и подключить внешний тактовый генератор — спасало.

  9. Проблема решается легко:

    1.Подключить дискавери к компу.
    2.Отключить usb шнур от дискавери.
    3.Закоротить вывод boot0 и Vdd.
    4.Подключить usb шнур к дискавери.
    5.Снять перемычку с boot0 и Vdd.
    6.Утилитой или из Keil дать команду Erase.

    После этого все видится и St-Link и «камень» на борту дискавери.

  10. 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 или надо делать что-то по-другому?
    С уважением, Вячеслав.

  11. Доброго дня! Есть ли возможность слить прошивку с контроллера stm32f100 VDT6B. Если да, то как это сделать? нужна помощь специалиста с щедрой оплатой!

    • Через ST-Link Utility можно в том случае, если прошивка не защищена от чтения тем, кто ее зашивал в контроллер.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *