8-900-374-94-44
[email protected]
Slide Image
Меню

Stm32 визуальное программирование – STM32+Visual Studio / Habr

STM32+Visual Studio / Habr

Не так давно я вновь занялся поиском IDE для STM. Keil, IAR — это, конечно, прекрасно, но да простят меня любители данных сред, они ужасны. CooCox — единственная вещь, которая напоминает о том, что мы живем в 21 веке. Но CooCoх даже рядом не стоял с моей любимой средой разработки — Visual Studio. И мне удалось найти проект, который позволит мне работать с STM в VS.

Зовут сие чудо VisualGDB. Плагин платный, 64 еврика, имеет триалку в 30 дней. В принципе, по сравнению с другими проектами, достаточно дешево. Плюс к тому — скидка для студентов в размере 50%.

Процесс установки предельно прост. Далее-далее, скачивание нескольких тулзов для работы ST-Link и импорт списка контроллеров (интотал около 40 Мб) — и вуаля. Быстрый старт (создание и запуск проекта) описан тут.

На текущий момент я не писал на нем ничего сверхсложного, джентельменский «Hello, World» из мира МК — поморгал светодиодиком. Но первые впечатления таковы:

Плюсы:

1. Простота установки. 10 минут, прозрачно и интуитивно понятно. Проверялось на Win7 64x + VS2010 Ultimate + VS2012 Ultimate

2. Простота запуска. F5 деплоит прошивку, одновременно запуская отладчик. На ST-Link бряки работают
3. Наличие библиотек. По аналогии с CooCox подтягиваются обертки для переферии для указанного контроллера.

Минусы:
1. IntelliSense. Ну да, оно вроде как работает, но при этом скорее Sense, чем Intelli. Автозавершение не работает. Выборки по типу нет. Общее впечатление — достаточно кутцо, особенно если кодил час назад под десктоп на шарпе.
2. Нет конфигуратора библиотек. Обертки для железа и прочего подтягиваются в проект автоматом при его создании, в отличие от CooCox, в котором выбор того, что тебе действительно надо, реализован посредством диалога.
3. Нет примеров. Опять же, CooCox — почти все библиотеки снабжены семплами по использованию, тут этого не хватает.

Как итог — хотелось бы услышать мнение сообщества по данной разработке (особенно ввиду того, что есть триалка и можно спокойно пощупать). Для себя же — она чуть удобнее по сравнению с кокосом, и единственный вопрос — стоит ли это удобство 64 евро?..

habr.com

Прошиваем STM32 через ST-Link — DiMoon Electronics

Допустим, копая просторы Интернета, нашли мы очень интересное электронное устройство на микроконтроллере STM32, причем и все схемы, и прошивка прилагается. Но вот незадача, никогда мы не занимались загрузкой прошивки в STM32, раньше работали только с AVR-ками. Не беда! В этой статье мы разберемся в этом вопросе, ведь загружать готовую прошивку в STM32 не сложнее, чем в старые добрые AVR-ки, а может даже и проще! 😉 Итак, поехали! Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

Программатор

В предыдущей части мы познакомились с несколькими вариантами программатора

ST-Link. В данном примере в качестве программатора я буду использовать отладочную плату stm32f4discovery, просто потому, что она у меня есть. Для того, чтобы использовать эту отладочную плату в качестве программатора, нужно сделать 2 вещи:

  1. Снять перемычки, соединяющие линии программирования встроенного ST-Link-а с микроконтроллером, распаянным на плате
  2. С помощью гребенки, на которую выведена шина SWD, подключить сигнальные линии программатора к внешнему микроконтроллеру

На картинке, приведенной далее, показана распиновка разъема SWD:

На китайских отладочных платах с микроконтроллером stm32f103c8 имеется соответствующий разъем, через который можно загрузить прошивку в МК. Эти платы выглядят примерно так:

Пины на разъеме программирования подписаны как GND, CLK, DIO, 3V3. Соединение с программатором выполняется вот таким образом:

  • GND — GND
  • CLK — SWCLK
  • DIO — SWDIO

У меня макеты выглядят вот так:

В данном случае отладочная плата с stm32f103c8 припаяна к «решету», на котором соединена с остальными компонентами на обратной стороне проводом в изоляции. Таким же проводом выполнено подключение программатора к отладочной плате:

 

Софт

Перейдем теперь к программной составляющей. Нам понадобится драйвер для программатора и управляющая софтина, через через которую мы будем загружать прошивку в микроконтроллер. Для этого нам нужно на официальном сайте www.st.com скачать пакет STM32 ST-LINK utility. А что нужно сделать перед скачиванием чего-нибудь с www.st.com? Правильно! Надо у них зарегистрироваться!!!

[Шуточка про «нельзя просто так взять и скачать что-то с st.com»]

Кину ссылку на архив в конце статьи.

Итак, мы добыли архив с пакетом STM32 ST-LINK Utility. После установки подключаем программатор к ПК по USB и подключаем питание к отладочной плате. Если драйвера на программатор не установились автоматически, то идем в диспетчер устройств, там находим наш STM32 STLink, выбираем Обновить драйвер->Выполнить поиск на этом компьютере. После этого все должно заработать. Затем, из меню «Пуск» запускаем программу «STM32 ST-LINK Utility«:

Выглядит интерфейс ST-LINK Utility вот так:

Далее, нам необходимо произвести небольшие настройки. В меню выбираем Target->Settings…

Открывается вот такое окошко:

Выставляем настройки, как на скриншоте и нажимаем OK. После этого программатор автоматически подключится к прошиваемому микроконтроллеру. Пробежимся по кнопкам управления:

«Подключиться к микроконтроллеру» — выполняет подключение программатора к МК. При этом работа прошивки останавливается. После этого можно выполнять дальнейшие манипуляции с flash-памятью МК.

«Отключиться от микроконтроллера» — после того, как мы все сделали, нажимаем на эту кнопку и SL-Link отключается от МК, при этом запускается загруженная во flash-память прошивка.

«Очистить чип» — при нажатии на эту кнопку стирается вся flash-память микроконтроллера. Это необходимо делать перед загрузкой другой прошивки в МК.

Для того, чтобы прошить наш .hex или .bin файл в МК нужно сделать следующее. В меню выбираем Target->Programm…

После этого у нас открывается окошко выбора файла прошивки. Выбираем нужный нам файл, после чего появляется вот такое окно:

Здесь нам нужно нажать Start чтобы запустить процесс. После того, как прошивка была загружена в МК, нажимаем на кнопку «Отключиться от микроконтроллера«.

Те, кто раньше работал с микроконтроллерами AVR знают о такой вещи как фьюз-биты. Если в AVR-ках неправильно их выставить, то прошивка может работать некорректно. Для вас хорошая новость: в STM32 фьюз-битов нет! Достаточно просто залить в МК файл с управляющей программой и все будет работать.

Ну что ж, на этом, пожалуй, закончу, всем кто дочитал, спасибо за внимание 😉 🙂 Продолжение тут

Ссылки

Драйвер и софт для ST-Link: STM32 ST-LINK utility

dimoon.ru

Программирование ARM-контроллеров STM32 на ядре Cortex-M3. Часть 1. Установка MDK, создание проекта, основы Keil uVision

Сегодня мы начнём учиться программировать ARM-контроллеры STM32 на ядре Cortex-M3. Эти камни уже гораздо серьёзнее, чем восьмибитные пики и атмелы, поэтому для полного использования всех их возможностей без языка высокого уровня нам при программировании не обойтись (если мы конечно не мазохисты), но для лучшего понимания происходящего, начнём мы всё же с ассемблера, а потом уже подмешаем Си (тем более, что до полного использования возможностей этих камней нам пока как до Луны пешком).

Сред разработки под ARM-ы в настоящее время существует достаточно много, мы будем пользоваться одной из таких сред (кстати, одной из самых популярных), которая называется Keil uVision.

Первое, что нужно сделать — это скачать с официального сайта Keil и установить себе на компьютер пакет MDK-ARM. В настоящее время в его состав входит Keil uVision версии 5.11. Бесплатная версия, естественно, урезана и позволяет скомпилить максимум 32 Кбайта кода, но нам, простым радиохламерам, для любительских нужд этого более чем достаточно (ну, а если недостаточно, то, я думаю, все знают что делать).

Помимо пакета MDK-ARM нужно скачать и установить пакет для работы с контроллерами STM32, который называется Keil.STM32F1xx_DFP.1.0.5.pack. После установки этого пакета в среде uVision появится база данных контроллеров STM.

Всё, после выполнения этих двух действий можно приступать к разработке программ.

Итак, запускаем Keil uVision и выбираем пункт меню «New uVision Project…»

В появившемся окне проводника выбираем папку, в которой проект будет расположен, придумываем ему какое-нибудь имя и жмём кнопку «Сохранить».

После этого появится база различных контроллеров STM32, в которой нужно будет выбрать свой камень (в моём случае это stm32F103C8) и нажать «Ok».

Дальше нам предложат подключить к нашему проекту различные готовые куски кода и библиотеки драйверов. Достаточно поставить напротив соответствующего компонента галочку и он будет включен в наш проект. Это очень сильно облегчает жизнь программиста, но мы пока не будем этим пользоваться. Пока мы ставим перед собой цель разобраться как это всё работает и нас интересует проект на асме с чистого листа, поэтому не ставим никакие галочки, а просто жмём кнопку «OK».

Проект создан и окно uVision теперь выглядит вот так:

Слева расположен многофункциональный менеджер проекта, в котором в зависимости от выбранной внизу вкладки открывается либо структура проекта (вкладка Project), либо библиотека документации (вкладка Books), либо список используемых в проекте функций (вкладка Functions), либо шаблоны для часто используемых структур (вкладка Templates). Пользоваться менеджером просто и удобно, — когда мы выбираем камень, в библиотеку документации автоматически добавляются нужные книжки, список используемых в проекте функций также составляется автоматически. В области справа показывается содержимое открытых файлов проекта.

Добавим в наш проект asm-файл, в котором мы будем писать код. Щёлкаем по Source Group 1 правой кнопкой мыши и выбираем пункт Add New Item to Group ‘Source Group 1’…

После этого появится окошко, в котором нам предложат выбрать тип добавляемого файла и попросят этот файл как-нибудь назвать. Выбираем тип файла Asm File, назовём его, скажем, Proga1 и жмём кнопку Add. В менеджере проекта появляется наш файл. Если по нему два раза щёлкнуть мышкой — он откроется в окошке справа.

Пока этот файл пустой, но прежде чем писать в него какой-либо код, давайте вернёмся ещё раз к менеджеру проекта. Если щёлкнуть правой кнопкой мыши на Target1 и выбрать пункт меню Options for Target ‘Target1’, то откроется окошко с настройками нашего проекта. Кое-какие из этих настроек нам придётся подправить, а кое-какие просто интересно посмотреть.

На вкладке Device можно поменять модель контроллера.

На вкладке Target указаны начальные адреса и размеры используемых областей памяти. В случае с нашим STM32F103C8 мы имеем внутри кристалла 64 кБ (0x10000) flash-памяти (IROM1 — internal ROM), которая расположена по адресам, начиная с 0x08000000, а также 20 кБ (0x5000) ОЗУ (IRAM — internal RAM), которая расположена по адресам, начиная с 0x20000000. Эти данные устанавливаются автоматически при выборе контроллера, но если вдруг они случайно испортились, то их всегда можно подглядеть в доке на камень, открыв карту памяти (memory map).

На вкладке Output нужно не забыть поставить галочку напротив пункта Create HEX File. Здесь же можно выбрать отдельную папку для сохранения всяких вспомогательных файлов, создающихся при компиляции проекта. (кнопка Select Folder for Objects…)

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

На вкладке User можно настроить запуск различных пользовательских программ и скриптов в процессе построения проекта

Вкладки С/С++ и Asm предназначены для настройки процедур препроцессинга и ассемблирования и пока нам не интересны.

На вкладке Linker настраивается линковщик. Здесь возможны три варианта:

1) Ничего не менять. В этом случае стартовые адреса областей памяти (flash и RAM) будут взяты те, что прописаны на вкладке Linker напротив пунктов R/O Base, R/W Base. Кроме того, линковщик захочет чтобы точка входа была обозначена меткой Reset_Handler, а начало таблицы прерываний — меткой __Vectors. Это можно увидеть в командной строке линковщика (Linker Control String). Запись —entry Reset_Handler говорит о том, что метку Reset_Handler нужно считать точкой входа, а запись —first __Vectors — о том, что секцию с именем __Vectors нужно расположить в памяти первой. Соответственно, если наши названия не будут совпадать с теми, которые ожидает линковщик, — мы при компиляции получим ошибки и ворнинги. Кроме того, мы должны экспортировать эти метки, директивой EXPORT.

2) Поставить галочку напротив Use Memory Layout from Target Dialog. Если посмотреть в командную строку линковщика, то можно увидеть, что теперь набор команд выглядит по другому. В таком варианте линковщик будет использовать адреса областей памяти, указанные на вкладке Target. Причём он сначала на основе этих данных автоматически создаёт так-называемый scatter-файл (файл с расширением .sct), а потом компилит проект на основе scatter-файла. Если мы откроем scatter-файл в блокноте, то увидим, что теперь компилер хочет, чтобы секция, помещаемая в самое начало flash-памяти (там должна размещаться таблица векторов прерываний, но об этом позже) называлась RESET. Но в этом случае линковщику уже не нужно чтобы мы что-то куда-то экспортировали и не обязательно, чтобы метка, обозначающая точку входа, называлась именно Reset_Handle. Зато теперь нам нужно либо в программе обозначить точку входа директивой ENTRY, либо на вкладке Linker в окошке Misc controls добавить директиву —first, указав после неё имя нашей метки, отмечающей точку входа. Кроме того, теперь линковщик выдаёт при компиляции ворнинг из-за того, что хочет найти секции, обозначенные как InRoot$$Sections. Но у нас таких секций и нет, поэтому на этот ворнинг можно смело забить (а чтоб не надоедал — можно выключить его, добавив в строку Disable Warnings на вкладке Linker).

3) Ну и наконец, последний вариант — можно самому создать этот самый scatter-файл, который расскажет линковщику где какие области располагать. Для этого галочка Use Memory Layout from Target Dialog должна быть снята, а в папке с проектом нужно создать файл с раширением sct. Подробно о том, чем этот файл заполнять и как использовать описано в пятой главе мануала RealView Compilation Tools, а нам для простейшей программы хватит и вот такого:

Здесь ROM_Start_Address — адрес начала flash-памяти (в нашем случае 0x08000000), ROM_Size — размер flash-памяти (в нашем случае 0x10000), RAM_Start_Address — адрес начала оперативы нашего камня (в нашем случае 0x20000000), RAM_Size — размер оперативы (в нашем случае 0x10000).

Директива *.o (First_Section_Name, +First) в секции ER_IROM1 означает, что надо во всех объектных файлах поискать область с именем First_Section_Name и разместить её самой первой в секции ER_IROM1. Для контроллеров STM32 первой во flash-памяти должна быть область с адресом вершины стека и таблицей адресов прерываний.

Директива .ANY (+RO) означает, что далее в этой секции будут размещены все остальные области, помеченные в исходнике как READONLY, причём без разницы в каком порядке.

Директива .ANY (+RW +ZI) в секции RW_IRAM1 означает, что в этой секции будут размещены все области, помеченные в исходнике как READWRITE, причём без разницы в каком порядке.

После того, как файл создан и заполнен нужно на вкладке Linker, в строке Scatter File указать путь к этому файлу. Для удобства, справа есть кнопочка «…» при нажатии на которую откроется проводник и вам останется только выбрать этот файл в проводнике.

Обратите внимание, что после выбора scatter-файла набор команд в строке Linker control string изменится. Оттуда пропадут команды, размечающие области памяти и распределяющие различные секции по этим областям, поскольку теперь предполагается, что это сделано в scatter-файле.

На вкладке Debug нужно выбрать как вы будете отлаживать свой проект. Если у вас есть отладочная плата, то нужно поставить флажок, напротив пункта Use: и далее выбрать из выпадающего списка свою отладочную плату. Если отладочной платы у вас нет, то нужно поставить флажок напротив пункта Use Simulator. Это даст возможность пользоваться для отладки встроенным в IDE симулятором.

Последняя вкладка, Utilites, предназначена для настройки программирования чипа из IDE, и, соответственно, при отсутствии одного из поддерживаемых этой IDE программаторов также не сильно нам интересна.

Полную информацию по настройкам компилятора, ассемблера и прочим можно узнать, почитав литературу из раздела Tools Users Guide на вкладке Books в менеджере проекта, а с минимальными настройками мы только что разобрались. На этом пока всё, а в следующий раз давайте попробуем написать в созданном ранее asm-файле какую-нибудь маленькую программулинку.

  1. Часть 1. Установка MDK, создание проекта, основы Keil uVision
  2. Часть 2. Основы ассемблера, структура и синтаксис программы. Простейшая программа
  3. Часть 3. Карта памяти контроллеров STM32, доступ к отдельным битам памяти
  4. Часть 4. Регистры, старт и режимы работы контроллеров STM32
  5. Часть 5. Как залить прошивку в контроллер
  6. Часть 6. Настройка системы тактирования
  7. Часть 7. Работа с портами ввода-вывода
  8. Часть 8. Процедуры на ассемблере для STM32
  9. Часть 9. Система прерываний
  10. Часть 10. CMSIS, использование стандартных библиотек и функций
  11. Часть 11. Подключение и использование драйверов из пакета StdPeriph
  12. Часть 12. Работа с модулями USART и UART.
  13. Часть 13. Работа с модулями ADC
  14. Часть 14. Использование DMA
  15. Часть 15. Таймеры. Глава 1 — Введение. Простейшие таймеры
  16. Часть 15. Таймеры. Глава 2 — Таймеры общего назначения TIM9 — TIM14
  17. Приложение 1. Набор инструкций THUMB-2 и особенности их использования
  18. Приложение 2. Таблица векторов прерываний для семейств STM32F101, STM32F102, STM32F103
  19. Приложение 3. Драйвера и функции библиотеки StdPeriph

radiohlam.ru

Программирование STM32. Часть 1: Документация — DiMoon Electronics

Начало знакомства с любой вещью лучше всего начинать с инструкции. В некоторых случаях ясно все и так, в других — «хм, ничего не работает, похоже все-таки надо почитать инструкцию». Микроконтроллеры — устройства достаточно сложные, и без прочтения документации с ними уж точно ничего полезного не сделаешь, хотя…

В этой статье мы рассмотрим, как на официальном сайте производителя организована документация на микроконтроллеры STM32, в частности на серию STM32F1. Все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

После каких-нибудь AVR-ок, можно испытать легкий шок от количества разных PDF-ок на микроконтроллеры STM32. Куда глядеть первым делом? Как этим пользоваться? Что ваще происходит?? С первого взгляда ни чего не понятно. Поэтому я решил сделать небольшой обзор мира документации на эти замечательные микроконтроллеры. Особый упор буду делать на STM32F103C8T6, так как далее планирую написать несколько уроков по использованию именно этого камушка.

Основными документами на STM-ки являются следующие:

  1. Datasheet
  2. Reference manual
  3. Programming Manual
  4. Errata Sheet

Datasheet

Datasheet содержит в себе информацию о наличии определенной периферии в конкретном МК, цоколевке, электрических характеристиках и маркировке чипов для STM32F103x8 и STM32F103xB, то есть для вот этих, которые обведены красным прямоугольником:

Некисло, один даташит на 8 микроконтроллеров.

Основное в Datasheet-е

В первую очередь нужно обратить внимание на раздел 7. Ordering information scheme, в котором указано, то обозначает каждый символ в маркировке. Например, для STM32F103C8T6: корпус  LQFP-48, 64Кб flash-а, температурный диапазон –40 to 85 °C.

Далее 2.1 Device overview. В нем есть таблица, в которой сказано, какая периферия есть в конкретном микроконтроллере и в каком количестве:

Основное различие между микроконтроллерами из разных колонок в количестве ножек и объеме флеша, остальное все одинаково. Небольшое исключение составляет первая колонка версий Tx: в этих микроконтроллерах поменьше модулей SPI, I2C и USART-ов. Нумерация периферии идет с единицы: то есть, если в STM32F103Cx у нас 2 SPI, то они имеют имена SPI1 и SPI2, а в STM32F103Tx у нас только SPI1. Так как Datasheet у нас на микроконтроллеры STM32F103x8 и STM32F103xB, то эта таблица справедлива только для этих моделей. К примеру STM32F103C8 или STM32F103CB соответствуют этой таблице, а STM32F103C6 нет, для него есть отдельный даташит.

В разделе 2.2 Full compatibility throughout the family говорится о том, что устройства STM32F103xx являются программно, функционально и pin-to-pin (для одинаковых корпусов) совместимыми.

В reference manual-е есть разделение на следующие «виды» микроконтроллеров: STM32F103x4 и STM32F103x6 обозначены как low-density devices, STM32F103x8 и STM32F103xB как medium-density devices, STM32F103xC, STM32F103xD и STM32F103xE как high-density devices. В устройствах Low-density devices меньше Flash и RAM памяти, таймеров и периферийных устройств. High-density devices имеют больший объем Flash и RAM памяти, а так же имеют дополнительную периферию, такую как SDIO, FSMC, I2S и DAC, при этом оставаясь полностью совместимыми с другими представителями семейства STM32F103xx. То есть, если на каком-то этапе разработки стало ясно, что выбранного микроконтроллера не хватает для реализации всех возможностей, то можно безболезненно выбрать более навороченный камень без необходимости переписывать весь существующий софт, при этом, если новый камень будет в том же корпусе, то отпадает необходимость заново разводить печатную плату.

Reference manual

Поехали далее. Reference manual (справочное руководство) содержит подробное описание всей периферии, регистров, смещений, и так далее. Это основной документ, который используется при создании прошивки под микроконтроллер. Reference manual составлен для большой группы микроконтроллеров, в нашем случае для всех STM32F10xxx, а именно STM32F101xx, STM32F102xx, STM32F103xx и STM32F105xx/STM32F107xx. Но STM32F100xx не входят в этот RM, для них есть свой.

Главное в Reference manual-е

Как было сказано выше, в reference manual-е есть разделение на следующие «виды» микроконтроллеров: low-, medium-, high-density и connectivity
line. В 2.3 Glossary разъяснено, кто есть кто:

  • Low-density devices это STM32F101xx, STM32F102xx и STM32F103xx микроконтроллеры, у которых размер Flash-памяти находится между 16 и 32 Kbytes.
  • Medium-density devices это STM32F101xx, STM32F102xx and STM32F103xx, размер флеш-памяти между 64 и 128 Kbytes.
  • High-density devices это STM32F101xx и STM32F103xx, размер флеш-памяти между 256 и 512 Kbytes.
  • XL-density devices это STM32F101xx и STM32F103xx, размер флеш-памяти между 768 Kbytes и 1 Mbyte.
  • Connectivity line devices это микроконтроллеры STM32F105xx и STM32F107xx.

Наш STM32F103C8T6 является Medium-density device-ом. Это будет полезно знать при изучении периферии, например, есть отдельные разделы про RCC для Low-, medium-, high- and XL-density устройств, и Connectivity line devices.

Далее обратимся к Tabe 1. В ней отмечено, какой раздел применим к конкретному типу микроконтроллеров. У нас это Medium-density STM32F103xx:

Далее все просто: идет куча разделов, в каждом из которых содержится описание на конкретную периферию и ее регистры 🙂

Programming Manual

Programming Manual не является документом первой необходимости в самом начале знакомства с STM-ми, однако является очень важным при углубленном изучении этих микроконтроллеров. Он содержит информацию о процессорном ядре, системе команд и периферии ядра. Причем это не та же самая периферия, которая описана в Reference manual-е.  В нее входят:

  • System timer — системный таймер
  • Nested vectored interrupt controller — контроллер приоритетных прерываний
  • System control block
  • Memory protection unit

Как только мы начнем знакомится с прерываниями в STM32, нам понадобится раздел 4.3 Nested vectored interrupt controller (NVIC). Ну и системный таймер является очень прикольной вещью, который будет полезен в каких-нибудь RTOS или для создания программных таймеров.

Errata Sheet

Errata Sheet — сборник всех известных аппаратных глюков и косяков микроконтроллеров и советов, как их обойти. Довольно веселый документ 🙂 Перед использованием какой-либо периферии, советую суда заглянуть. Это может помочь сократить количество потерянных нервных клеток при отладке своей чудо-прошивки, которая ни как не хочет работать 🙂

Продолжение тут: http://dimoon.ru/obuchalka/stm32f1/uroki-stm32f103-chast-2-iar-cmsis.html

Ссылки:

Datasheet: https://www.st.com/resource/en/datasheet/stm32f103c8.pdf

Reference manual: https://www.st.com/resource/en/reference_manual/cd00171190.pdf

Programming manual: https://www.st.com/resource/en/programming_manual/cd00228163.pdf

Errata sheet: https://www.st.com/resource/en/errata_sheet/cd00190234.pdf

dimoon.ru

STM32. Уроки по программированию STM32F4. Урок № 0. Вводный.

STM32. Уроки по программированию STM32F4. Урок № 0. Вводный. Описание. Установка IDE.

12 November 15 г. Автор — admin

 

Вместо предисловия

 

Здравствуйте! Сегодня я начал публикацию цикла статей по программированию STM32F4. Курс будет выглядеть как обучающие видеоуроки с кратким описанием и исходными кодами уроков.

 

Предисловие

 

Примерно с весны 2015 года, после долгих внутренних противоречий души, я решил начать программировать STM32F4. Почему сразу STM32F4? Данная линейка является если не флагманом МК семейства STM32, то однозначно ярким, серьезным и не дорогим решением. Паябельный корпус даже в домашних условиях и наличие огромного количества возможностей, как со стороны переферии так и АЛУ.  STM32F4 — это Cortex-M4, который является прямым наследником Cortex-M3(STM32- L1, F1, F2) и отличается от него главным образом ядром с наличием DSP (цифрового сигнального процессора) и FPU (модуля операций с плавающей запятой).

 

Чем это курс интересен?

 

В рунете много различных курсов по программированию STM32. Заказчиком моды на эту тему может служить сообщество EasyElectronics.ru. Очень много полезной инфы можно оттуда подчерпнуть. Форум данного ресурса тоже весьма полезен. Сам очень много интересного узнал именно с данного ресурса. Данный курс будет интересен тем, кто как и я начинает изучать программирование STM32F4 не с нуля, а с базы 8-ми битных МК. Буду описывать своими мысли и наработки по изучению STM32F4 и его программирования.

 

Чем будем пользоваться?

 

В этой статье описан «STM32CubeMX — продвинутый генератор проектов для STM32». Именно им и будем пользоваться. HAL от ST  — это библиотека. Очень схожа с SPL. Поэтому примеры написанные на SPL легко портируются на HAL. Хотя есть и приличные различия в самих функциях. STM32Cube позволяет генерировать готовый проект с функциями инициализации выбранной переферии для некоторых комерческих и не только IDE. Это IAR, Keil, TrueStudio, System Workbench for STM32 (SW4STM32). Проекты для IAR, Keil генерируюся под ключ, а вот с SW4STM32 не все так ровно. Но не стоит отчаиваться. Для себя я выбрал System Workbench for STM32 (SW4STM32). И все уроки будут построены на этой IDE.

 

Практика. Начало. Установка STM32CubeMX.

 

Идем на офф. сайт ST, на страницу STM32CubeMX STM32Cube initialization code generator (UM1718) и скачиваем софт STM32CubeMX. Установка не вызывает проблем. После установки необходимо установить необхоимые библиотеки под разные типы ядер. Это делается во вкладке Help — > Install New Libraries ставим галочку на необходимом пункте Firmware Packege For Family STM32F4 и нажимаем кнопку Install Now. После процесса скачивания и распаковывания, STM32CubeMX готов к работе.

 

Практика. Продолжение. Установка System Workbench for STM32 (SW4STM32).

 

Тут тоже ничего сверестественного. Идем на сайт, регистрируемся, скачиваем дистрибутив. Устанавливаем. Все достаточно банально. У меня данный дистрибутв: Latest Windows 7 32 bit installer (Version v1.3, updated on Friday, July 24, 2015 at 12:52:28 CEST), чем он отличается от версии 64 bit мне не известно. Но они должны быть не критическими. У меня данная версия встала как на XP SP3, так и на 8.1

 

Практика. Окончание. Импорт проекта куба в SW4STM32.

 

На ютьюбе есть познавательный ролик по импорту проекта. Правильной дорогой пойдем и мы. Видеоурок к посту смотри ниже:

 

Уроки по программированию STM32F4. Урок № 0. Вводный. Описание. Установка IDE. ВИДЕО.

 

 

 

З.Ы. коментарии, вопросы и предложения складываем тут

druid.su

STM32. Курс по программированию | CUSTOMELECTRONICS.RU

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

Почему STM32?

Сегодня уже все знаю о существовании линейки этих контроллеров и профессиональные разработчики давно и активно их используют. Характеристики впечатляют: рабочие частоты, объем памяти, набор периферии — всего гораздо больше чем, например, в привычных 8ми битных AVR-микроконтроллерах и все это разработчик получает по вполне демократичной цене. Цифра «32» в названии говорит о разрядности контроллеров. То есть за один раз они могут обрабатывать 32х битные числа. А это, в сравнении с 8ми битными контроллера, теоретически должно дать нам прирост производительности сразу в четыре раза!
Отдельно необходимо отметить, что ST Microelectronics это очень крупная компания у которой есть ресурсы на разработку очень подробной документации, вспомогательного программного обеспечения, отладочных средств и т.д. Вы помните хорошую, популярную плату от Atmel и программаторы по доступной цене? Их фактически нет! А для STM32 все это выпускается огромными тиражами и продается по минимальной цене, чтобы как можно быстрее завоевать рынок.

Минусы

Все они являются продолжением достоинств.
Количество и сложность периферии приводит к тому что даже для очень простых задач приходится производить большой объем работы с самыми не очевидными настройками.
В реальных условиях для упрощения работы необходимо использовать библиотеки, драйверы и т.д., а это влечет за собой снижения оптимальности конечной программы. То есть итоговый прирост производительности не так велик, как может показаться на первый взгляд, а память расходуется очень быстро.
Высокий уровень абстракции скрывает истинную картину вещей и при возникновении проблем их становится достаточно трудно найти.
Большое количество разных отладочных плат и программ затрудняет поиски решения проблем так как у все используют свой индивидуальный набор средств.

Программное и аппаратное обеспечение

В нашем курсе мы будем использовать только бесплатное программное обеспечение, а именно сочетание CubeMX и Keil uVision. Также потребуется программа STLink Utility. В качестве аппаратного обеспечения будет использоваться готовая отладочная плата Nucleo-64 STM32F030.

Nucleo-64 STM32F030

Подробнее о подготовке рабочего места мы поговорим чуть позже в первой же статье курса.

Статьи курса

  1. Подготовка к работе
  2. Первый проект
  3. Подключение кнопки
  4. Прерывания
  5. Передача данных через UART (работа с COM-портом)
  6. Работа с АЦП через DMA

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

www.customelectronics.ru

Программирование STM32

Курс поможет овладеть навыками программирования микроконтроллеров с нуля. В качестве примера для работы взята отладочная плата STM32F3Discovery с установленным микроконтроллером STM32F303VCT6.

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

Введение в программирование микроконтроллеров. Выбор аппаратных средств. Первое знакомство с отладочной платой.

Знакомство с фирмой-производителем ST Microelectronics. Установка программной среды разработки IAR.

Установка программы-конфигуратора STM32Cube. Установка программы работы с памятью ST Visual Programmer.

Создание конфигурации проекта в STM32Cube и генерация проекта для IAR Embedded Workbench.

Считывание и загрузка кода программы во FLASH-память микроконтроллера с помощью ST Visual Programmer. Первое знакомство с отладочной платой.

Понятие портов и линий ввода-вывода. Загрузка программы в отладочную плату средствами среды разработки IAR. Включение светодиодов на плате.

Реализация «бегущего огня», а также переключения светодиодов по кнопке.

Сохранение энергонезависимых данных во FLASH-память микроконтроллера на примере запоминания светодиода, на котором закончилось переключение бегущего огня перед отключением питания

Использование периферийного модуля таймера-счетчика для формирования задержки.

Использование прерывания по переполнению таймера-счетчика TIM6 для реализации задержки.

Использование различных прерываний и их приоритетов.

Задание тактовой частоты ядра и периферийных модулей.

Конфигурация и использование широтно-импульсной модуляции на каналах таймера TIM1 с различной частотой.

Использование независимого и системного сторожевого таймера. Использование регистра окна.

Использование аналого-цифрового преобразователя и внутреннего датчика температуры.

Использование нескольких каналов единого модуля АЦП.

Использование прямого доступа к памяти для получения результатов аналого-цифрового преобразования.

Использование таймера для синхронизации запусков АЦП с сохранением результатов через прямой доступ к памяти.

Использование цифро-аналогового преобразователя для генерации треугольного сигнала, сигнала шума или постоянного аналогового значения.

Использование цифро-аналогового преобразователя для генерации сигнала произвольной формы.


prog-cpp.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *