Для начинающих 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, 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, Arduino, Stm32, Гайд, Длиннопост

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

Для начинающих Stm32f103C8T6 Stm32f103, 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, 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, Arduino, Stm32, Гайд, Длиннопост

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

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

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

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

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

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

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

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

Для начинающих Stm32f103C8T6 Stm32f103, 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, Arduino, Stm32, Гайд, Длиннопост

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

TECHNO BROTHER

1.8K поста12.8K подписчиков

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

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

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