Для начинающих 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 дальше.

TECHNO BROTHER

1.6K постов12.4K подписчика

Добавить пост

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

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

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

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

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

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

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

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

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

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

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

раскрыть ветку (4)
1
DELETED
Автор поста оценил этот комментарий
Ты можешь своих библиотек наклепать

С радостью бы глянул на самописные USB библиотеки на голом CMSIS.

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

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

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

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

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

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

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

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

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

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

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

Да, но все-таки:
1) уже есть программатор. Не надо отдельно заказывать, подключать, переживать, что где-то отошел проводок и тд и тп. То есть новичок понимает, что если не работает, он точно накосячил где-то в коде, а не в железке, потому что железка - "монолитная" от производителя. Справедливости ради скажу, что у меня и железка один раз подкачала, но она была старая уже, ее видимо кто-то уделал до меня.
2) уже "есть чем моргнуть", немало всякой прикольной периферии. Для обучения без паяльника и монтажных плат самое то.

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

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

Отладочные платы и называются отладочными потому что они годятся только для прототипирования. Периферия и встроенный программатор это, конечно, замечательно, но никакого надёжного устройства для длительного использования вы на нём не построите.

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

Как понимаю, речь об обучении. На отладчиках устройства не собирают.

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

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

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

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

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

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

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

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

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

На жаргоне и на али раньше они назывались blue pill за цвет.
Щас что-то так не ищутся.

Иллюстрация к комментарию
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку