69

Для начинающих Stm32f103C8T6

Добрый... день? Сегодня я хотел бы поделиться моим опытом начинающего экспериментатора с stm32. В данном посте мне хотелось бы помочь тем, кто хочет перейти с ардуино или просто начать использовать stm32 для своих поделок. Я и сам не имею богатого опыта работы с данными контроллерами, но буду рад поделиться своим первым опытом, и сделанными на этом пути ошибками. Надеюсь, кому-то это будет интересно.


Для начала, нам понадобится stm32f103C8T6, и дебаггер ST-Link V2. И то и другое можно купить в китае или в местных магазинах электроники, цена обоих, примерно по 2$. А так же нам потребуется 4 джампера, для соединения этих устройств. Этого будет достаточно, что-бы помигать светодиодом или управлять какими-либо внешними устройствами, но начнем с малого.


Первое, что нам понадобится - установить драйвер для программатора. Его можно найти здесь (внизу): http://www.st.com/en/development-tools/stsw-link009.html


Кроме того нам понадобятся STM32CubeMX его качаем тут: http://www.st.com/en/development-tools/stm32cubemx.html


А так же среда разработки, я предпочитаю официальный софт с поддержкой, потому берем ставую не так давно бесплатной Atollic TrueSTUDIO вот тут: http://www.st.com/en/development-tools/truestudio.html


Затем, нам нужно подключить, используя 4 джампера, наш программатор к плате контроллера следующим образом:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

После этого, если возможность записи прошивки в память на вашей плате не заблокирована - все готово к созданию нового проекта. Если же запись в память вашей платы заблокирована, вы можете решить это, подключив плату аналогичным образом, но используя улилиту STM32 ST-Link Utility и переключив джампер Boot0 в положение 3.3v. Что такое Boot0 можно глянуть тут: http://wiki.stm32duino.com/images/a/ae/Bluepillpinout.gif но вообще эта статья не об этом.


Итак, для начала создадим проект, используя STM32CubeMX, эта программа предназначена для удобной инициализации периферии и создания проекта, для IDE в которой мы будем далее работать, поверьте, куб действительно прекрасен. После нажатия на кнопку "New Project", попадаем на окно выбора чипа. В нашем случае это stm32f103c8tx. Выбираем его и нажимаем "Start Project".

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Следующее за этим окно выгляит довольно пугающе для начинающих, но в действительности, не представляет особых сложностей. Перед нами изображение установленного на плату чипа микроконтроллера. И все что нам нужно для начала это помигать светодиодом, потому, по аналогии с ардуино, если вы с ним работали, выбираем ножку, к которой присоединен светодиод, которым мы будем мигать. В нашем случае - это ножка PC13. Кликаем на ножку и выбираем GPIO_Output.

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Вообще в stm32, в отличие от ардуино, где визуально пины делятся только на аналоговые и цифровые, пины разделены на группы, PA, PB, PC, PD. Это обусловлено тем, что stm имеет 32 разрядные регистры (GPIOA, GPIOB, GPIOC, GPIOD) для управления выходами, потому каждый регистр может управлять 16 выходами микроконтроллера, у микросхем старших поколений stm этих выходов очень много, потому было принято решение сгруппировать выходы, в соответствии с именами регистров.


Так же !ВНИМАНИЕ нужно включить возможность дебага ВНИМАНИЕ! микроконтроллера иначе, прошивка у вас зальется только 1 раз а затем вам потребуется выводить ваш контроллер из состояния легкого ступора, потому как ST-Link не будет его видеть. Если это произошло, вам прийдется потанцевать с бубном используя STM32 ST-Link Utility и так же переключив джампер Boot0 в положение 3.3v.

Так же по желанию можно подключить внешний кварц, который припаян на плате, что позволит нашему камню работать быстрее. Но это не обязательно, хотя желаемо:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Stm32 может тактироваться от любого из 2х встроенных резонаторов, медленного и быстрого LSI 40KHz(по умолчанию) и HSI 8MHz, встроенных в сам чип и таким образом, обходиться без внешнего резонатора. Либо же использовать внешние резонаторы с частотой 4-16MHz (HSE), если вам нужно ускорить ваш камень или LSE c частотами 0-1000 KHz если вам нужно жертвовать скоростью ради энергопотребления.


Настройку частоты камня и переферии делаем во вкладке ClockConfiguration следующим образом, для этого просто задаем значение 72 в поле HCLK(MHz) и нажимаем enter. Затем соглашаемся с тем, что б STM32CubeMX настроил все за нас и нажимаем снова ок, готово. Внимание! Если на предыдушем шаге вы не вклчили RCC -> HSE -> Crystal/Ceramic Resonator, то вы не сможете установить значение 72 MHz и ваш камень может работать на частоте максимум 36MHz используя внутренний кварц.

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

На этом конфиг закончен, теперь необходимо создать проект, для этого выбираем кнопку в виде шестерни сверху:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

В открывшемся окне заполняем поля:

Project Name, Project Location и ВНИМАНИЕ! выбираем IDE для которой будет создан наш проект, в нашем случае это TrueSTUDIO, если этого не сделать, то будет создан проект для IAR (EWARM).

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Так же, я рекомендю переключиться на следующую вкладку (Code Generation) и выбрать в разделе Generated files пункт Generate peripheral initialization as a pair of .c/.h files per peripheral. Это позволит очистить ваш main файл проекта от инициализации перефирии, путем выноса ее в отдельные файлы. Я рекомендую делать так всегда.

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Затем нажимаем ок и создаем проект. Если вы все сделали верно, то куб сразу же предложит вам скачать необходимые для вашего контроллера библиотеки и затем отрыть проект в Atollic TrueSTUDIO:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Все что нам необходимо, это добавить следующий код внутрь цикла while в нашем main и нажать debug, перед этим убедитесь, что оба режима бут отключены (желтые переключатели установлены, как на первом фото):

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

HAL_Delay(100);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_Delay(100);

Дождаться загрузки и выйти из режима дебага. К сожалению, заливка кода в контроллер без входа в режим дебага по умолчанию невозможна в AtollicTRUESTUDIO, но впринципе это можно обойти потанцевав с бубном, хотя эта статья не об этом. Если все было сделано верно, то светодиод на плате замагает с заданной частотой.

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Это моя первая статья про микроконтроллеры и первая статья по электронике в целом, не судите строго, надеюсь она будет интересна хотя бы кому-то. Если будет интерес с вашей стороны - дайте знать, буду писать про stm32 дальше.

Найдены дубликаты

49 комментариев

по актуальности
+7

Совет, если хочешь начать просвещать в этой теме, создай сайтик или бложек с этим, на пикабу это потеряется в дебрях, да и в топ точно не выйдет, ибо мало кто оценит.

По статье. За 4 года работы с стм32 (начал еще в универе) опробовал разные IDE: CooCox, IAR, STSW32. В итоге остановил свое внимание на EM-Bitz - домашний фриланс (весит мало, можно работать со всеми камнями с M3/M4 ядрами, автоматом создает проект с подключенными либами SPL, минус  - куб под нее не сгенерит проект). На работе Keil - хорошая отладка и все удобненько.


Советую не надеяться на Cube, а почаще заглядывать в даташит и смотреть регистры. Ибо в больших проектах куб нагенерит такой портянки, что будешь там долго разбираться.

Ну и хотя бы представлять себе как это работает в регистрах.

Я так и не смог перелезть на HAL, остался на связке регистры + SPL. Но кубом удобно пользоваться, чтобы пины посмотреть и карту тактирования.


Удачи в начинании) Потом пойдет повеселее, RTOSы, стеки TCP/IP, DMA во все подряд )))

раскрыть ветку 7
+1
Я так и не смог перелезть на HAL,

Сам hal опирается на ll драйвера. Которые являются развитием spl. Просто для новых камней (7xx серия ) spl уже нету и, наверное, перейти на ll стоит.
раскрыть ветку 1
0

Это да. Под 7 серию с спл не покодишь) Пока 7 серию не обкатывал ибо она уж слишком навороченая. Пока не появились задачи под эти камни f3/f4 серии пока за глаза хватает. Даже f1 еще закладывается в проектах. Когда пойду в 7 серию наверное загляну в хал. cmsis вроде там тоже есть

+1

Спасибо, потихоньку разбираюсь. Вообще начал с ардуино и stm8, довольно глубоко вникая в архитектуру железа, но друзья порекомендовали попробовать stm32 и мне понравилось. Думаю попробовать написать какое-то количество статей не рейтинга ради, а больше как напоминалку себе и в помощь другим. Сам по образованию системный программист, но работаю как прикладной и немного жалею об этом, интересно было бы если не сменить сферу деятельности на эмбед, то хотя бы как тот же фриланс в перспективе попробовать.  Обязательно посмотрю на EM-Bitz, спасибо за наводку. Еще очень надеюсь что настанет тот светлый день, когда JetBrains сделают поддержку embedded в CLion, пользуюсь их IDE Intellij Idea по работе для джавы и она шикарна.

раскрыть ветку 4
0

Можно не ждать светлого дня и написать cmake скрипт для stm32 прям сейчас. Если интересно, могу скинуть пример для HAL. в CLion будет работать всё, кроме дебаггера. Но я могу порекомендовать Ozone от Segger. Нужно будет только через их утилиту stlink в jlink перешить. Я вообще заморочился, и собрал дебаггер на отладочной плате blue pill. В пазы вставляется плата, прошивается контроллер, и у тебя полноценный дебаггер для всех cortex-m.



https://www.segger.com/products/development-tools/ozone-j-li...

Иллюстрация к комментарию
0
С высокими ide особо не знаком, юзаю только qt и иногда VS)
раскрыть ветку 2
+10

Третьи сутки почти без перерывов пишу диплом. Программирую stm32f103c8t6. Когда кровь из глаз уже пошла мощным потоком, решил к открытым в браузере полутора сотням вкладок открыть пикабу и попить кофе. Угадайте, какой пост увидел первым? Думал уже крыша поехала.

А вообще удачи автору!

Иллюстрация к комментарию
+4

А меня бесят наркоманы из СТМ, которые упорно не хотят ставить ЕЕПРОМ на борт камня.

И приходится через жопу сохранять данные, или ставить доп корпус.

раскрыть ветку 3
0

Так может в этом план?
Хочешь красиво - плати красиво?)

0

Почему не хотят, у L1 емнип был.

раскрыть ветку 1
0

Там этих камней с ЕЕПРОМ раз два и обчелся, не говоря уже про их цену.

+3

Я не из тех, кто советует сразу начинать кодить на ассемблере без использования библиотек и все такое, сама учусь, но Cube MX это баловство. Понимания как это все работает он не даст. Так, может разве что удобно и наглядно распихать периферию по ножкам.
А еще вместо того, чтобы искать программаторы, периферию и тд и тп, не проще купить отладочную плату STM32Discovery?
С позволения скину пару ресурсов, по которым начинала в это вкатываться:

У этого человека очень хорошие уроки https://www.youtube.com/watch?v=6bsvxxRcSs0&list=PL8OgDYWys_...

Тоже много хороших статей для новичков. Все разжевывается http://microtechnics.ru/stm32-uchebnyj-kurs-vvedenie/

раскрыть ветку 16
0

Мне, как джава програмиисту кажется, что жизнь слишком коротка, что б писать на ассемблере, мне в универе хватило. Разбираться в железе безусловно необходимо, но писать все с ноля каждый раз, это не ко мне, банально жаль время, для этого есть либы. А за ссылки спасибо.

раскрыть ветку 5
0

Просто с кубом от ардуинки ты недалеко уйдешь. Как-то так. А зачем с нуля писать? Ты можешь своих библиотек наклепать, начиная хотя бы с конфигурации портов, просто меняя настройки от проекта к проекту. При знании как это делать(чего куб тебе не даст тк делает это за тебя) ты все настроишь быстрее и красивей, чем куб тебе нахерачит говнокод.

раскрыть ветку 4
0

палить пилюлю в разы дешевле!(примерно в 8)

раскрыть ветку 9
+1

Главная проблема даже не в этом. Если вы юзаете дискавери, в них как правило используются очень избыточные камни, которые в любительских конструкциях не имеют смысла, а так же у них слишком мало расстояние между ножками и при разводке платы самому, ее будет сложнее паять. По этому я рекомендовал бы взять уж лучше nucleo, а не discovery, имхо.

раскрыть ветку 3
0

И все равно останется хотя бы программатор, а контроллер и заменить можно

раскрыть ветку 4
+2

Норм тема. Подписываюсь.

0
А я не стал куб изучать, просто использую stm32duino. Пока для работы с Кан шиной Опеля хватает.
0

А чем оно лучше Ардуины? Ценой?

раскрыть ветку 2
+1

https://youtu.be/-swzPsSIkEw вот неплохое сравнение

0
Если совсем коротко, то количеством портов, разрядностью АЦП и встроенным CAN bus
0

Для совсем далеких, в сравнении с ардуиной эта штука стабильнее? А аналоги esp8266 у ней есть, а-то погружаюсь в IoT и  переучиваться потом лень.

раскрыть ветку 3
0

Да, в отличие от ардуино эта штука мощнее и стабильнее, у нее есть свои особенности но если коротко, то она предлагает очень широкие возможности, но и усилий требуется больше. И да у нее есть аналог esp8266, к примеру http://www.st.com/en/wireless-connectivity/wi-fi.html?queryc... но я с ними не работал пока. Я бы сказал, что главное преимущество stm - широкий выбор камней очень разной мощности, но с похожей архитектурой.

раскрыть ветку 2
0

Ну, если esp8266 меньше года ходить будут и часто отваливаться, то перейду в туда же

раскрыть ветку 1
-4
Тьфу ты, а я уж грешным делом подумал, что наркоманы проклятые снова дурь какую то рекламируют. А тут такой облом((
-9

Я вот задумался - зачем это на Пикабу?  Сам специалист в этой области, с интересом читаю статьи специалистов и про термояд, и врачебное, и строительное, но тут недоумение зашкаливает, самому запостить подобное в голову не приходит. Эта статья для единиц и тут не нужна.

раскрыть ветку 8
+9

даже если статья помогла одному человеку - то она написана не зря :)

ещё комментарии
+4

А что тут постить надо? Котиков? Так есть специализированный сайт attack of the qute. Всякие истории жизни, так есть жж и кмп. Всякую муть по машинам, так есть драйв. Кулинари? Есть! Врачебную муть, так тоже есть! Чо постить то чтобы угодить твоему еличию? Че те надо? Не хочешь читать, не нравится? Закрой и листай дальше. Достала тема, бзай теги! Бабка блин со скамейки, лишь бы посрать в комментах.

ещё комментарии
ещё комментарии
Похожие посты
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: