РадиоКот :: Микроконтроллеры. Начало. STM
Софт. Программы для компьютера. Для пк

Только полноправные пользователи могут оставлять комментарии. TM Feed Хабрахабр Geektimes Тостер Мой круг Фрилансим. Хабрахабр Публикации Пользователи Хабы Компании Песочница. Данная статья является первой в планируемом цикле статей по изучению программирования микроконтроллеров. Изучая различные материалы я отметил, что практически все они начинаются с того, что новичку предлагается скачать или использовать идущую со средой разработки библиотеку для работы с периферийными устройствами и использовать ее для написания своей первой программы обычно мигание светодиодом.

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

Возможно, она может заинтересовать и тех, кто вдоволь наигрался с Arduino и хочет получить в свои руки все аппаратные возможности железа. Выбор микроконтроллера Многие могут сказать, что начинать изучение микроконтроллеров лучше с AVR, PIC, или чего-то еще.

Я знаю достаточно примеров, когда люди изучив Cortex-M, программировали AVR, ARM7 и т. Если перед вами стоит определенная задача, в интернете достаточно много информации со сравнением различных типов микроконтроллеров и решаемых с их помощью задач. На хабре этот вопрос тоже поднимался, например тут.

Будем считать, что с типом микроконтроллера мы разобрались. Но на рынке представлен огромнейший спектр различных модификаций от разных производителей. Они отличаются по множеству параметров — от размера флеш памяти до количества аналоговых входов. Для каждой задачи выбор стоит производить индивидуально. Ни каких общих рекомендаций тут нет и быть не может. Отмечу лишь, что стоит начинать изучение с МК производителей имеющих как можно больший ассортимент. Тогда, при выборе МК для определенной задачи достаточно велик шанс, что из представленного ассортимента вам что-нибудь да подойдет.

Я остановил свой выбор на STM32 хотя и считаю, что лучше начинать изучение с МК от TexasInstruments — очень грамотно составлена документация , потому что они широко распространены среди российских разработчиков электроники. При возникновении проблем и вопросов вы сможете без труда найти решения на форумах. Еще одним плюсом является богатый выбор демонстрационных плат как от производителя, так и от сторонних организаций. К сожалению, для начала программирования МК не достаточно одного лишь ПК.

Придется где-то раздобыть демонстрационную плату и программатор. Хотя это и уменьшает конкуренцию на рынке труда. Сам я использую демонстрационную плату STMG-EVAL и программатор J-Link PRO. Но для начала, будет вполне достаточно STM32F4DISCOVERY , которую можно купить без особых проблем за небольшую сумму.

Все примеры будут именно для отладочной платы STM32F4DISCOVERY. На данном этапе нам будет совершенно не важно, что этой плате стоит МК на базе ядра Cortex-M4. В ближайшее время мы не будем использовать его особенности и преимущества над Cortex-M3. А как там будет дальше — посмотрим. В изложении материала я постараюсь максимально подробно описывать почему мы делаем именно так, а не иначе.

Надеюсь ни у кого не возникнет проблем с переносом примеров на другое железо. Среда разработки Как уже неоднократно упоминалось, для ARM микроконтроллеров существует достаточное количество сред разработки, как платных так и не очень. И снова хочется опустить полемику по этому поводу. Я использую IAR Embedded Workbench for ARM 6. Все примеры будут именно в этой среде. Если вам по душе или в вашей организации используется что-то другое Keil, Eclipse, CCS, CooCoc и т.

На особенности, связанные именно со средой разработки, я буду обращать отдельное внимание. Почему платная среда разработки? Возможно, кто-то будет не совсем доволен тем, что я предлагаю использовать платную среду разработки, но в IAR есть возможность получить временную лицензию без ограничения функционала, либо безлимитную лицензию с ограничением по размеру кода 32КБ для МК это очень много.

Помимо этого, сразу замечу, что для некоторых МК не существует ых сред разработки. И к сожалению эти МК в некоторых областях незаменимы. Для тех, кто увидел слово Simulator Теоретически, IAR позволяет отлаживать программы с использованием симулятора.

Но я ни разу на практике не встречал его использования. Пример В качестве примера можно привести блок UART, который предназначен для приема и передачи данных от МК внешним устройствам. От ядра необходимо лишь сконфигурировать блок и отдать ему данные для передачи. После этого ядро может дальше выполнять инструкции.

На плечи же периферийного блока ложится управление соответствующим выводом МК для передачи данных в соответствии с протоколом. STM32 , Cortex-M , микроконтроллеры. Разработка веб-сайтов 4,1k авторов , 9,6k публикаций. Программирование 2,9k авторов , 6,6k публикаций. Анализ и проектирование систем авторов , публикаций. Информационная безопасность 2,4k авторов , 6,4k публикаций. Алгоритмы 1,3k авторов , 2,4k публикаций. NoSQL авторов , публикаций. Open source 1k авторов , 2,3k публикаций. Разработка игр 1,3k авторов , 2,9k публикаций. Java 1,1k авторов , 2,2k публикаций. Разработка мобильных приложений 1k авторов , 2,8k публикаций.

Генерируем и воспроизводим звук. Регистры у F4xx и F1xx отличаются, у тех же GPIO, допустим. Настраиваются по-разному, у F1xx режим с настройками упиханы в общий регистр, у F4xx — отдельные регистры. Поэтому я бы не стал говорить что не важно, что юзать — F1xx или F4xx, у начинающих запросто могут вылезти проблемы, оттого, что, скажем, они пишут код как для F1xx, пытаются его использовать на F4xx, но не включили мэпинг периферии. Магические числа в коде — это адЪ.

Хоть бы константы именованные юзали. Для этого я специально указал, что лучше использовать F2 или F4: F2 сильно отличается от F1, а вот последующие уже очень похожи. К сожалению, невозможно было выбрать один универсальный МК. Также не вижу смысла писать обязательные требования по какой-то определенной отладочной плате.

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

В дальнейшем, конечно же, в своих постах я уйду от прямого ковыряния в регистрах и буду пользоваться библиотекой. Именно так код не должен выглядеть ни при каких условиях. Во-вторых, каким образом ваш код больше стимулирует к изучению документации, чем код с использованием дефайнов от ST? Я считаю, что на первых порах важно помнить про то, что мы работаем со спецрегистрами. Магические числа, лично мне, в этом помогают. До знакомства с библиотеками я делал немного иначе: Так вот, используя определения, люди часто забывают о том, что на самом деле происходит с их коде.

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

Программирование stm32 на си

По этому поводу написано миллионы страниц текста. Нужно немного разобраться с библиотекой, покопаться в примерах и т. Если пытаться все делать сразу — будет каша в голове ИМХО. Я предпочитаю начать с документов. Я стараюсь описать принцип программирования МК на примре STM32 , а не описать библиотеку и возможности STM У TI, например, библиотека устроена совершенно иначе.

Вот пример который компилируется но не cработает: Ещё ощутимо различается настройка AF in, т. Впрочем, бывают варианты с опечатками в документации, или даже с принципиально неправильно работающей перифирией, так что когда не работает что-то, что в принципе должно, есть хороший повод заглянуть в errata по МК так я узнал что у lpc надо делать дополнительные танцы с бубном для прошивки флеша прямо из МК. Пример был от TI или шел со средой разработки? Иногда примеры для среды разработки делают совершенно другие люди. От TI, если мне не изменяет память.

А как же Trace или банальный просмотр спецрегистров с описанием битовых полей? У меня, наверно, было тяжелое детство, приходилось дебажить раннюю загрузку linux миганиями светодиода, так что я вполне могу пережить без этих вот новомодных отладчиков а по сути — я никогда профессионально разработкой ПО в windows не занимался, потому нет привычки ко всяким армовым иде. Вообще есть openocd и gdb, их всегда хватает для отладки. Gdb вообще очень функционален и удобен, если к нему попривыкнуть. А компилировать проект из Makefile — это вообще на порядок очевиднее чем IDE должно быть, потому что видно , что происходит.

Скажите гуру, как лучше писать для контроллеров: Гуру я себя не называл… В данном случае разницы нет. Но вот когда дойдем до считывания данных из регистров — вот тогда затронем этот вопрос. Поэтому все примеры для Discovery. Да и клонов от дружелюбных нам соседей предостаточно. У меня брат один такой уже умер от прошивки 4. Как говорится, работает — не трогай. Отдал убитый клон старшим товарищам, может и вылечат. Вроде там надо слово GDBFULL обязательно писать большими буквами. Segger J-Link очень хорошо подходит к дешовым платам типа LC Technology по 7.

Недавно купил stm32f4 discovery — решил поиграться. Цель написать приложения — без использования IDE, только make и command-line tools для прошивки st-util — без использования библиотек, будь то стандартная от stm или libopencm3 — сделать приложение с минимум ассемблера, но при этом эффективно. Все дело должно работать на Linux Arch пришлось несколько пакетов переместить из AUR в [community].

В общем после курения мануалов и интернетов получилась вот такое вот минималистическое приложение конечно же диодиком моргать github. Какой смысл не использовать CMSIS для STM32 проще взять и выдрать её из SPL , которая минималистична и даёт готовые define для адресов периферии? Опять же это не спасет от, например, неправильной задержки после инициализации RCC которая в разных версиях для разных шин — разная. Или от попадания на какой-нибудь баг из errata. И только после этого брать и работать с библиотеками. Постойте, но текст вроде не для тех, кто хочет научиться программировать?

Он для тех, кто хочет пощупать новую архитектуру. Думаю, читатель уже должен представлять, что такое библиотека и как с ней работать, а уж заглянуть в файл с дефайнами и подавно. Да, в рамках обучения это полезно. У вас, например, нет важных хэндлеров в таблице векторов прерываний NMI, HardFault, MemManage, BusFault, UsageFault, SVC, DebugMon, PendSV. В процессе отладки stlink2 умеет сваливаться в HardFault, а у вас undefined behavior, т. Пока исполнительных устройств нет, может и ничего, но при их наличии — довольно неприятно.

Обучение это прежде всего формирование понимания и правильных навыков. Потом, в процессе реальной работы, когда важна скорость выдачи продукта, можно обвешиваться какими угодно IDE и бирюльками. Но на данном этапе, я считаю, только так…. В нормальной IDE вы можете использовать make для сборки, написать руками скрипт для линковщика и т.

Использование визардов IDE на начальном этапе без понимания того, что они генерируют — зло. Показываемое в статье повсеместное использование магических чисел не является правильным навыком. Аргумент автора про EnableLED1 считаю несостоятельным. Если студент так усваивает информацию, то он также будет тупо копировать адреса из одного исходника в другой без какого-либо понимания. Я вообще считаю, что обучаться Си лучше на простом контроллере, например, AVR.

Ассемблер там простой, спецрегистров немного, периферии — тоже.

С чего начать изучение программирования под STM32?

Э-э… Вы отвечаете googol, но он не автор статьи. Си лучше изучить на обычном компе, а на контроллеры идти с уже устоявшимися знаниями языка. Запороть контроллер случайной опечаткой в коде как два пальца об асфальт… Что до магических чисел.

Программирование stm32 на си

Я, например, как адепт старой школы, на автопилоте всем константам прописываю мнемонические названия. В данном случае надо всё-таки определиться, учим правильным навыкам или всё-таки программированию микроконтроллеров. В каждом случае фокусироваться надо на своём. Хотя в моём комментарии не было ничего про IDE. Это не старая школа, это — обычный, но необходимый, навык. Присутствие магических чисел в коде — очень серьезный code smell. Убить контроллер опечаткой — довольно сложно.

Обычно на критичных регистрах есть защита например, перед изменением записать пару магических констант в спецрегистр, и изменять в течении не более чем N тактов. Я приверженец мнения, что Си можно изучить только работая, как минимум с памятью, на низком уровне. Будет это на x86, x51, AVR, PIC, ARM — не суть важно. На x86, разве что, порог вхождения ниже за счёт легкой работы с libc. Правильные навыки, что там, что там по большей части одинаковы.

Если, конечно, не замахиваться на какой-нибудь MISRA C, который ещё ужесточает ограничения. IDE я, конечно, для красного словца приплёл… Прямо убить контроллер — это, конечно, надо постараться.

Программирование stm32 на си

А вот из-за набитой с опечаткой чужой программки, как-то пришлось полдня потом промудохаться, чтобы привести контроллер в чувство. Было дело… Он был уже запаян на плату…. Лично моё отношение к подобным IDE сугубо отрицательное. Правда, я не занимаюсь микроконроллерами профессионально. Для меня это хобби… И статья увы не моя…. Извиняюсь, что-то у меня было минутное помутнение: Обычно приводят аргумент с интеграцией с инструментами сквозного проектирования, типа Altium и иже сними… Когда например, port mappings может генерироваться в зависимости от разводки платы.

Моя информация, вероятно, устарела, но, вроде, в Keil uVision могу путать с IAR, т. Про всякие фичи типа элементарного рефакторинга и говорить нечего. Ага, так вот кому надо сказать за перемещение arm-none-eabi-gcc и иже с ним в community repo… Спасибо…. Я бы не рекомендовал напрямую работать с регистрами, особенно для новичков.

У STM есть неплохая прослойка в виде библиотек, и читаемость кода выше, и портирование кода на другие версии процессора будет проще. Конечно полезно знать, что делает библиотечная функция, но совсем не обязательно это помнить — всегда можно посмотреть, открыв ее код или define. Ох, помню как я втыкал в архитектуру F1, а потом заказал себе F4, и долго пытался понять разницу работы и победить компилятор: Потом прозрел и читаю документацию можно сказать прямо в заголовках.

Уже объяснил паре товарищей как работать с кокосом и программированием под микроконтроллеры. Один радиолюбитель был, какие же у него были азартные глаза когда он понял что он делает и что может сделать: А обучение мое довольно жестокое, грызи, грызи, грызи. Вот это глянь и пойми почему так, а не этак. Так что я за либы от stm как никак а переделки малы, и можно даже окружиться в своих либах дефайнами по платформе что бы компилилось и под f1 и под f4.

Конечно не универсальное решение, но вполне сгодится для общих задач. Адрес регистра можно определить тем же методом, что описан выше. Сейчас Вчера Неделя Пиратство и четыре валюты 1,4k 6. Увольнение — это маленькая смерть. Как сохранить ценного специалиста решившего уволиться?

Вы ни черта не понимаете в цветах 37,6k Интересные публикации Хабрахабр Geektimes. Lockheed Martin строит прототип обитаемого модуля для глубокого космоса GT. Приглашаем на Tarantool Meetup 10 августа. Обзор интраоральных стоматологических 3D-сканеров GT. Новые механические клавиатуры HyperX Alloy Elite и Alloy FPS Pro: Национальная инновационная система США GT. Разделы Публикации Хабы Компании Пользователи Песочница.

Информация О сайте Правила Помощь Соглашение Конфиденциальность. Услуги Реклама Тарифы Контент Семинары.

Опубликовано в рубрике Realtek pcie gbe
Twitter Delicious Facebook Digg Stumbleupon Favorites More
  • Прикрепленное видео

Все права защищены. © 2001 toozza.ru