Освоение азов программирования, на архитектуре Stm32 Cortex

Всё о ЧПУ (CNC). Компоненты, станки, программы.
Аватара пользователя
Автор темы
T-Duke

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #1 T-Duke » 25 дек 2016, 21:57

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

Как я уже говорил раньше, микроконтроллеры это маленькие компьютеры очень часто лишенные привычных средств вывода. Для изучения программирования контроллеров нужно забыть вывод на экран, ввод с клавиатуры и файловые операции. Остается голое железо - Bare Metall :crazy: Hello world на МК это зажигание светодиода. Поэтому и займемся этим. Кто хочет обсуждать программирование под MinGW, CygWin визуалы и прочу хрень - пожалуйста в свои темы. Здесь будем людей учить делать первые шаги на контроллерах, а точнее на плате дискавери.

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

Для программирования МК в среде разработки требуется настроить проект, достать и настроить нужные библиотеки и все собрать в кучу. Это все неинтересно, отправил Вальтеру уже собранный архив, заточенный под его плату. В нем уже можно будет работать.

Итак первая программа - включение светодиодов на плате. Их там аж 2 штуки и прицеплены они на порт G на 13,14-ю ножки. Можно включить любой из них, или оба.

В пустом проекте уже есть процедура main в нее добавим следующий код:

Код: Выделить всё

GPIO_InitTypeDef GPIO_InitStructure; //пустая структура настройки порта

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); //включим тактирование порта GPIOG
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
 
  GPIO_Init(GPIOG, &GPIO_InitStructure); //эта процедура, на основании заполненной выше структуры, настраивает нужные выводы требуемого порта.
 
  GPIOG->ODR |= GPIO_Pin_14;



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

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

В программе заполняются 5 полей структуры инициализации порта, указываются ножки которые настраиваем, режим работы, скорость порта и подтяжку резисторами к одной из шин питания. Затем командой GPIO_Init собственно и настраивается на работу, конкретный нужный нам порт. Это GPIOG. До этого момента у нас были только настроечные телодвижения. А вот теперь порт готов к выводу в него информации.

Строка: GPIOG->ODR |= GPIO_Pin_14; собственно и выводит на 14-ю ножку порта G 1-цу, так как к этой ножке подключен светодиод, то появление лог единицы на ножке, приводит к подаче на диод напряжения 3.3В и светодиод загорается. В нашем конкретном случае красным цветом.

Финальный вариант кода проекта выглядит так:
Освоение азов программирования, на архитектуре Stm32 Cortex - c.png


Теперь остается только нашему Вальтеру все попробовать.


Да, Игорь, или Рома, пожалуйста создайте новую ветку "Проекты на МК" в уголке самодельщика. А то в Разное не очень хорошо отправлять эту тему.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
Сукин кот®

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #2 Сукин кот® » 25 дек 2016, 22:38

Ужас какой... Максимум, на что я способен, это в извращенной форме переписать под себя Makefile и Config, да и то, с третьей попытки. Вроде, с паяльником дружу аж с 1972 года, да и ассемблер помню (а также машинные коды и перфокарты). А вот с контроллерами пока никак - проще спаять схему на логике, чем запрограммировать. Старею, наверное.

Аватара пользователя
Автор темы
T-Duke

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #3 T-Duke » 25 дек 2016, 22:42

Не, собирать на рассыпухе это для очень простых проектов. Чуть посложнее и приехали, увязнем в перепайке при модификациях. Программирование тем и сильно, что оно адаптивно без аппаратной перестройки схемы.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
chkmatulla

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #4 chkmatulla » 25 дек 2016, 22:44

Вместе стареть будем. Потом. А пока давай, приобщаться к модным веяниям.
Lord, спасибо большое. Буду стараться.
Бли-и-н... Надо на лэптоп ставить IAR, а то надоело уже верёвки перебрасывать... Я щась !
Секс не предлагать. Могу согласиться.

Аватара пользователя
Автор темы
T-Duke

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #5 T-Duke » 25 дек 2016, 22:45

Дык вставляй текст, чтобы было как на картинке и проверяй. Должен у тебя красный диод загореться.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
chkmatulla

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #6 chkmatulla » 25 дек 2016, 22:47

Да куда он денется ? Загорится. Тут важнее, чтобы я понял.
Секс не предлагать. Могу согласиться.

Аватара пользователя
Автор темы
T-Duke

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #7 T-Duke » 25 дек 2016, 22:47

Ты проверь, а потом понимать будем.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
chkmatulla

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #8 chkmatulla » 25 дек 2016, 22:50

Сейчас программу на нубук (С) поставлю.
Секс не предлагать. Могу согласиться.

Малорос

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #9 Малорос » 25 дек 2016, 23:50

Добрый вечер всем! :)
А какую вы плату c STM32 взяли для экспериментов?

Аватара пользователя
Автор темы
T-Duke

Освоение азов программирования, на архитектуре Stm32 Cortex

Сообщение #10 T-Duke » 26 дек 2016, 00:03

Такую: http://www.st.com/en/evaluation-tools/3 ... overy.html

Хотя плата не принципиальна, но именно эти у нас обоих оказались в наличии.
Technology is insignificant comparing to the power of the Force.


Вернуться в «Системы ЧПУ»