106

Для начинающих 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 джампера, наш программатор к плате контроллера следующим образом:

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


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

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

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


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

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

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 используя внутренний кварц.

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

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

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

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

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

Все что нам необходимо, это добавить следующий код внутрь цикла 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, но впринципе это можно обойти потанцевав с бубном, хотя эта статья не об этом. Если все было сделано верно, то светодиод на плате замагает с заданной частотой.

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

TECHNO BROTHER

2.1K пост13.6K подписчиков

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины

Автор поста оценил этот комментарий

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

раскрыть ветку (1)
11
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
7
Автор поста оценил этот комментарий

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

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

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
10
Автор поста оценил этот комментарий

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

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


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

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

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


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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
1
Автор поста оценил этот комментарий
Да много где, я ведь учился по специальности "Информатика и вычислительная техника". У нас в основном все те, кто по специальности - в C# и веб пошли, это я с детства к железу тянусь.  Сейчас совмещаю магистратуру и работу на должности инженера-конструктора на заводе газоаналитической техники аж на целых пол ставки
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

=) ясно, у меня похожная ситуация, закончил Системное программирование, а работаю по java, но к железу все равно тянет

3
Автор поста оценил этот комментарий

Да, даже на отлично защитил, опять поступил и на работу по специальности устроился

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Молодец, а где работают люди которые кодят стм32 для диплома?

показать ответы
0
Автор поста оценил этот комментарий

Можешь подсказать, как прошить arduino nano?


Скачал Arduino IDE, есть исходные файлы, но чёт не идёт.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

https://alexgyver.ru/arduino-first/ вот есть очень интересный и простой гайд, как раз по nano

0
Автор поста оценил этот комментарий

А я бы почитала про регистры, если статья хороша будет..

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Постараюсь написать в обозримом будущем. Нужно только структурировать это все как то, что б влезло и было читаемо.

0
Автор поста оценил этот комментарий

а контроллер заказать нельзя? Или мб я неправильно интерпретирую слово "пилюля"

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Под словом пилюля имелась ввиду эта микросхема в целом, о которой статья, ее еще называют blue pill. Думаю НАКОНЕ говорит о том, что эта плата гораздо дешевле дискавери. Правда он не учитывает, что у дискавери программатор может работать отдельно от самой платы и их оба сжечь достаточно сложно, хотя...

0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А я и не предлагаю использовать только куб. Для тех же stm8 я использую iar и напрямую использую запись в GPIO -> ODR и тому подобное. Я, конечно мог бы рассказать в статье про регистры DRR, ODR, IDR и т.д. про push-pull open drain и прочую прелесть. Только вот цель увлечь людей, которые переходят с ардуино на stm32, показать что эти контроллеры можно программировать без боли, а те, кому будут интересны нюансы думаю пойдут дальше и будут разбираться, вполне возможно я и об этом напишу в будущем.

показать ответы
0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы