Тарифы Услуги Сим-карты

Iar создание проекта. Создание шаблонов проекта IAR EWARM (и не только для ARM). Что имеет смысл переделать в контроллере

Читая местные обзоры, уже не раз подумывал о покупке паяльника с жалом T12. Давно хотелось чего-то портативного с одной стороны, достаточно мощного с другой стороны, и, разумеется, нормально поддерживающего температуру.
У меня есть относительно много паяльников, купленных в разные времена и под разные задачи:

Есть совсем древние ЭПСН-40 и «москабель» 90Вт, чуть более новый ЭМП-100 (топорик), совсем новый китайский TLW 500W. Последние два особенно хорошо сохраняют температуру (даже при пайке медных труб), но вот паять ими микросхемы не очень удобно:). Попытка использования ZD-80 (пистолетик с кнопкой) не вышла - ни мощности, ни нормального поддержания температуры. Прочая «электронная» мелочь типа Antex cs18/xs25 годится только для совсем мелочей, да и встроенной регулировки не имеет. Лет 15 назад пользовался den-on"овским ss-8200, но жала там совсем малюсенькие, термодатчик далеко и градиент температуры огромен - несмотря на заявленные 80W, на жале по ощущениям и трети не будет.
В качестве стационарного варианта я уж лет 10 использую Lukey 868 (это практически 702, только нагреватель керамический и еще какие-то мелочи). Но портативности в ней нет никакой, с собой в карман или мелкую сумку никак не взять.
Т.к. на момент покупки я еще не был уверен «а нужно ли мне оно», был взят минимальный бюджетный вариант с K-жалом и ручкой, максимально похожей на привычный паяльник от Lukey. Возможно, что кому-то она кажется не очень удобной, но для меня важнее, что-бы ручки обоих используемых паяльников привычно и одинаково лежали в руке.
Дальнейший обзор можно будет условно разделить на две части - «как из запчастей сделать устройство» и попытка анализа «как это устройство и прошивка контроллера работают».
К сожалению, продавец убрал именно этот SKU, поэтому могу дать только ссылку на снимок товара из журнала заказов. Впрочем, нет никаких проблем найти аналогичный товар.

Часть 1 - конструкция

После макетной проверки работоспособности, встал вопрос о выборе конструкции.
Имелся почти подходящий блок питания (24v 65W), высотой практически 1:1 с платой управления, чуть уже ее и длиной около 100мм. Учитывая, что этот блок питания питал какую-то сдохшую (не по его вине!) связную и не дешевую lucent-овскую железку, а в его выходном выпрямителе стоят две диодные сборки на суммарные 40А, я решил, что он не сильно хуже распространенного здесь китайца на 6A. Заодно и валяться не будет.
Тестовая проверка на проверенном временем эквиваленте нагрузки (ПЭВ-100, выкручен на примерно 8 Ом)

показала, что БП практически не греется - за минут 5 работы ключевой транзистор, несмотря на свой изолированный корпус, нагрелся градусов до 40 (чуть теплый), диоды потеплее (но руку не обжигает, держать вполне комфортно), а напряжение по прежнему 24 вольта с копейками. Выбросы увеличились до сотни милливольт, но для данного напряжения и этого применения сие вполне нормально. Собственно, я остановил опыт из-за нагрузочного резистора - на его меньшей половине выделялось около 50W и температура перевалила за сотню.
В результате минимальные габариты были определены (БП + плата управления), следующим этапом шел корпус.
Поскольку одним из требований была портативность, вплоть до возможность распихать по карманам, вариант с готовыми корпусами отпал. Доступные универсальные пластмассовые корпуса совсем не годились по размерам, китайские алюминиевые корпуса под T12 для карманов куртки тоже великоваты, да и ждать еще месяц не хотелось. Вариант с «напечатанным» корпусом не проходил - ни прочности, ни теплостойкости. Прикинув возможности и вспомнив пионерскую молодость, решил сделать из древнего одностороннего фольгированного стеклотекстолита, валяющегося еще со времён СССP. Толстенная фольга (микрометр на тщательно разглаженном кусочке показал 0.2мм!) все равно не позволяла травить дорожки тоньше миллиметра из-за бокового подтравливания, а для корпуса - самое то.
Но лень вкупе с нежеланием пылить категорически не одобрила распиловку ножовкой или резаком. После прикидки имеющихся технологических возможностей, решил попробовать вариант распиловки текстолита на электрическом плиткорезе. Как оказалось - в высшей степени удобный вариант. Диск режет стеклотекстолит без всяких усилий, кромка получается практически идеальная (с резаком, ножовкой или лобзиком даже не сравнить), ширина по длине реза тоже одинаковая. И, что немаловажно, вся пыль остается в воде. Понятно, что если нужно отпилить один маленький кусочек, то разворачивать плиткорез слишком долго. Но даже на этот маленький корпус нужно было под метр реза.
Далее был спаян корпус с двумя отделениями - одно под блок питания, второе для платы управления. Первоначально, я не планировал разделение. Но, как и при сварке, припаянные в угол пластины при остывании стремятся уменьшить угол и дополнительная перепонка очень полезна.
Передняя панель согнута из алюминия в форме буквы П. В верхнем и нижнем отгибе нарезана резьба для фиксации в корпусе.
В результате получился такое (с устройством я до сих пор «играюсь», поэтому покраска пока очень черновая, из остатков старого балончика и без шлифовки):

Габаритные размеры самого корпуса - 73 (ширина) x 120 (длина) x 29 (высота). Ширину и высоту сделать меньше нельзя, т.к. размеры платы управления 69 x 25, да и найти более короткий блок питания тоже не просто.
Сзади установлен соединитель под стандартный электропровод и выключатель:


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

Черный изолятор из резиноподобного материала остался от исходного блока питания. Он довольно толстый (чуть меньше миллиметра), теплостойкий и очень плохо режется (отсюда и грубый вырез для пластиковой распорки - чуть-чуть не влезало). По ощущениям - как асбест, пропитанный резиной.
Слева от блока питания - радиатор выпрямителя, справа - ключевого транзистора. В оригинальном БП радиатором была тонкая полоска алюминия. Я решил «усугубить» на всякий случай. Оба радиатора изолированы от электроники, поэтому могут свободно прилегать к медным поверхностям корпуса.
На перепонке смонтирован дополнительный радиатор для платы управления, контакт с d-pak корпусами обеспечивается термопрокладкой. Пользы не много, но все лучше воздуха. Что бы исключить замыкание, пришлось чуть обкусить выступающие контакты «авиационного» разъема.
Для наглядности - паяльник рядом с корпусом:

Результат:
1) Паяльник работает примерно как заявлено и вполне помещается в карманах куртки.
2) В старом хламе утилизированы и более не валяются: блок питания, кусок стеклотекстолита 40-летней давности, балончик с нитроэмалью 1987 года выпуска, микровыключатель и небольшой кусок алюминия.

Разумеется, с точки зрения экономической целесообразности существенно проще купить готовый корпус. Пусть материалы были и практически бесплатны, но «время-деньги». Просто в моем списке задач вообще не фигурировала задача «сделать дешевле».

Часть 2 - заметки о функционировании

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

В качестве некоторого предварительного предупреждения хочу сказать:
1) Разные контроллеры имеют несколько разную схемотехнику. Даже у внешне одинаковых плат могут быть немножко отличающиеся компоненты. Т.к. у меня имеется только одно мое конкретное устройство, я никак не могу гарантировать совпадение с другими.
2) Прошивка контроллера, которую я анализировал, не единственная имеющаяся. Она распространенная, но у Вас может стоять другая прошивка, функционирующая другим образом.
3) Я нисколько не претендую на лавры первооткрывателя. Многие моменты уже были ранее освещены другими обозревателями.
4) Дальше будет много скучных букв и ни одной веселой картинки. Если внутреннее устройство не интересует - остановитесь здесь.

Обзор конструкции

Дальнейшие выкладки будут во многом связаны со схемотехникой контроллера. Для понимания его работы точная схема не обязательно, вполне достаточно рассмотреть основные компоненты:
1) Микроконтроллер STC15F204EA. Ничем особо не выдающийся чип семейства 8051, заметно более быстрый, чем оригинал (оригинал 35 летней давности, да). Питается от 5В, имеет на борту 10-битный АЦП с коммутатором, 2x512байт nvram, 4KБ программной памяти.
2) Стабилизатор на +5В, состоящий из 7805 и мощного резистора для уменьшения тепловыделения(?) на 7805, сопротивлением 120-330 Ом (на разных платах разное). Решение в высшей степени бюджетное и тепловыделяющее.
3) Силовой транзистор STD10PF06 с обвязкой. Работает в ключевом режиме на низкой частоте. Ничего выдающегося, старый.
4) Усилитель напряжения термопары. Подстроечный резистор регулирует его усиление. Имеет защиту на входе (от 24В) и подключен на один из входов АЦП МК.
5) Источник опорного напряжения на TL431. Подключен на один из входов АЦП МК.
6) Датчик температуры платы. Также подключен к АЦП.
7) Индиктор. Подключен к МК, работает в режиме динамической индикации. Подозреваю, что один из основных потребителей +5В
8) Ручка управления. Вращение регулирует температуру (и другие параметры). Линия кнопки в очень многих моделях не запаяна или разрезана. Если соединить, то позволяет настраивать дополнительные параметры.

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

Функционирование прошивки контроллера

Исходных текстов я не имею, но IDA никуда не делась:). Механизм работы довольно простой.
При начальном запуске прошивка:
1) инициализирует устройство
2) загружает параметры из nvram
3) Проверяет нажатость кнопки, если нажата - ждет отжатия и запускает п/п настройки расширенных параметров (Pxx) Там много параметров, если нет понимания, то лучше их не трогать. Могу выложить раскладку, но опасаюсь спровоцировать проблемы.
4) Выводит на экран «SEA», ждет и запускает основной цикл работы

Есть несколько режимов работы:
1) Обычный, нормальное поддержание температуры
2) Частичное энергосбережение, температура 200 градусов
3) Полное отключение
4) Режим настройки P10(шаг настройки температуры) и P4(усиление ОУ термопары)
5) Режим альтернативного управления

После запуска работает режим 1.
При коротком нажатии кнопки производится переход в режим 5. Там можно повернуть регулятор влево и уйти в режим 2 или вправо - увеличить температуру на 10 градусов.
При длительном нажатии производится переход в режим 4.

В предыдущих обзорах было много споров, как правильно устанавливать вибродатчик. По имеющейся у меня прошивке могу сказать однозначно - без разницы. Уход в режим частичного энергосбережения выполняется по отсутствию изменений состояния вибродатчика, отсутствию существенных изменений температуры жала и отсутствию сигналов от ручки - все это на протяжении 3х минут. Замкнут вибродатчик или разомкнут - совершенно неважно, прошивка анализирует только изменения в состоянии. Вторая часть критерия тоже интересна - если вы паяете, то температура жала неминуемо плавает. И если фиксируется отклонение более чем на 5 градусов от заданной, выхода в режим энергосбережения не будет.
Если режим энергосбережения продлится больше заданного, то паяльник полностью выключится, на индикаторе будут нули.
Выход из энергосберегающих режимов - по вибрации или по ручке управления. Возврата из полного энергосбережения в частичный не бывает.

Поддержанием температуры МК занимается в одном из таймерных прерываний (их задействовано два, второе занимается дисплеем и прочим. Зачем так сделано непонятно - интервал прерывания и другие настройки выбраны одинаковые, вполне можно было обойтись единым прерыванием). Цикл управления состоит из 200 таймерных прерываний. На 200-м прерывании нагрев обязательно отключается (- целые 0.5% мощности!), выполняется задержка, после чего производится измерение напряжений с термопары, термодатчика и опорного напряжения с TL431. Далее все это по формулам и коэффициентам (частично задаваемым в nvram) пересчитывается в температуру.
Здесь я позволю себе маленькое отступление. Зачем в такой конфигурации термодатчик - не вполне понятно. При правильной организации, он должен давать поправку температуры на холодном спае термопары. Но в этой конструкции он измеряет температуру платы, не имеющую никакого отношения к требуемой. Его либо нужно переносить в ручку, как можно ближе к картриджу T12 (и еще вопрос - в каком месте картридже находится холодный спай термопары), либо вовсе выкинуть. Возможно, я чего-то не понимаю, но похоже, что китайские разработчики тупо передрали схему компенсации с какого-то другого устройства, совершенно не понимая принципов работы.

После измерения температуры вычисляется разница между заданной и текущей температурой. В зависимости от того, большая она или маленькая работают две формулы - одна большая, с кучей коэффициентов и накоплением дельты (желающие могут почитать про построение ПИД-регуляторов), вторая проще - при больших отличиях нужно либо греть максимально, либо полностью отключить (в зависимости от знака). Переменная ШИМ может иметь значение от 0 (отключено) до 200 (полностью включено) - по количеству прерываний в цикле управления.
Когда я только включил устройство (и еще не залез в прошивку), меня заинтересовал один момент - не было дрожания на ± градус. Т.е. температура либо держится стабильно, либо дергается сразу на 5-10 градусов. После анализа прошивки выяснилось, что дрожит оно по всей видимости всегда. Но при отклонении от заданной температуры менее чем на 2 градуса прошивка показывает не измеренную, а заданную температуру. Это ни хорошо и не плохо - дрожащий младший разряд тоже сильно раздражает - просто нужно иметь в виду.

Завершая разговор о прошивке хочу отметить еще несколько моментов.
1) С термопарами я не работал уже лет 20. Может за это время они стали линейнее;), но раньше для сколько-нибудь точных измерений и при наличии возможности, всегда вводилась функция корректировки нелинейности - формулой или таблицей. Здесь этого нет от слова совсем. Можно настроить только смещение нуля и угол наклона характеристики. Может во всех картриджах используются высоколинейные термопары. Либо индивидуальный разброс в разных картриджах больше, чем возможная групповая нелинейность. Хотелось бы надеяться на первый вариант, но опыт намекает на второй…
2) По непонятной для меня причине, внутри прошивки температура задается числом с фиксированной точкой и разрешением в 0.1 градус. Совершенно очевидно, что в силу предыдущего замечания, 10-битного АЦП, неверной поправки холодного конца, неэкранированного провода и т.п. реальная точность измерений и 1 градус никак не составит. Т.е. похоже, что опять содрано с какого-то другого устройства. А сложность вычислений чуть выросла (неоднократно приходится делить/умножать на десять 16-разрядные числа).
3) На плате имеются контактные площадки Rx/TX/gnd/+5v. Насколько я понял, у китайцев были специальные прошивки и специальная китайская программа, позволяющая напрямую получать данные со всех трех каналов АЦП и настраивать параметры ПИД. Но в стандартной прошивке ничего этого нет, выводы предназначены исключительно для заливки прошивки в контроллер. Программа для заливки доступна, работает через простой последовательный порт, только TTL-уровни нужны.
4) Точки на индикаторе имеют свой функционал - левая индицирует режим 5, средняя - наличие вибрации, правая - тип выводимой температуры (выставленная или текущая).
5) Для записи выбранной температуры отведено 512 байт. Сама запись сделана грамотно - каждое изменение пишется в следующую свободную ячейку. Как только достигнут конец - блок полностью стирается, а запись производится в первую ячейку. При включении берется самое дальнее записанное значение. Это позволяет увеличить ресурс в пару сотен раз.
Владелец, помни - вращая ручку настройки температуры, ты тратишь невосполнимый ресурс встроенного nvram!
6) Для остальных настроек используется второй блок nvram

С прошивкой все, если возникнут дополнительные вопросы - задавайте.

Мощность

Одна из важных характеристик паяльника - максимальная мощность нагревателя. Оценить ее можно следующим образом:
1) Имеем напряжение 24В
2) Имеем жало Т12. Измеренное мной сопротивление жала в холодном состоянии составляет чуть более 8 Ом. У меня получилось 8.4, но я не берусь утверждать, что погрешность измерения менее 0.1 Ома. Предположим, что реальное сопротивление никак не менее 8.3 Ома.
3) Сопротивление ключа STD10PF06 в открытом состоянии (по даташиту) - не более 0.2 Ома, типовое - 0.18
4) Дополнительно нужно учесть сопротивление 3х метров провода (2x1.5) и разъема.

Итоговое сопротивление цепи в холодном состоянии составляет не менее 8.7 Ома, что дает предельный ток в 2.76А. С учетом падения на ключе, проводах и разъеме, напряжением на самом нагревателе будет около 23В, что даст мощность порядка 64 Вт. Причем это предельная мощность в холодном состоянии и без учета скважности. Но не стоит особо расстраиваться - 64 Вт это весьма много. А учитывая конструкцию жала - достаточно для большинства случаев. Проверяя работоспособность в режиме постоянного нагрева, я помещал кончик жала в кружку с водой - вода вокруг жала кипела и пАрила весьма бодро.

Но вот попытка экономии с использованием БП от ноутбука имеет очень сомнительную эффективность - внешне незначительное снижение напряжения, приводит к потере трети мощности: вместо 64 Вт останется порядка 40. Стоит ли этого экономия $6?

Если наоборот, попытаться выжать из паяльника заявленные 70Вт, есть два пути:
1) Немного увеличить напряжение БП. Достаточно увеличить всего на 1В.
2) Уменьшить сопротивление цепи.
Почти единственный вариант, как немного уменьшить сопротивление цепи - заменить ключевой транзистор. К сожалению, практически все p-канальные транзисторы в используемом корпусе и на требуемое напряжение (на 30В я не рискнул бы ставить - запас будет минимален) имеют сходные Rdson. А так было бы вдвойне замечательно - заодно меньше бы грелась плата контроллера. Сейчас в режиме максимального разогрева на ключевом транзисторе выделяется около ватта.

Точность/стабильность поддержания температуры

Кроме мощности, не менее важна стабильность поддержания температуры. Причем лично для меня стабильность даже важнее точности, поскольку если значение на индикаторе можно и опытным путем подобрать - обычно я так и делаю (и не очень важно, что при выставке 300 градусов реально на жале - 290), то вот нестабильность таким образом не побороть. Впрочем, по ощущениям, стабильность поддержания температуры на T12 заметно лучше, чем на жалах 900-й серии.

Что имеет смысл переделать в контроллере

1) Контроллер греется. Не фатально, но больше желаемого. Причем главным образом его греет даже не силовая часть, а стабилизатор на 5В. Измерения показали, что ток по 5В составляет порядка 30 мА. 19В падения при 30 мА дает примерно 0.6Вт постоянного нагрева. Из них на резисторе (120Ом) выделяется порядка 0.1Вт и еще 0.5Вт - на самом стабилизаторе. Потребление остальной схемы можно игнорировать - всего 0.15Вт, из которой заметная часть тратится на индикатор. Но плата маленькая и поставить step-down просто некуда - если только на отдельной платке.

2) Силовой ключ с большим (относительно большим!) сопротивлением. Применение ключа с сопротивлением 0.05 Ом сняло бы все проблемы его нагрева и добавило бы около ватта мощности нагревателю картриджа. Но корпус был бы уже не 2х миллиметровый dpak, а минимум на размер больше. Или вообще переделать управление на n-канал.

3) Перенос ntc в ручку. Но тогда имеет смысл перенести туда и микроконтроллер, и силовой ключ и опорное напряжение.

4) Расширение функциональности прошивки (несколько наборов параметров ПИД для разных жал и т.п.). Теоретически возможно, но лично мне проще (и дешевле!) заново слепить на каком-нибудь младшем stm32, чем утаптывать в существующую память.

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

Заключение

Имеет ли смысл переходить на T12? Не знаю. Пока я работаю только с жалом T12-K. Для меня оно одно из самых универсальных - и полигон хорошо греет, и гребенку выводов эрзац-волной пропаять/отпаять можно, и отдельный вывод острым концом прогреть можно.
C другой стороны, имеющийся контроллер и отсутствие средств автоматической идентификации конкретного типа жала усложняет работу с T12. Ну что мешало Hakko засунуть какой-нибудь идентифицирующий резистор/диод/чип внутрь картриджа? Было бы идеально, если в контроллере имелось несколько слотов под индивидуальные настройки жал (хотя-бы штуки 4) и при смене жала он автоматом загружал нужные. А в существующей системе можно как максимум сделать ручной выбор жала. Прикидывая объем работ понимаешь, что овчинка не стоит выделки. Да и картриджи по стоимости соизмеримы с целой паяльной станцией (если не брать китай по $5). Да, разумеется можно экспериментально вывести таблицу поправок температур и приклеить табличку на крышку. Но с коэффициентами ПИД (от которых напрямую зависит стабильность) так не поступить. От жала к жалу они обязаны отличаться.

Если отбросить мысли-мечты, то выходит следующее:
1) Если паяльной станции нет, но хочется - лучше забыть про 900 и брать T12.
2) Если нужно дешево и точные режимы пайки не сильно нужны - лучше взять простой паяльник с регулировкой мощности.
3) Если паяльная станция на 900х уже есть, то достаточно T12-К - универсальность и портативность получилась на высоте.

Мы продолжаем изучение программирования микроконтроллеров STM32.



Прежде всего познакомимся с фирмой производителем — ST Microelectronics .

Переходим в раздел Products -> Microcontrollers . Выбираем вкладку STM32 ARM Cortex .

Фирма ST производит микроконтроллеры STM32 в трех основных сегментах:

  • Ультранизкопотребляющие
  • Общего назначения
  • Высокопроизводительные.

На данной схеме указано соответствие названия микроконтроллера и ядра ARM Cortex, примененного в нем.

Микроконтроллер STM32F303VCT6 , с которым нам предстоит познакомиться поближе, стоит в самой середине указанной схемы и может работать на тактовой частоте до 72 МГц. Производительность микроконтроллера оценена в 90 миллионов операций в секунду.

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

Пакет IAR может использоваться в двух режимах – это

  • режим 30-дневной полнофункциональной версии
  • режим с ограничением по объему компилируемого кода.

Для STM32 это 32 килобайта кода (из имеющихся 256 килобайт Flash-памяти). Но для учебных задач вполне достаточно, поэтому будем использовать именно этот вариант.

Запускаем скачанный архив и переходим в раздел Install IAR Embedded Workbench.


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

Дальше нам предлагается выбрать драйвера USB-устройств, которые нам понадобятся. Поскольку мы будем пользоваться программатором ST-link, я рекомендую убрать остальные драйвера, что немного ускорит процесс установки.

Устанавливаем программное обеспечение для STM микроконтроллеров, и на этом программа IAR завершает свою установку.

Теперь устанавливаем лицензионную информацию. Запускаем IAR License Manager, и нам предлагается ввести лицензионный ключ. Для этого необходимо зарегистрировать продукт на сайте IAR Systems. Если Вы уже имеете лицензионный ключ, можете ввести его. Если нет, переходим на сайт. Регистрация бесплатная. И нажимаем кнопку Register.

В соответствующей форме вводим тип лицензии – code size limited и заполняем обязательные поля. E-mail необходимо указать корректно, поскольку туда придет подтверждающее письмо. Также требуется указать отрасль, в которой будет применяться среда разработки IAR и указать производителя микроконтроллеров, для которых мы планируем применять эту среду – ST Microelectronics.
Отвечаем на несколько вопросов и подтверждаем регистрацию. Получаем соответствующее письмо подтверждения на указанный адрес электронной почты.

Лицензия успешно активирована, программа IAR готова к работе. Можем запустить IAR Systems. Выбираем язык интерфейса и видим окно среды разработки.


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

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

Подробнее

Flowcode

Один из передовых графических языков программирования для микроконтроллеров. Поддержка русского языка. Платная, но есть бесплатная версия с ограничениями и только для микроконтроллеров PIC.

Подробнее

Algorithm Builder

Бесплатная графическая среда программирования для разработки приложений под микроконтроллеры с архитектурой AVR от отечественных разработчиков.

Подробнее

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

Подробнее

Ic Prog

Одна из самых популярных бесплатных оболочек для программирования, поддерживающая огромное число микроконтроллеров, ППЗУ и адаптеров различной конструкции. На русском языке.

Подробнее

Pony Prog 2000

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

Подробнее

SinaProg

Графическая оболочка для программы AVRdude, включающая в себя простой и функциональный AVR fuse-калькулятор. Freeware.

Подробнее

Простой, бесплатный, универсальный программатор для микроконтроллеров семейства AVR.

Подробнее

Code Composer Studio

Интегральная среда проектирования, предназначенная для создания программного обеспечения, использующегося в процессорах и микроконтроллерах компании Texas Instruments Incorporated. Программа платная, бесплатная версия CCS-FREE с рядом ограничений.

Подробнее

TivaWare

Набор высококачественных, полноценных библиотек для контроллеров семейства TIVA от Texas Instruments. Freeware.

Подробнее

Один из лучших компиляторов Basic-подобного языка для серии восьмибитных микроконтроллеров AVR.

Подробнее

Sourcery CodeBench

Самодостаточная интегрированная среда разработки, предназначенная для создания приложений на C/C++ для IA32, ColdFire, Power, MIPS, ARM и некоторых других архитектур микроконтроллерных устройств. Платная 400$ (есть 30-дневная ознакомительная версия)

Подробнее

Программно-инструментальный комплекс, основанный на стандарте IEC 61131-3 и предназначенный для программирования промышленных контроллеров и компьютеров. На русском языке. Freeware.

Подробнее

Flash Magic

Бесплатное приложение для программирования микроконтроллеров компании NXP Semiconductors

Подробнее

STEP 7-Micro/WIN

Простое и удобное программное обеспечение, созданное для работы с программируемыми контроллерами серии SIMATIC S7-200 компании Siemens AG. Платная.

ПодробнееАнализ сред программирования для мк

Программирование микроконтроллеров является неотъемлемой частью разработки самостоятельного электронного устройства. На данном этапе развития электроники, наиболее популярными микроконтроллерами (МК) есть: PIC, MSP, AVR, STM, ARM (процессор). Для каждого вида МК есть узконаправленная среда программирования. Это связано с внутренней структурой МК и технического обеспечения записи программы в память МК. Если проанализировать существующие среды программирования МК , то найти универсальные среды программирования МК очень сложно. При анализе сред программирования было выявлено только одну универсальную среду программирования микроконтроллеров – FlowCode, функции которой позволяют программировать МК PIC, AVR, ARM.

FlowCode – графическая универсальная середа программирования МК. Программирование осуществляется благодаря построению логической структуры, т.е. блок-схем, аналогично среде HiAsm. Функция экспорта позволяет экспортировать написаний код PIC МК в программу AVR МК и наоборот. Дополнением данной среды программирование является создание HEX-кода, который может быть использовать при прошивки МК, или при проектировании схемы с поддержкой МК, например, в среде Proteus.

Большинство проанализированных сред программирования МК были предназначены для AVR. Среда Algorithm Builder – это графическая среда программирования МК AVR. Тип графической разработки в данной среде, отличается от FlowCode. Як говорит автор программы, написание кода осуществляется в 3-5 раз быстрее. Среда русифицирована и поддерживает автоматическое перекодирование строк в ANSI-кода Windows в код русифицированного буквенно-цифрового ЖКИ. Среда программирования объединяет в себе графический редактор, компилятор алгоритма, симулятор микроконтроллера, внутрисхемный программатор, функции работы с EEPROM.

Среди платных сред программирования AVR МК есть AVR Studio, IAR Systems, Image Craft, WinAVR, CodeVisionAVR.

CodeVisionAVR–популярная условно-бесплатная среда программирования AVR МК. Объединяет в себе Си-подобный язык программирования и ассемблер. Функции программы позволяют самостоятельно прошивать МК и устанавливать fuse-бити и ПЗУ.Конечным результатом разработки программы под. МК есть создание HEX, BIN или ROM-файла, для прошивки МК с помощью программатора.

Среда IAR Systems поддерживает программирования МК AVR и MSP430, но функции программирования двух МК не объединены в одной среде. Для каждого МК были разработаны отдельные среды программирования. Аналогичным образом была разработана среда программирования Image Craft (ICC). ICC поддерживает Си-подобный синтаксис и ассемблер. IAR Systems и Image Craft в их состав входит целенаправленные библиотеки по работе с отдельными частями МК. В состав ICC добавлена утилита для генерации кода и инициализации периферии МК, внедрен ANSI Terminal Emulator, который предоставляет возможность работать с COM-портом.

Среда Code Composer Studio (CCS) для программирования МК MSP основана на базе стоковой универсальной среды программирования Eclipse. CCS как вышеперечисленные среды программирования, имеет Си-подобный язык программирования. Данная среда программирования поддерживает разработку для DSP (Digital signal processor) микроконтроллеров, процессоров АРМ семейства TMS320 и MSP430. Данная среда в сравнении с ICC или CCS использует Java-машину и требует больше системных ресурсов.

Energia – среда программирования для МК MSP430 , которая наиболее популярной средой программирования среди начинающих. Имеет Си-подобный язык программирования, но он отличается от языков, которые используются в вышеперечисленных средах. Язык Energia (и Arduino IDE) более понятный, подобный английским словам. Energia поддерживает дополнительные библиотеки, в состав которых входят драйвера для подключение платформы LaunchPad MSP430 на базе ARM Cortex, FraunchPad и lm4f120 StallerPad. Данная среда программирования является модифицированной версией среды Arduino IDE. Работает c 1, 16МГц МК MSP430 и 80 МГц lm4f120. Внедрена функция просмотра COM-порта.

Virtual breadboard – середа разработки с поддержкой проектирования электрической схемы на базе платформы Arduino под управлением МК ATMEL AVR. При анализе использовалась программа версии 4.2.9, которая поддерживает разработку программ под. МК PIC. Синтаксис подобный среде программирования Energia и Arduino IDE. Данная середа является платной, в программу внедрены примеры, и модели электронных элементов на основе которых проектируется устройство.

Для разработки программ под МК PIC существует среда MPLAB IDE. Создание программы проходит в структурированном виде, встроенный программный симулятор моделирования исполнения программ в МК с учетом состояния портов ввода-вывода, эмулятор работы МК в масштабе реального времени непосредственно в устройстве пользователя. Разработка проекта ведется на языке С или ассемблер. Еще одной средой программирования для МК PIC является mikгоС. Среда mikгоС включает в себя библиотеки, которые поддерживают следующие устройства и интерфейсы:

Встроенный аналого-цифровой перекодировщик (АЦП) микроконтроллера; - встроенную энергонезависимую память EEPROM микроконтроллера; - встроенные широтно-импульсные модуляторы (PWM) микроконтроллера; - внешние сменные карты памяти типа MMC, SD и Compact Flash; - файловую систему FAT; - алфавитно-цифровой жидкокристаллические индикаторы (LCD PKI); - графические жидкокристаллические индикаторы (GLCD, РК-дисплей); - интерфейсы I2C, SPI, 1-Wire, USART, RS-485, CAN, PS / 2, USB (HID) и Ethernet.

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

Если Вы используете другую среду программирования МК, которая в данном посте не указана, пожалуйста, напишите. Указанная вами среда будет проанализирована и добавлена в пост.

Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, поэтому жмем Cancel. Окно закроется и перед нами во всей своей невзрачной красе предстанет IAR.

Выбираем в верхнем меню Project > Create New Project…

IAR предложит выбрать тип шаблона проекта (Project templates). Выбираем C > main и кликаем Ок.

В стандартном Save As диалоге находим или создаем папку и сохраняем проект. Проект готов. Приглядимся к IARу.

Верхняя строка – почти стандартный menu bar. Ниже - tool bar с кнопками.

С правой стороны находится редактор кода. Сейчас там открыт файл main.c, но в нем только пустая функция main().

С левой стороны расположено окно рабочего пространства (workspace), в котором отображается структура проекта. Любой IARовский проект должн находиться по-крайней мере в одном рабочем пространстве.

В верхней части рабочего пространства находится выпадающее меню. Это так называемые конфигурации проекта. По умолчанию их две – Debug и Release. Они отличаются между собой настройками проекта. Можно создавать свои конфигурации.

Сохраним рабочее пространство. Если не сделаем сейчас, придется делать это на этапе компиляции. Выбираем в меню File > Save Workspace

Зададим настройки проекта для конфигурации Debug. Выбираем в меню Project > Options

Или кликаем правой кнопкой мышки по галочке напротив названия проекта.

Откроется диалоговое окно с множеством настроек.

Выбираем тип микроконтроллера
General Options > Target > Processor configuration
У меня это ATmega8535.

Разрешаем использование имен битов определенных в хедер файле
В General Options > System ставим галочку Enable bit definitions in I/O-Include files

Хоть нам и не понадобится сейчас эта настройка, полезно знать где она находится.

Включаем генерацию ассемблерного листинга . Необязательная опция, но я обычно включаю, чтобы посмотреть что натворил компилер.
С/С++ Compiler > List > галочка Output List File

Меняем формат выходного файла
Linker > Output.
B поле Output file cтавим галочку Override default и заменяем расширение d90 на hex
В поле Format выбираем Other и в выпадающем меню Output format выбираем тип файла intel-standart

Жмем ОК.
Теперь копируем и вставляем текст нашей программы в main.c

#include
#include

int main(void )
{
unsigned char led = 1;
DDRC = 255;

while (1)
{
PORTC = ~led;
__delay_cycles (400000);
led = led<<1;
if (led == 0)
led = 1;
}
return 0;
}

Кликаем кнопку Make.

Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages.

В данной статье речь пойдет о том, какие шаги необходимо выполнить для создания минимального и удобного проекта под микроконтроллер серии STM32 в среде разработки IAR. Этот пост скорее напоминалка для меня самого дабы не забыть мелких нюансов IDE в ответственный момент. Ведь в любой момент я смогу просто зайти на эту страницу и скачать готовый стартап проект. Ну а Вам, дорогие читатели, самим решать, чего полезного можно почерпнуть из этого поста! Ну что ж, приступим?

Естественно, в первую очередь необходимо скачать и установить программу IAR. Дальше необходимо скачать полезную библиотеку от производителя процессора, которая называется STM32F10x_StdPeriph_Lib_V3.5.0 (версия в Вашем случае может отличаться). После этого, запускаем установленную среду разработки. Создаем новый проект Project->Create New Project…

Выбираем пустой проект


Получаем


Создаем желаемые условные разделения внутри проекта (с помощью команд Add->Add Group… )

Добавляем необходимые файлы


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

Переходим к настройке проекта. Выбираем процессор




Устанавливаем галочку в настройках для использования библиотеки CMSIS

Добавляем путя к библиотечным файлам, а также добавляем определения (Defines) в настройки препроцессора C/C++


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

Ради приличия считаю должным, упомянуть о самой программе, которую мы собираемся скомпилировать. Что она должна делать? Это своего рода «Hello World» в мире встроенных систем. Иными словами — будем мигать светодиодом. Рассмотрим исходный код главного файла:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_flash.h" int main() { GPIO_InitTypeDef GPIO_InitStructure; /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1) ; RCC_PCLK2Config(RCC_HCLK_Div2) ; RCC_PCLK1Config(RCC_HCLK_Div4) ; /* Select HSI as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI) ; /* Wait till HSI is used as system clock source */ while (RCC_GetSYSCLKSource() != 0x00) { } FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable) ; FLASH_SetLatency(FLASH_Latency_0) ; // Enable peripherals clocks RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE) ; /* LED configuration */ /* Configure PD.05 as output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, & GPIO_InitStructure) ; while (1) { GPIO_SetBits(GPIOD, GPIO_Pin_5) ; for (long i= 0 ; i< 200000 ; i++ ) ; GPIO_ResetBits(GPIOD, GPIO_Pin_5) ; for (long i= 0 ; i< 200000 ; i++ ) ; } }

Что тут творится? В первую очередь настраиваем систему тактирования микропроцессора и выбираем внутренний источник тактирования (HSI, 8 MHz). Дальше подаём тактирование на порт GPIOD, который «висит» на шине APB2. После, настраиваем 5-ый пин порта GPIOD на выход (к этому пину подключаем светодиод). Ну а дальше видим бесконечный цикл в котором и происходит поочерёдное включение и выключение светодиода. Между включением и выключением также добавлены циклы. Они выполняют роль задержки, дабы человеческий глаз успевал замечать мигание светодиода.

Теперь проект должен без особых проблем собраться по нажатии клавиши F7 . Нами была создана возможно первая прошивка для микропроцессора STM32F103. Поздравляю! На выходе получим желаемый двоичный файл. В одной из следующих статьей рассмотрим способ загрузки полученного бинарного файла, собственно в сам микропроцессор. Это сделать очень просто, если у Вас имеется в наличии переходник USB-UART.