LINUX.ORG.RU

Как заливать в stm32f103 через последовательный порт

 , ,


2

2

Имеется вот такая игрушка http://www.ebay.com/itm/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Bo...

Есть желание кодить в нее с libopencm3, но нет понимания как туда заливать. На сайте libopencm3 предлагают юзать openocd но похоже что он не может просто так взять и залить через последовательный порт, а умеет только через stlink.

Есть ли у меня шанс сэкономить 6$ и три недели ожидания, или таки без stlink никак?

Кстати, у меня получилось подружить эту штуку и arduino ide. Все кодится, все заливается. Может есть возможность подружить arduino ide с libopecm3? Такой вариант тоже годится.

★★★★

Если на твоей плате с завода не зашит загрузчик, то у тебя не будет другого варианта, кроме покупки STLink. Если загрузчик зашит, всё зависит только от него.

CYB3R ★★★★★
()
Ответ на: комментарий от BRE

Я заметил что arduino-ide юзает эту тулзу для заливки. Осталось выяснить как с ее помощью заливать бинарники собранные с libopencm3. Вобщем буду пробовать, спасибо.

redixin ★★★★
() автор топика
Ответ на: комментарий от CYB3R

Видимо загрузчик таки зашит раз arduino-ide умудряется туда заливать. Вот бы еще почитать об этих ваших загрузчиках и протоколах загрузки. Судя по всему они через UART всякую полезную инфу умеют передавать, прямо как USB:

stm32flash /dev/ttyUSB0 
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
redixin ★★★★
() автор топика
Ответ на: комментарий от redixin

Ну и отлично. Шей тогда этой утилитой stm32flash.

CYB3R ★★★★★
()
Ответ на: комментарий от redixin

и протоколах загрузки

Если протоколах закачки прошивки и загрузки с неё, то предполагаю, что это USB DFU - The USB Device Firmware Upgrade.

gag ★★★★★
()

лучше все-таки иметь st-link. С ним можно будет заниматься отладкой, ходить по шагам итд.

vromanov ★★★
()

Блин, китайский программатор стоит копейки. Зачем все так усложнять? Тем более, как уже написали выше, бутлодырь не позволит провести отладку. А Вы на 100% уверены в своем коде?

baldman88
()
Ответ на: комментарий от CYB3R

Применимо не ко всем контроллерам. Некоторые имеют загрузчик в специальной неперезаписываемой памяти. То есть умеют самопрошиваться прямо с завода.

STM32 как раз такой случай (что-то похожее есть ещё как минимум у MSP430, правда называется иначе - BSL). Для попадания в режим загрузчика нужно подать правильное напряжение на BOOT0 (не помню точно, то ли высокий, то ли низкий логический уровень) в момент сброса или включения МК. На некоторых отладочных платах специально для этого предусмотрен джампер или переключатель.

На STM32F103 интерфейс загрузчика будет доступен лишь на USART1. На более крутых чипах (например, STM32F407) вариантов больше - несколько USART, USB.

Через USART умеет шить OpenSource-утилита stm32flash. Через USB - dfu-util. В первом случае потребуется переходник USB-UART, во втором случае ничего кроме платы с МК и USB-шнурка не нужно.

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

В варианте с UART можно повесить RESET и BOOT0 на сервисные линии последовательного порта, таким образом обеспечив перепрошивку без необходимости ручных действий (программно уронить RESET в низкий уровень, выставить нужное значение на BOOT0, отпустить RESET). Таким образом сделано на Arduino, только там для прошивки нужно лишь манипулировать RESET AVR-микроконтроллера. Но это уже для эстетов.

Ещё можно попасть в системный загрузчик из обычного кода. Для этого нужно прыгнуть по определённому адресу (фактически у STM32 и системная память, и пользовательский Flash всегда доступны, но по ненулевому смещению, просто в зависимости от состояния BOOT0 на нулевые адреса маппится что-то одно). Точно в последовательности действий не уверен. Возможно, нужны дополнительные действия (скажем, объяснить NVIC, что таблица прерываний теперь в другом месте, но есть вероятность, что загрузчик и так это делает).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 5)

Есть ли у меня шанс сэкономить 6$ и три недели ожидания, или таки без stlink никак?

Я точь-в-точь такую плату, только с Ali, шил «из коробки» в Arduino IDE: http://www.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-De...

Через USB не шьётся, а вот с внешним UART-адаптером — без проблем: http://www.balancer.ru/g/p4113757

KRoN73 ★★★★★
()

Однако, на мой взгляд, такое можно использовать лишь для мелких экспериментов, либо для того, чтобы дать возможность пользователям устройствам самостоятельно обновлять прошивку. Для полноценной разработки очень полезны возможности внутрисхемной отладки, которые предоставляет программатор. Тем более, что китайские клоны StLink стоят весьма дешёво (200-300 рублей - вполне нормально для однократного вложения). Все, кто утверждает иначе либо не далеко ушли от мигания светодиодом, либо мазохисты.

KivApple ★★★★★
()

Возьми у меня пример Makefile, скажем, здесь. make flash льет через st-link, а make boot — через бутлодырь (нужен баксовый переходник USB<->UART). ST-link я уже вообще не использую для STM32 — нет смысла, когда через бутлоадер проще. Если на девборде нет кнопочки boot, ее всегда можно подцепить.

anonymous
()

на всякий случай - у нас ST-Link mini горят регулярно. Закупаем их горстями.

vromanov ★★★
()

Там еще какой-то вывод надо занулить, чтобы загрузчик запустить.

Rupricht ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.