Stm32F030F4P6 первые шаги: STM32F103C8T6 — первые шаги. Начинаем делать осциллограф / Хабр

Содержание

Alex_EXE » Отладочные платки для stm32f030f4p6 и stm8s103f2p6

Начинать применять новую детальку в своей практике без ознакомления с ней в живую — рискованно, для таких целей существую различные специальные помощники: отладочные и демонстрационные платы. Для ознакомлением с одним интересным контроллером из семейства STM32 — STM32F030F4P6 была разработана специальная отладочная платка.

Отладочные платы stm32f030f4p6 и stm8s103f2p6

Если быть точнее — то это скорее не отладочная плата, а плата переходник, с дополнительно разведенным разъёмом для подключения программатора, парой перемычек для базовой необходимой настройки периферии контроллера и ещё нескольких деталей в её обвязке. За одно, впрок, была изготовлена подобная отладочная плата для STM8S103F2P6.

Чем интересен микроконтроллер STM32F030F4P6 — это самый маленький, если смотреть со стороны количества выводов (т.к. если смотреть по размеру — в семействе есть ещё и QFN корпуса), их всего 20, и самый удобно паяемый в семействе контроллер — он единственный выпускается в корпусе tssop20 (на самом деле есть и другие, но они похожи и их невидно у нас в продаже).

Правда у tssop20 шаг всего 0.5мм, так что опыт изготовления плат и пайки всё равно будет необходим. Ещё одним бонусом будет — он самый дешевый в серии, около полу бакса за штуку, правда это при оптовой закупки, в розницу он стоит 0,74$ или 46р (цены актуальны на начало марта 2015 года).

По STM8S103F2P6 — он тоже выбран в корпусе tssop20, только в отличие от его старшего собрата у него меньше обвязки. Более нечего не скажу, платы разводил в сентябре прошлого года и почему выбрал его уже не помню. Но с 8 серией у меня пока не складывается, задач и проектов на их основе пока нет, а у самого пока руки не доходят.

Схема отладки stm32f030f4p6

Отладочная плата с 32-х разрядным контроллером stm32f030f4p6 на борту. На плате имеется разъем для подключения программатора и 2 перемычки для конфигурации контролера, и необходимый минимальный обвяз. Первая перемычка отвечает за способ прошивки контроллера: когда линия boot0 контроллера подтянута к земле, то контроллер прошивается программатором через SWD разъём; когда линия подтянута к плюсу питания, то контроллер можно прошивать через встроенный UART загрузчик (по умолчанию все контроллеры его имеют) через выводы PA14/PA15 или PA9/PA10. Вторая перемычка позволяет подать плюс питания на вход питания аналоговой части контроллера (VDDA). Питание обоих плат и установленных на них микроконтроллеров 3.3В.

Схема отладки stm8s103f2p6

Печатки stm32f030f4p6 и stm8s103f2p6

Обе платы в основе себя содержат микроконтроллер в корпусе tssop20, в первом случае — это STM32F030F4P6, во втором — STM8S103F2P6. Платы получись компактными 19х31мм в первом случае и 19х29мм во втором. Все выводы микроконтроллеров разведены на 2 стандартные гребенки по краям PLS10, с шагом 2.54мм. В итоге платы имеют формат DIP корпусов, что удобно при макетировании на безпаячных макетных платах. Первая плата имеет SWD разъём для подключения программатора, выполненного из PLS5, вторая плата содержит разъём SWIM предназначенных для тех же нужд, выполненного на PLS4. На плате с 32-х битным контроллером так же содержаться 2 перемычки, выполненные из разъёмов PLS3 и PLS2. Обращаю внимания, что все разъёмы для программаторов и перемычки припаяны с лицевой стороны, т.к. платы односторонние. Обе платы по входу питания содержат блокировочные конденсаторы ёмкостью 0,1мкФ, на первой плате он имеет типоразмер 1206, на второй плате 0603. Так же на обоих платах содержатся по одному резистору на 10кОм типоразмеров 0603 для подтяжки линии reset и по конденсатору на этой же линии на 0,1 мкФ типоразмеров 0603. На второй плате установлен конденсатор для линии Vcap емкостью 1мкФ типоразмера 0603. Обе платы имеют по одной-две проводной перемычки.

Отладочные платы stm32f030f4p6 и stm8s103f2p6

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

По опыту использования отладочной платы STM32F030F4P6. Она пригодилась только для «Hello World» и для ознакомления с АЦП контроллера. После чего контролер понравился и начал сразу применяться. Контроллер понравился тем, что в первую очередь — это 32 разрядный АРМ контроллер с полным фаршем, а во вторую, он миниатюрный и содержит немного выводов, из-за чего его удобно применять в небольших проектах.

Скачать печатки

Alex_EXE | 19.03.2015 | STM32 |

Простые устройства — Король умер. Да здравствует Король!

Новые микроконтроллеры NXP Cortex-M0 в корпусах TSSOP и SO для 8/16-разрядных приложений

Первые в мире 32-разрядные микроконтроллеры ARM с малым числом выводов обеспечивают беспрецедентную производительность при стоимости 0,01 доллара США за 1MIPS

Эйндховен, Нидерланды и Сан-Хосе, Калифорния, 1 ноября 2011 г. — Сегодня компания NXP Semiconductors N.V. (Nasdaq: NXPI) объявила о том, что ее лучшее на рынке семейство микроконтроллеров ARM® Cortex™-M0 LPC1100 пополнится моделями с малым числом выводов – в корпусах SO20, TSSOP20, TSSOP28 и DIP28. Новые устройства LPC111x, являющиеся первыми в мире 32-разрядными микроконтроллерами ARM в корпусах с малым числом выводов, открывают двери широкому кругу приложений, прежде не доступных для типичных 32-разрядных микроконтроллеров из-за размеров корпуса или различных производственных ограничений.

{ads2} Основные области применения: устройства взаимодействия человека и компьютера (HID), потребительская электроника, системы сигнализации, небольшие электроприборы, простые средства управления двигателем и т. п. Устройства NXP с малым количеством выводов, предлагаемые по цене от 0,49 доллара США, обеспечивают производительность 50 MIPS (миллионов команд в секунду) по сравнению с типичными значениями 1–5 MIPS 8/16-разрядных микроконтроллеров, – столь конкурентный уровень цен достигнут благодаря уникальным возможностям NXP в производстве компонентов в корпусах с малым числом выводов для потребительских приложений.

«Наше расширенное семейство Cortex-M0 представляет собой самое полное предложение для 32-разрядных микроконтроллеров начального уровня, и сегодня мы добавляем к нему устройство с беспрецедентным для традиционных 8/16-разрядных приложений показателем: 0,01 доллара США на 1 MIPS, – отметил Пьер-Ив Лезашерр (Pierre-Yves Lesaicherre), старший вице-президент и генеральный директор направления микроконтроллеров и логических схем, компания NXP Semiconductors. – Ежегодные поставки свыше трех миллиардов корпусов TSSOP и SO обеспечивают нам гибкость и масштаб, позволяя непрерывно снижать цены на 32-разрядные микроконтроллерные решения, чтобы в 2012 году достичь отметки ниже 40 центов».

Очевидно, эта новость означает реальную угрозу популярности AVR: грядет эра ARM.

Сайт «Radiomanoff» — Главная страница

 

        

Лаборатория сельського радиолюбителя.

 

Ми переїхали!!! — radiomanoff+

 

NEW. STM32F030F4P6 & ENC28J60

 

 

NEW. STM32F030F4P6 — відладочна плата

 

— прості приклади Blink , RTC & Lcd1602

 

NEW.ENC28J60+STM32F4+uIP

 

 

 TFT-shield (2.4) & Atmega32  

-библиотека для Atmega32 и файл для Proteus

 

 

TFT-shield (2.4) & STM32L Discovery  

 

 

 STM32F4 DISCOVERY ,LCD ST7920 & u8glib

 

 

STM32L DISCOVERY.Часы реального времени RTC & touch-sensing

 

 

 

STM32L-DISCOVERY.DS18B20 и встроенный LCD

 

 

STM32L-DISCOVERY.Начало работы

— простые примеры

 

LCD Nokia1100 + AVR — первые шаги

 LCD дисплей 128×64 (ST7920) — u8glib,SPI,AVRStudio,руссификация

 UD-8.Блок управления нагрузками (мой «Умный Дом»)

 

***************************************************************************************************************************************

Обновления на radiomanoff+

Обзор и програмирование Arduino Pro Mini

 

 Arduino и AVR Studio 4.19.Использование стороннего Bootloader’а

 

 

Дистанционное управление на Atmega8 (протокол RC-5) + матричная клавиатура(State Machine)

-пример под AVRStudio

 

 Адаптация Atmega32 под Arduino

***************************************************************************************************************************************

UART(RS-232) to USB на Atmega8

Freeduino — клон Arduino (Atmega8)

Поворотники для велосипеда на микроконтролере Attiny13

Введен новый раздел Не МК едиными … Здесь будут выкладываться реально собраные и опробованые мной схемы без применения микроконтролеров.Итак:

Видеосендер по проводах

-позволяет управлять радиоапаратурой по ИК-каналу из соседних помещений

УНЧ на TDA1514A

-«легендарная» микросхема конца 90-ых

                      ***************************************************************************************************************

Обновления на radiomanoff+

 

Опрос матричной клавиатуры. Пример использования автомата (State Machine) для Atmega8

-пример под AVRStudio

 

 

Дистанционное управление на Atmega8 (протокол RC-5)

-пример под AVRStudio

***************************************************************************************************************

Звуковой PCM генератор на микроконтроллере ATtiny861

Вольтамперметр для БП на PIC16F676

 

LAN Control. Система удаленного управления через локальную сеть, Интернет и ПДУ

-Atmega 32

 

USB осцилограф 6 МГц (PIC18F2550)

USB осциллограф на PIC18F2550

 

 WAV-плеер от мистера Чена на Attiny85

 Управление люстой по 2-ум поводам на PIC12F629

«Бегущие огни» на PIC16F84A

-первый проект

Пульт ДУ на PIC12F629 для предварительного усилителя с МК управлением

-c отредактированой прошивкой под управление аудиоусилителем

Проект МИНИ-8 (Предварительный усилитель с МК-управлением)

-контролер Atmega8,аудиопроцесор TDA8425

Паяльная станция (канал паяльника) на Atmega8

-вариант от Михи-Псков

Обновлен раздел «Програматоры»,представлены 4 конструкции:

RSD Programer (PIC контролеры)

ExtraPic (PIC контролеры) 

STK200/300 (AVR контролеры)

Простой паралельный програматор (AVR контролеры)

Transistortester & Универсальный измерительный прибор(2*Atmega8)

-два прибора на один индикатор 1602

 

 Многоинтервальный суточный таймер-часы (PIC16F628A)

 

 

Термометр з фукцiюєю термостата на Attiny2313

 

 

Раньше:

Устройство защиты сетевой апаратуры от аварийного напряжения на Attiny13 

Вольтметр на PIC16F676

Ик-переключатель на два канала (PIC12F629)

 

 ДУ на 5 каналов (PIC12F629)

 

 Востановление OSSCAL для PIC12F629&675

 

Микроконтролерный искатель проводки (PIC12F629) 

 

Универсальный измерительный прибор «АВО-2006» (Atmega8)

 

 AVR-Transistortester на Atmega8

 

 

 

 

 

 

Radiomanoff+ — Главная страница

Календарь

«  Серпень 2021  »
ПнВтСрЧтПтСбНд
      1
2345678
9101112131415
16171819202122
23242526272829
3031
    

 

Навчаємось разом!!!

 

— STM32F0xx & Encoder Mode & IR control RC5

 

 

 

 

 

 

— CubeMX HAL & LCD controller

 

 

 

 

 

— MPD плеєр та ANDROID

 

 

 

+ відео

 

 

 

 

 

 

 

 

— керуємо нагрузкою в локальній мережі

 

 

 

— прості приклади Blink , RTC & Lcd1602

 

 

 

-библиотека для Atmega32 и файл для Proteus

 

 

 

 

 

 

 

 

 

 

— простые примеры

 

 

 

 

 

 

 

 

 

-пример под AVRStudio

 

 

 

 

 

 

 

 

 

-пример под AVRStudio

 

 

-пример под AVRStudio

 

 

e-mail : [email protected]

 

 

 

Архив записей

Статистика


Онлайн всього: 1

Гостей: 1

Користувачів: 0

Stlink st st link v2 распиновка

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

Контроллеры STM32 можно прошить двумя путями.
1) Через встроеный бутлоадер (бутлоадер, это такая маленькая программка внутри каждого микропроцессора STM32, которая прикидывается программатором — это если по простому). Прошивка в таком варианте происходит через UART (для связи с компьютером используется переходник USB>COM)

2)Внешним программатором. Из внешних программаторов на данный момент есть большой выбор. Это может быть и ваша отладочная плата STM32 Discovery, и китайский аналог ST-LINK V2 mini, и оригинальный ST-Link.

Первым вариантом я не пользовался, но сложного в нём вроде ничего нет. Нужно скачать утилиту STM32 ST-LINK Utility и на вашем прошиваемом микроконтроллере выставить определённый сигнал на ножкеножках BOOT0BOOt1. Допустим возьмём для примера самый дешёвый и простой микроконтроллер STM32F030F4P6 в корпусе TSSOP20. У него есть ножка BOOT0, которую если мы замыкаем на массу — то у нас контроллер будет прошиваться через SWD (то есть от внешнего программатора), а если на эту ножку подать напряжения питания, то контроллер будет стартовать с встроенного бутлоадера, и ждать пока мы его прошьём через UART, то есть с помощью программы ST-LINK Utility.

Вторым вариантом намного проще работать, так как помимо того что вы можете прошивать свои микроконтроллеры так ещё и в режиме реального времени отлаживать свои программы (дебажить))
Для прошивки в таких случаях используется всего 4 ножки (по минимуму)
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO

Такой вариант подключения для прошивки используется в том случае, если вы не сконфигурировали ножки SWCLK и SWDIO в качестве портов ввода-вывода. Если же вы эти ножки используете в качестве портов ввода-вывода, то прийдётся ещё подключать «физичесу» линию сброса. — RST . В таком варианте у нас получается 5 проводов для подключения
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO
5)NRST

Вот так выглядит распиновка на плате STM32F4Discovery разъёма для программирования внешних микроконтроллеров. Пин VDD_Target является пином, для снятия показаний напряжения с прошиваемого устройства. Этот если по простому — для согласования уровня напряжений между программатором и прошиваемым устройством.

Вот так выглядит разъём программатора ST-LINK V2 mini. В нём есть дополнительные средства для работы с STM8 и т.д, поэтому для работы с STM32 нам нужны пины
1)Vcc — питание 3 Вольт
2)SWDIO
3)VSS(Gnd) — масса
4)SWCLK
10)NRST

Вот так выглядит схема подключения для прошивки нашего простейшего микроконтроллера STM32F030F4P6

Как видите, никаких заморочек нет. На этом думаю всё, если будут вопросы, то пишите в коментах, я добавлю эти нюансы в статью.

Заранее прошу прощения за возможную неясность/запутанность текста, мой первый пост.

Чукча не писатель, чукча — радиолюбитель!))
Так же предупреждаю — я не несу ответственность за ваши действия, а так же не призываю к действиям! Все что выделаете — делаете на свой страх и риск!

Update! Статью со значительными изменениями и уточнениями выложил на хабр:

Так уж случилось, что мне надоели лишние провода.

Немного подумав я вспомнил что на палатах Nucleo и DiscoveryST-Link совмещает в себе SWD и VCP (Virtual Com Port).

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

Однако стоимость в 20$ за ненужный кусок текстолита, при стоимости китайского варианта в 3$ — лишние расходы.

Благо мне подсказали ссылку на GitHub с уже вытянутым загрузчиком )

Приступаем к работе!

Как оказалось, для STM32+CVP не важно какой чип, C8 или CB.

Если у вас чип C8 то при обновлении указывайте модификацию STM32+Audio.

Модификацию можно произвести только на Windows версии софта, кроссплатформенная версия софта отказывается обновлять девайс!
Внутри программатора может быть совершенно разные платы и чипы!

Есть несколько вариантов модификации, и часть из них нельзя сделать если чип не подходящий!

На пример, следующие модификации можно сделать если чип STM32F1xxCBxx:

STM32 + STM8
Only STM32
Only STM8
Но если чип STM32F1xxC8xx, то только следующие:

Only STM8
По этому для модификации STM32 + VCP вместе с программатором покупаем чип STM32F1xxCBxx.

После модификации до STM32 + VCP программатор теряет возможность прошивать STM8!

В данном посте я делаю модификацию STM32 + VCP.

0) Руки из правильного места 😉

1) Немного знаний

2) Паяльник
3) Мультиметр с прозвонкой

4) ПК с ОС Windows

5) Китайский клон ST-Link V2

6) Чип STM32F1xxCBxx (если программатор уже у вас в руках, и чип подходящий — то дополнительный чип покупать не обязательно)

7) USB-UART адаптер либо второй ST-Link V2

Что ж, вскрываем.

Смотрим маркировку чипа.
В желтом чип 103CB — его можно модифицировать до модификации STM32 + VCP.
В фиолетовом же на первом фото 102С8 — его до нужной модификации модифицировать нельзя, придется менять чип.
На втором фото 103CB.
Мне же повезло, у меня чип 101CB.
Далее есть два пути:
USB-UART (вариант сложнее) либо второй ST-Link V2


Если у вас USB-UART:

1) Прозвонкой находим резистор который подключен к BOOT0.
Аккуратно его выпаиваем. (резистор еще понадобится, не оторвите дорожки!)
А сам BOOT0 этим же резистором подтягиваем к питанию.
Далее паяем комариные письки на контакты PA9(TX) и PA10(RX) :
(Как оказалось, на PA9 подключен светодиод, так что прозваниваем к какой стороне светодиода или резистора рядом он подключен — и подпаиваемся туда, меньше геморроя 😉

К ним подпаиваем USB-UART, а так же не забываем подпаять к нему же питание и землю.
Качаем загрузчик Protected-2-1-Bootloader.bin
Прошиваем с помощью STM32 Flash loader demonstrator
Дабы не удлинять пост еще больше, не буду расписывать работу данной утилитой, мануалов в сети полно.
На пример мануал от товарища stD

После прошивки отпаиваем PA9 иPA10, PA10 оставляем если хотим вывести пин SWO

На платах есть по 4 контакта, в некоторых случаях они уже промаркированы, в противном же случае прозваниваем их относительно PA13(SWDIO) и PA14(SWCLK), подпаиваемся вторым ST-Link V2, не забываем подпаять к нему же питание и землю.
Прошиваем с помощью STM32 ST-LINK Utility
Дабы не удлинять пост еще больше, не буду расписывать прошивку данной утилитой, мануалов в сети полно.
Единственное скажу что скорее всего понадобится снять защиту, иначе не прошьется.
Для этого в программе STM32 ST-LINK Utility жмем Target > Option Bytes, переключаемRead Out Protection в Disabled и жмем Apply

После прошивки подключаем прошитый ST-Link уже почти V2.1 к ПК
В программе STM32 ST-LINK Utility жмем ST-LINK > Firmware update
Жмем Device Connect — получаем список возможных модификаций:

Выбираем нужную вам модификацию, в моем случае STM32+MSD+VCP и жмем Yes >>>>
Ждем пока завершится обновление.
В итоге получаем сообщение об удачном завершении:

Так как SWIM и RST после такой модификации не работают — отрезаю их.
Так же отрезаю дублирующие 5V и 3.3V.
Получается 4 свободных пина.
На них подпаиваюсь проводками к чипу:
PA10 -> SWO
PB0 -> NRST
PA3 -> RX
PA2 -> TX

Вывожу все на основной разъем, на оставшиеся свободные пины.
Получилась такая распиновка:

Мой девайс после модификации:

Накарябал скальпелем маркировку на корпусе:

Не забываем отмыть плату после пайки )

В итоге девайс должен определяться так:

Я без понятия чему равен объем виртуальной флешки (в данном случае к ST-Link V2.1 был подключен 103C8)

Если на нее закинуть файл прошивки — программатор прошьет чип без программ.

Спасибо за внимание!

С вопросами обращайтесь в комментарии, чем смогу — помогу.

Как-то так исторически сложилось, что, хоть и «подружился» с микроконтроллерами от ST Microelectronics я уже давненько, но полноценного отладчика до сих пор у меня не было. «Подсадил» на STM8 меня друг, подарив на день рождения платку STM8S-Discovery. Вдоволь наигравшись с целевым камушком, я отключил отладочную часть платки, а встроенный ST-Link стал «рабочей лошадкой» в моей лаборатории. Таковым и оставался бы до сих пор, и всё было хорошо, да вот где-то с полгода назад случилась ситуация, которая сподвигнула меня на изыскания по размножению отладчика: мне пришлось подключить обратно отладочную часть дискавери, так как проэкт, над которым предполагалось работать, использовал тот же проц, что и в дискавери, и обросла платка некислым таким «ежиком» из проводов и деталюшек, закипела работа… А тут заказчик звонит-мол, приедь ко мне да подправь, плиз, прошивочку в своём устройстве-да там фигня, задержку на секунду увеличить и всего-то делов… А «рабочая лошадь» чуть ли не намертво к рабочему столу привязана проводами да кабелюками, блин! Пришлось разбирать, конечно… Вернувшись от заказчика и грустно поглядев на то, что ещё утром было полем для бурной деятельности по проверке идей-полез искать вдохновения в гугле. Кому интересно, что из этого получилось-добро пожаловать под отрезь… 🙂

Вариант «пойти и купить», конечно же, рассматривался. Но, поскольку «неспортивно», был оставлен в качестве «плана Б». Очень быстро были найдены фотографии внутренностей полноценного ST-Link, его «слизанная» схема, и всё хорошо, да только прошивки для полного счастья не хватало. Но на третьей странице гугля была найдена ссылочка на наш же форум, где пользователь Chinook выложил «слизанную» им прошивку от ST-Link V2.
Само собой разумеется, вариант «сделать самому» тут же перевесил «план Б». Ну и кроме того, возможность добавить некоторый функционал, отсутствующий в фирменном St-Link, весьма таки грела душу.
Тут надо заметить, что чаще я делаю мелкие девайсики, которые дополняют или расширяют функционал родительских устройств. Счётчики там всякие, интерфейсные платки, индикаторы и прочая тому подобная мелочёвка. И большинство этих штучек получают свои миллиамперы питания от родительского устройства, вживляясь в его схему. Поэтому отсутствие в штатном St-Link возможности запитывать таргет непосредственно от отладчика, и как следствие-отсутствие возможности выбора питания-5 или 3.3 вольта-меня нисколько не радовало. Да, конечно же, существует лабораторный источник питания и всё такое… Собственно говоря, первое включение после сборки всегда через лабораторный БП-мало ли что, даже новые деталюшки и то не всегда бывают исправными, ну а если уж где-то «соплю» проглядеть-так и подавно проблемы будут. Но когда всё проверено-зачем лабораторный БП гонять, если можно запитаться прямо от компа?
Вот примерно с такими мыслями я и приступил к компиляции входных данных. Были изучены доступные схемы отладчиков-из мануалов по разным версиям Discovery и найденные в сети, внесены изменения и доработки, в результате получилась вот такая spaghetti diagram схема:

Поскольку на момент составления схемы всё ещё были некоторые нестыковки, в частности-разночтения в подключении ножек идентификации, разводка JTAG в одной из схем отличалась, и, кроме того, окончательно было непонятно: заработает этот компот как надо или же нет-то часть ножек контроллера была выведена на контактные площадки для удобства перекоммутации. А если бы эта компиляция не заработала-то эти дополнительные контактные площадки позволят использовать плату как отладочную для какого-нибудь простенького USB устройства. Как раз с целью возможности использовать эту плату как отладочную я и развёл на ней JTAG-интерфейс, ибо JTAG J-Link у меня имеется в виде отдельного устройства. А для облегчения программирования платы теми, кто будет повторять эту конструкцию, на отдельный разъём были выведены все контакты, необходимые при программировании микроконтроллера с использованием его собственного загрузчика. Забегая вперёд, замечу, что ошибки в выбранной мной для работы версии схемы всё же сделали своё чёрное дело, и готовую плату пришлось-таки немного почикать скальпелем и засопливить перемычками. В статью пошла уже исправленная версия схемы и разводки, ну а фотки-уж как есть…

Разводка разъёма SWIM выполнена в соответствии с распиновкой оригинального ST-Link’а, поскольку у меня есть уже очень много устройств, кабеля программирования которых используют именно эту распиновку. А вот распиновка SWD/JTAG разъёма моя собственная. Во-первых, применённый в оригинальном ST-Link разъём не вписывался в выбранный мной корпус, во-вторых, для штыревых разъёмов типа PLS-PLD я, по возможности, предпочитаю делать «диагональные» или «симметричные» разводки разъёмов, как минимум в той части, в которой разведена сила. При этом, если вдруг разъём случайно будет перевёрнут на 180 градусов, земля и питание всё равно попадут на свои места-меньше риска испустить magic smoke. Просто устройство не будет работать. Естественно, если в разъёме присутствуют сигналы выборки или включения, неплохо бы позаботиться, чтобы при перевороте разъёма они попали на пины, которые обеспечат этим сигналам неактивные уровни. Такая себе защита от дурака, хотя и давно известно, что хуже дурака-только инициативный дурак…


Плата разводилась с использованием компонентов типоразмера 0603 под корпус 20-13 фирмы Sanhe. Можно было, конечно, использовать и 0805-места на плате более чем достаточно. Но я уже давненько перешёл на 0603, и не стал изменять своим привычкам. Размещение компонентов выбрано таким, чтобы плату можно было как монтировать в корпус (при этом кварцевый резонатор и разъёмы отладчика запаиваются на обратной стороне платы и используются выводные светодиоды), так и без корпуса, при этом разъёмы и кварц запаиваются сверху, и используется двухцветный светодиод FYLS-1210. Поскольку мне до сих пор не понятно, как и для чего ST-Link использует контроль напряжения целевого устройства, предусмотрена возможность коммутации измерительного входа микроконтроллера с постоянно присутствующего напряжения питания на напряжение питания целевой платы. Для контроля напряжения питания целевой платы необходимо запаять резистор R14, для отключения возможности контроля должен быть запаян резистор R16, причём должен быть запаян либо один, либо второй, но никак не оба вместе. В моей плате запаян R14, всё отлично работает.


Печатная плата устройства во всех отношениях экспериментальная. Экспериментальное устройство, первая проба металлизации отверстий в домашних условиях, первый тентинг с использованием фоторезиста Riston, первая попытка вытравить зазоры 0.2мм на гальванически нарощенной и из-за этого толстой фольге, первое использование сухой плёночной маски… Что-то из всего этого получилось идеально, что-то не очень, но это уже тема для отдельной статьи.
После запаивания компонентов и пробной установки разъёмов плата приобретает следующий вид:

Делаем пробное подключение к лабораторному блоку питания, убеждаемся в отсутствии дыма и нагрева деталей, убеждаемся, что стабилизатор выдаёт свои 3.3 вольта. Потом подключаем платку к компьютеру, который должен бодро отрапортовать о неопознанном устройстве USB. Раз так-значит пока всё в порядке.
Идём на сайт ST Microelectronics и скачиваем оттуда Flash Loader Demostrator. «Повбывав би гадiв», которые ST сайт делали. Найти там что-либо… Впрочем, извините, отвлёкся. Скачиваем, распаковываем, устанавливаем. Прямо на разъём загрузчика одеваем перемычку, которая соединит вывод BOOT0 микроконтроллера с плюсом питания и введёт контроллер в режим загрузчика, туда же подключаем разъём от USB-RS232 преобразователя:

Подключаем это всё в USB следующем порядке: cначала подключаем USB-RS232, затем подключаем ST-Link, отключать потом будем в обратном порядке. Запускаем Flash Loader Demonstrator, и, если мы не поджарили микроконтроллер во время впаивания, не убили его статикой и не перепутали RX/TX при подключении интерфейса, то софтинка должна бодро отрапортовать, что Target is readable. А значит, ещё один шаг к созданию собственного отладчика пройден.
Из прикреплённого к статье архива извлекаем файлик STLinkV2.J16.S4.bin, натравливаем на него Flash Loader, ждём пару секунд. Готово! Отключаем сначала ST-link, затем интерфейс. Я не рассматриваю вариант прошивки через JTAG-у кого он есть, те и сами знают, как это сделать; у новичков же адаптер JTAG вряд ли будет. Собственно, его-то мы как раз и делаем… Итак, отключаем интерфейс программирования, снимаем перемычку, и торжественно подключаем наш свежеиспечённый ST-Link к компьютеру. Который должен найти новое устройство и запросить на него дровишки, которые мы уже успели заблаговременно скачать с сайта производителя. Торжественно подключаем целевое устройство, запускаем IAR (ну или кто там в чём программирует), нажимаем «записать» и… Нифига не работает! Can not communicate with tool. Вот же ж блин! Столько труда и всё впустую. Последующие три дня проходят в попытках понять что же не так. Попытки замыкания ножек идентификации на землю и на питание в разных комбинациях, изучение осциллограмм, курение логов USBLyzer’а… Пока в один вечер, а если точнее-уже давным-давно ночер, не промахнулся по менюшке и вместо STVP не запустил St-Link Upgrade Utility. Хотя и обновлять на ту же самую версию-нонсенс, палец автоматом кликнул «Upgrade». Апгрейд прошёл штатно, но что самое главное-девайс перестал отваливаться и наконец-то заработал! Когда радости немного поулеглись (я аж проснулся), вернул схему к первоначальному виду и повторил эксперимент. И таки да, дело не в перемычках, а в прошивке. Судя по всему, что поскольку Chinook скомпоновал прошивку из двух разных версий, что-то в ней не совсем срослось. И хотя устройство и определяется как полноценный дискавери, работать оно не может. Корректное обновление записывает полноценную прошивку и решает проблему.

Теперь, когда железяка работает, пора подумать и о корпусе. Не, я, конечно, понимаю, что «труЪ киберпанк» и всякое такое… Но пару выездов для работы на территорию заказчиков, когда приходилось располагаться с ноутбуком посреди торчащих прутьев арматуры, а провода и платы размещать между кучками стальной стружки, при этом бояться пошевелиться, чтобы случайно что-нибудь ни на таргет, ни на отладчик не уронить, и самому при этом с насеста не сверзиться-навели на стойкую уверенность, что корпус таки быть должен. Как минимум, одной зоной внимания меньше… Берём наш свежеприобретённый корпус, берём боевой «Дремель» и зубопротезный бор, и через пяток минут жужжания бормашинкой и ещё пяток-шуршания надфилем получаем вот такую красоту:

Ну что ж, теперь можно и разъёмы на их постоянное место впаять, и корпус закрыть. Всё получилось, железяка работает. Но… У нас получилась унылая белая (серая, чёрная-кому там какая попадётся) коробка с двумя разъёмами и перемычкой. Уберём её в ящик стола на месяц-другой, потом решим поШкодить, достанем-и будем долго вспоминать, какой контакт разъёма куда надо подключать, и в какое положение перемычку ставить. Что-то вспомнится, что-то нет, прийдётся доставать из архива проэкт, открывать его и смотреть, что там куда подключено. Непорядок, одним словом. А раз так-надо этот непорядок исправить, желательно, одновременно скрасив унылость монотонной коробки. Сходим на сайт ST, нагло утырим у них их логотип, засунем его в Photoshop (или любимый опенсорсный графический редактор-на выбор по вкусу), немножко там над ним поколдуем… Посолим, поперчим, испечём до готовности:
Полученную бумажку можно вырезать и приклеить на тонкий двухсторонний скотч, но-«нормальные герои всегда идут в обход». Выпросил я как-то на одной из обслуживаемых мной фирм жидкость чудную, заморскую, «жидкий скотч» называемую. Остатки, на попробовать, а вдруг пригодится. Как оказалось впоследствии-очень полезная в мастерской штука. Выкройку на заготовку приклеить перед вырезанием, наклейки всякие сделать, шильдики… Жена с дочкой для рукоделия ихнего таскают периодически, но чего они там с ним делают-не знаю. В общем, у кого ещё этой штуки в арсенале нету-рекомендую обзавестись. А у кого есть-берём баллон и брызгаем на обратную сторону бумажки. Тут должен сделать два замечания. Во-первых, брызгать надо ещё не вырезанный шильдик: так покрытие будет равномерным, и весь стол потом не будет из себя представлять липучку для мух. Хотя брызгать в любом случае лучше на балконе или в подъезде, ибо разлетается неимоверно. Если раз-два, да ещё газетку на стол постелить, то вроде как и ничего. А вот если пользоваться постоянно-комки липкой пыли потом будут обнаруживаться «в самых неожиданных местах»(С). О том, что дышать распылом крайне не рекомендуется, я даже не упоминаю. И во-вторых, не следует пытаться за один раз нанести всю толщину покрытия, особенно на бумаге. Вот как раз о неприятном свойстве бумаги всё впитывать я после продолжительной работы с плёночными шильдиками как-то забыл, ну и дунул, что называется, «от души». Налитая лужица тут же бодро впиталась в бумагу, и теперь у меня наклейка не беленькая, а как будто масляными пальцами залапанная местами. Переделывать я уже не стал, ну а вы постарайтесь не повторять моих ошибок. Наносите клеевой состав тонкими слоями, и каждый раз дожидайтесь высыхания предыдущего слоя (2-3 минуты при комнатной температуре). При этом первые два слоя «запечатают» поры в бумаге, а последующие два-три создадут необходимую для хорошей адгезии толщину слоя. Вот теперь, после окончательной сушки, можно вырезать готовый шильдик и клеить его на наш корпус. Выглядеть это будет так:

Ну вот, а теперь можно и попрограммировать. Равно как и попрошивать, поотлаживать…

Пару слов напоследок. Поскольку это моя первая статья в сообществе, просьба ногами не бить и гнилыми помидорами/тухлыми яйцами не кидать. Объективная критика, наоборот, очень даже приветствуется. Статью размещаю в личном блоге, можно ли/нужно ли её скопировать куда-то в профильный раздел-пусть решают общественность и Ди Хальт. Отладчик был сделан в январе 2013, и 95% этой статьи было написано тогда же, но дописал оставшиеся 5% и публикую я всё это только сейчас, потому что до сего момента не было случая проверить работу отладчика по SWD и JTAG. Собственно, до этого времени работал преимущественно с STM8. Сейчас появилась девборда с STM32, работоспособность SWD/JTAG проверил, даже прошивку в клоне уже успел обновить на крайнюю, всё в порядке. Так что публикую со спокойной душой. 🙂

UPD:Перезалил ST-Link V2 PCB.zip, так как в него по недосмотру попала старая версия разводки, та самая, которую пришлось скальпелем чикать. Файл CAMTASTIC-LUT.pdf был старый! С фоторезистным вариантом-CAMTASTIC.pdf всё было и есть в порядке. Если Вы будете пробовать изготавливать плату по ЛУТ-технологии-перекачайте, пожалуйста, архив снова. Извините, недосмотрел, сам я уже давно от ЛУТ ушёл…

UPD2:Коллективный разум в комментариях выявил недостаток этой версии отладчика-отсутствие преобразователя уровней. Собственно говоря, во время проэктирования этой платы я даже и не знал, что в оригинале этот самый преобразователь есть. Соответственно, его отсутствие не позволит работать с целевыми платами, МК в которых запитаны от напряжения существенно ниже 3.3в. С этим отладчиком работа с такими платами будет возможна только в случае временного повышения напряжения питания до 3.3в (если это не приведёт к повреждению каких-либо других компонентов платы, естественно). Ну что ж, появится свободное время-буду думать о второй версии этой платы, уже с преобразователем уровней, и, возможно, гальванической развязкой. А пока хочу отдельно и особо поблагодарить коллег dosikus , GYUR22 ,Katz и Vga за конструктивную критику и ценные комментарии…

Метачан Архивач | Архив имиджборд — metachan.ru


#252087434
Двач — Бред — 2ch.hk/b/res/252087434.html

ull?.jpg 1261✘554, 643Кб

чап двах, посоветуйте абсолютному нубу который сидит на подах с 2016 года годнявую плату и дрипку, сейчас гоняю с чароном,


#252087325
Двач — Бред — 2ch.hk/b/res/252087325.html

ull?.jpg 1280✘1024, 812Кб

Единственное РЕАЛИСТИЧНОЕ и смотрибельное, глубокое аниме на все времена без этой ебаной ояш-щины, магии, роботов, вампиров, демонов,


#252087305
Двач — Бред — 2ch.hk/b/res/252087305.html

ull?.jpg 750✘1334, 291Кб

Накидайте милф годных пж Накидайте милф годных пж


#252087172
Двач — Бред — 2ch.hk/b/res/252087172.html

ull?.jpg 225✘225, 7Кб

Сап /b/. Я кун, пруфов не будет. Сегодня был в Киеве. Зашел в кафе «Хармс» и заказал себе салатик. Во



#252087071
Двач — Бред — 2ch.hk/b/res/252087071.html

ull?.jpg 195✘259, 5Кбull?.jpg 194✘260, 9Кб

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


#252087062
Двач — Бред — 2ch.hk/b/res/252087062.html

ull?.jpg 270✘223, 158Кб

Есть тут вкатуны в программирование ЧПУ? У меня есть мечта работать на удаленке и в дальнейшем доучить английский и получать


#252087054
Двач — Бред — 2ch.hk/b/res/252087054.html

ull?.jpg 510✘340, 293Кбull?.jpg 1139✘635, 702Кбull?.jpg 1280✘960, 2963Кбull?.jpg 650✘869, 147Кб

Сап двач, я не могу больше это терпеть. За что я был рождён в Мордоре? Просто один день из мира


#252087027
Двач — Бред — 2ch.hk/b/res/252087027.html

ull?.jpg 1308✘1371, 454Кб

Хочу засадить няшному мальчику-курьеру Самоката. Прошу советов мудрых, как бы лучше провернуть это дело. Хочу засадить няшному мальчику-курьеру Самоката. Прошу


#252087016
Двач — Бред — 2ch.hk/b/res/252087016.html

ull?.jpg 601✘604, 46Кб

Здарова! Прошу, покидайте видео инцидента 9/11 , я знаю, у вас есть. Пожалуйста. Здарова! Прошу, покидайте видео инцидента 9/11,


#252087005
Двач — Бред — 2ch.hk/b/res/252087005.html

ull?.jpg 1280✘1024, 624Кб

DARS VERI DUN THUNORS DAN ENSKELLE. DARS GUMES JORUN VALD SVAIRA. DARS VERI DUN THUNORS DAN ENSKELLE. DARS GUMES JORUN


#252086951
Двач — Бред — 2ch.hk/b/res/252086951.html

ull?.jpg 1500✘1120, 2822Кб

Анон, что вообще хорошего в Германии? Тут пишут всякую дичь про нее, это правда? Анон, что вообще хорошего в Германии?


#5706166
Двач — Автомобили — 2ch.hk/au/res/5706166.html

ull?.jpg 2048✘1366, 829Кбull?.jpg 2048✘1364, 1077Кб642.webm 1280✘720, 19740Кб503.webm 1184✘504, 3992Кб

ПЕРЕЛОЖИЛИСЬ В 22 СПОРТИВНО-ПРОФЕССИОНАЛЬНЫЙ ДРИСТОТРЕД FIA Intercontinental Drifting Cup Formula DRIFT Drift Masters European Championship D1 GP RDS GP Трансляции


#506869
Двач — Дневнички — 2ch.hk/dr/res/506869.html

9920.mp4 1280✘720, 4690Кб

Мне 23, я работаю в Макдаке с 2016 года, с небольшим перерывом. Должность: сотрудник кассовой комнаты. Де-факто обычный ЧБР. Работаю


#252086935
Двач — Бред — 2ch.hk/b/res/252086935.html

ull?.jpg 615✘449, 210Кб

Я тут в такси услышал песню одну С восточным (арабским?) уклоном, жанр house/club, там где то 100 BPM (сам бит


#252086848
Двач — Бред — 2ch.hk/b/res/252086848.html

ull?.jpg 562✘749, 86Кб

я чмоня я чмоня


#252086836
Двач — Бред — 2ch.hk/b/res/252086836.html

ull?.jpg 4128✘1856, 1311Кб

Эй, анончики, что за красное полусладкое сказать можете? Это, конечно, не «Шато Говно» за 100500 шекелей, но и не самое


#252086723
Двач — Бред — 2ch.hk/b/res/252086723.html

9820.mp4 852✘480, 5322Кб7810.mp4 640✘360, 5447Кбull?.jpg 604✘403, 111Кб740.webm 460✘286, 2958Кб

ЭТО ТРЕД ЮМОРА! ЭТО ТРЕД ЮМОРА!


#252086698
Двач — Бред — 2ch.hk/b/res/252086698.html

ull?.jpg 788✘93, 37Кб

Как скрыть сей высер тупой чмо Как скрыть сей высер тупой абу


#252086649
Двач — Бред — 2ch.hk/b/res/252086649.html

ull?.jpg 2048✘2048, 2145Кб

Блять короче, усталость дохуя, вокруг пахнет илом, глаза поворачивать больно, жратт неохота, туплю, потею, харкаюсь, сопли, 37,2 Блять короче, усталость


#252086542
Двач — Бред — 2ch.hk/b/res/252086542.html

ull?.jpg 640✘640, 40Кб

Двач, у меня наверно самый важный вопрос к тебе, почему когда хочешь срать, не можешь поссать??? Двач, у меня наверно


#252086524
Двач — Бред — 2ch.hk/b/res/252086524.html

ull?.jpg 1766✘1080, 1006Кб

Überheblich, überlegen Übernehmen, übergeben Überraschen, überfallen Deutschland, Deutschland über allen! Самой великой нации тред! Почему они такие охуенные? Начиная от


#252086472
Двач — Бред — 2ch.hk/b/res/252086472.html

ull?.jpg 1139✘230, 65Кбull?.jpg 700✘446, 93Кб

Почему в любом треде, где оп решается на самовыпил, живя в полном безвылазном говне и одиночестве, ни имея вообще никакой



Пишем под микроконтроллеры STM32 в Arduino IDE

Тема программирования микроконтроллеров ранее многократно поднималась в этом блоге, но исключительно в контексте микроконтроллеров AVR и, соответственно, Arduino. Сегодня же речь пойдет о микроконтроллере STM32F103C8T6 на базе ядра ARM 32 Cortex-M3. Вы наверняка слышали об архитектуре ARM — она используется в большинстве современных телефонов и планшетов, а также Raspberry Pi, полетных контроллерах для квадрокоптеров, и много где еще.

Список покупок

Для повторения шагов из сей заметки вам понадобится следующие железки:

К моменту, когда вы будете читать эти строки, ссылки могут устареть. Однако необходимые товары легко находятся по запросам «STM32F103C8T6 Development Board» и «ST-Link v2 Programmer» как на AliExpress, так и на eBay. Плата также известна под названием «STM32 Blue Pill».

Важно! Заметьте, что USB-разъем на этих платах часто не слишком надежно припаян и может быстро оторваться. Первым делом после покупки рекомендуется его подпаять.

О плате Blue Pill

Ниже приведены некоторые характеристики платы и используемой в ней микроконтроллера:

  • Микроконтроллер 32-х битный;
  • Рабочая частота 72 МГц;
  • 64 Кб flash-памяти;
  • 20 Кб оперативной памяти;
  • Мне удалось насчитать 32 GPIO;
  • 12-и битный АЦП, 10 аналоговых пинов;
  • 16-и битный ШИМ, 15 ШИМ-пинов;
  • 3 UART канала, 2 I2C шины, 2 SPI шины;
  • Возможность отладки по SWD;
  • Плата питается от 3.3 В;

Расположение пинов (кликабельно — GIF, 1082x759, 143 Кб, источник):

Для сравнения, Arduino Nano стоит столько же и имеет похожий форм-фактор, но работает на 8-и битном микроконтроллере, имеет частоту 16 МГц, меньше пинов, лишь 32 КБ flash-памяти, 2 Кб оперативной памяти, 10-битный АЦП, 8-и битный ШИМ, по одному каналу UART, I2C и SPI, а про отладку он и вовсе слыхом не слыхивал. То есть, за те же деньги мы получаем куда более мощную железку.

Настройка Arduino IDE

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

Для программирования под данную плату нам понадобится кросс-компилятор для ARM, отладчик, стандартная библиотека C и клиент к программатору. В Arch Linux соответствующие пакеты ставятся так:

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-gdb \
  arm-none-eabi-newlib stlink

Далее учим Arduino IDE работать с нашей платой:

cd ~/opt/arduino/hardware
git clone https://github.com/rogerclarkmelbourne/Arduino_STM32.git

Мне дополнительно пришлось поправить Arduino_STM32/STM32F1/platform.txt:

# compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/
compiler.path=/usr/bin/

… ибо сыпались ошибки про то, что Arduino IDE не может найти исполняемый файл arm-none-eabi-g++.

После этого если открыть Arduino IDE, то в меню Tools → Board вы обнаружите большой выбор плат на базе микроконтроллеров STM32. Выбираем Generic STM32F103C. В Tools → Upload Method выбираем STLink. Четыре пина на плате с подписями 3.3V, IO, CLK и GND подключаем к пинам 3.3V, SWDIO, SWCLK и GND программатора соответственно. Проверяем джамперы на плате. Оба джампера (так называемые boot0 и boot1) должны стоять в положении 0.

Fun fact! Чтобы постоянно не возиться с проводами при подключении программатора, выясняя, провод какого цвета к какому пину платы нужно подключить в этот раз, можно взять кусок макетки и спаять адаптер на базе разъема IDC-10. Адаптер подключается к плате через четыре угловых гнезда с шагом 2.54 мм, а затем адаптер подключается к программатору через соответствующий шлейф. Больше никакой путаницы!

Пробуем скомпилировать и залить такой скетч:

void setup() {
  pinMode(PC13, OUTPUT);
}

void loop() {
  digitalWrite(PC13, HIGH);
  delay(100);
  digitalWrite(PC13, LOW);
  delay(100);
}

Fun fact! В плате Blue Pill светодиод стоит между ногой PC13 и VCC (схема [PDF]), а не между ногой и землей, как можно было бы ожидать. Поэтому, подавая HIGH на PC13, мы гасим светодиод, а подавая LOW — зажигаем.

Если при прошивке возникает ошибка:

st-flash 1.3.1
INFO src/common.c: Loading device parameters….
WARN src/common.c: unknown chip id! 0xe0042000

… проверьте, не перепутали ли вы пины CLK и IO, а также попробуйте зажать кнопку Reset на плате.

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

Поздравляю, среда разработки настроена!

Более сложный пример

Ниже приведен код посложнее, демонстрирующий использование ШИМ, аналоговых пинов, а также отладочный вывод по UART:

const int LED1 = PB8;
const int LED2 = PB9;
const int PTNT = PA0;
const int BTN = PB7;

int selected_led = LED1;
bool btn_was_high = false;

void setup() {
  pinMode(LED1, PWM);
  pinMode(LED2, PWM);
  pwmWrite(LED1, 0);
  pwmWrite(LED2, 0);
  pinMode(BTN, INPUT);
  pinMode(PTNT, INPUT_ANALOG);

  Serial.begin(115200);
}

void loop() {
  delay(100);

  if(digitalRead(BTN) == HIGH) {
    btn_was_high = true;
  } else if(btn_was_high) {
    btn_was_high = false;
    if(selected_led == LED1) {
      selected_led = LED2;
      pwmWrite(LED1, 0);
    } else {
      selected_led = LED1;
      pwmWrite(LED2, 0);
    }
  }

  int ptnt = analogRead(PTNT);
  int ptnt_mapped = map(ptnt, 0, 4095, 0, 65535);

  Serial.println(String(«ptnt = «) + ptnt + «, ptnt_mapped = » +
    ptnt_mapped);

  pwmWrite(selected_led, ptnt_mapped);
}

Соответствующая цепь, собранная на макетной плате:

При нажатии на кнопку один светодиод гаснет, а второй загорается. Яркость свечения светодиода регулируется потенциометром. Как видите, код очень мало отличается от обычного кода для Arduino. Отличаются только названия пинов, а также диапазоны значений, с которыми работают процедуры analogRead и pwmWrite.

Еще больше примеров можно найти в File → Examples → A_STM32_Examples.

Сторонние библиотеки

Многие библиотеки уже портированы под STM32 — Wire, Servo, LiquidCrystal, и другие. А что, если попытаться использовать стороннюю библиотеку с GitHub? Для эксперимента я решил попытаться воспользоваться библиотекой LiquidCrystal_I2C, уже знакомой нам по заметке Об использовании экранчиков 1602 с I2C-адаптером.

Добавляем библиотеку в Arduino IDE:

cd ~/Arduino/libraries
git clone \
 https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library.git\
 ./LiquidCrystal_I2C

Заливаем прошивку:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, PB6, PB7);

void setup() {
  lcd.begin();
  lcd.setCursor(0, 0);
  lcd.print(«Current time:»);
}

void loop() {
  delay(100);
   
  lcd.setCursor(0, 1);
  unsigned long tstamp = millis();
  int h = tstamp / 1000 / 60 / 60;
  int m = (tstamp / 1000 / 60) % 60;
  int s = (tstamp / 1000) % 60;

  String line = String(h) + «h » +
                String(m) + «m » +
                String(s) + «s»;

  int len = line.length();
  while(len < 16) {
    line += » «;
    len++;
  }

  lcd.print(line);
}

Любуемся результатом:

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

Само собой разумеется, не всякая библиотека, написанная под Arduino, так просто возьмет и заработает под STM32. Но, по всей видимости, для многих библиотек это действительно так.

Заключение

Итак, что же мы выяснили? Плата стоит как Arduino Nano, имеет похожий форм-фактор, но является при этом куда более мощной. Писать под нее можно точно так же, как под Arduino. При этом нам доступны если и не все те же библиотеки, что под Arduino, то по крайней мере очень многие из них.

А программируете ли вы под STM32 и если да, то что для этого используете?

Дополнение: Готовим «взрослую» среду разработки под STM32 в Linux

Метки: STM32, Электроника.

STM32 и первые шаги | Детали

После нескольких месяцев плавания в школе я, наконец, снова могу работать над этим проектом! Время для обновлений:

Во-первых, про MCU. Посмотрев на множество микроконтроллеров, победителем стал STM32F030F4P6. Подходит под все мои требования:

  • Heckin дешево (0,7 доллара за штуку)
  • Достаточно маленький, чтобы я мог втиснуть их много на печатную плату размером ~ 5×5 см. Пакет, правда, TSSOP20, а не DIP, но это шанс попрактиковаться в пайке SMD.
  • Очевидно, быстрее, чем ATtiny85.
  • Я могу разогнать его до 64 МГц без внешнего кристалла (96 МГц с кристаллом)

Имея это в виду, я также меняю название проекта на «STM32Miner». Лучше иметь короткое запоминающееся имя, чем полное предложение, которое трудно запомнить.

Во-вторых, я решил использовать I2C для связи между рабочим и главным устройством (главный MCU будет определен). Хотя использование I2C означает, что мастеру придется постоянно опрашивать рабочих для получения информации, хешрейт настолько низкий, что я не думаю, что это будет проблемой.32). Код SHA256, который я использую, предназначен для общих данных, поэтому некоторая оптимизация для биткойнов должна привести к более высокому хешрейту (я надеюсь).

(бесполезная информация: для измерения хешрейта я запрограммировал прошивку на переключение GPIO каждые 100 операций хеширования, затем используется логический анализатор для измерения ширины импульса (см. Ниже). При 39 мс на 100 операций в секунду получилось ~ 2564 ops / sec)

Кстати, я ищу ESP8266 / ESP32 как замену F030. ESP8266 имеет 32-битный процессор Xtensa, работающий на частоте 160 МГц (максимум), поэтому теоретически он должен быть несколько быстрее, чем F030.Но ESP-01 также в 2 раза дороже, чем F030, поэтому, если я не смогу заставить ESP8266 работать как минимум в 3 раза быстрее, чем F030, он бесполезен.

Получил ST-LINK, начало работы с демонстрационной платой STM32F030 ARM.

У меня есть программатор ST-LINK! 😃

Итак, я могу программировать демонстрационную плату STM32F030. Я думаю, что у этой демонстрационной платы нет официального названия. Однажды я уже пару раз играл с Arduino, ESP8266 и ESP32. Я только его запрограммировал.

Добавление тактовых переключателей, которые никогда не знали, нужен ли резистор для режима входных контактов в состоянии с высоким импедансом.Таким образом, его можно использовать для генерации случайного числа. Позже я также обнаружил, что в некоторых случаях резистор не нужен. Если MCU имеет встроенный резистор, решением будет установка другого режима вывода. 😂

Я был так подавлен. Действительно много.
«Даже кнопку сделать вообще не могу!»

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

В прошлом году за день до Рождества я заказал комплект резисторов, и доставка сюда заняла два месяца. Ждать пришлось довольно долго, а о службе доставки на Алиэкспресс я тогда еще не знала.Я просто выбрал более дешевый.

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

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

Однодолларовая 32-битная демонстрационная плата ARM
Эту демонстрационную плату ARM я купил на Aliexpress.
MCU — STM32F030F4P6.

И в цену с трудом верится.
Это около доллара! 😄


Выглядит оооочень некрасиво, но я был бы вашим хорошим другом. В моем проекте MCU абсолютно необходим для радиосвязи и простой безопасности. Когда-то я думал о 8-битных микроконтроллерах AVR. но он может быть дороже 32-битной ARM: STM32F030F4P6.
12
МОДЕЛЬ ШИНА ДАННЫХ ЧАСЫ FLASH RAM I / O ЦЕНА
ATtiny84a 8 бит 20 МГц 4KB 512B 0.560 $
STM32F030F4P6 32bit 48MHz 16KB 4,096B 15 0,385 $
* оптовая цена, например заказ 5K или 10K.

Я проверил другие 8-битные микроконтроллеры: ATtiny, ATmega, PIC. но STM32F030F4 для меня лучше с точки зрения производительности и рентабельности. Думаю, этого достаточно.

STM32 График цен
Начиная.

Я выполнил некоторые шаги из этого видео на Youtube.

Моя сегодняшняя записка:

  1. Активация Keil
    Не нужно взламывать Keil для серий STM32F0, G0 и L0. Активировать Keil в Интернете бесплатно и необходимо. Никогда не задумывался, есть ли там генератор ключей. Ох …
  2. Установка перемычки
    Почти в последней части, когда я увидел мигающий светодиод на Youtube, после загрузки кода в MCU я был сбит с толку тем, как войти в обычную загрузку.Я понял, что все направление отредактированного записанного видео с веб-камеры — обратное. Чтобы установить обычную загрузку, перемычку в Boot0 нужно соединить с GND, а затем нажать кнопку сброса. Если не использовать PA13 и PA14, без изменения кода перемычки можно будет загрузить снова.
  3. Получены ошибки при компиляции
    из памяти , но еще одна попытка, больше не повторится.
  4. Я смог немного узнать, как использовать STM32CubeMX для установки контактов и создания проекта.

MDK для STM32F0 / G0 / L0
В сотрудничестве с STMicroelectronics Arm предлагает бесплатную полнофункциональную версию Keil MDK для устройств STM32F0, STM32G0 и STM32L0 для конечных пользователей.

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

dekuNukem / STM32_tutorials: Учебник по STM32 с STM32Cube и Keil MDK-ARM

У вас уже есть некоторый опыт работы с Arduino, и вы хотите усовершенствовать игру в соответствии с разработкой встроенной системы ARM? Если да, то вы попали в нужное место!

Мы собираемся посмотреть, как начать работу с микроконтроллерами STM32 с использованием STM32Cube и Keil MDK-ARM, который считается «каноном», и аппаратной стоимостью всего 4 доллара.

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

Предварительные требования

Опыт работы с Arduino или другими встраиваемыми системами

Поскольку цель этого руководства — помочь вам перейти от Arduino к STM32, лучше всего иметь представление об основных периферийных устройствах микроконтроллера, таких как GPIO, UART и т. Д., А также о простых цифровых схемах.

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

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

Что вам понадобится

Вам действительно нужно купить какое-то оборудование, к счастью, оно очень дешевое, и для начала вам понадобится всего по 1 штуке. Хотя я рекомендую приобрести еще несколько на запчасти. Обычно доставка занимает 1-2 недели, и вы можете заплатить больше за более быструю доставку.

Программатор ST-Link v2

Это необходимо для загрузки программ в чип STM32.К счастью, они продаются по всему ebay и очень дешевы (обычно менее 3 долларов, включая доставку). Просто найдите ST Link v2 на ebay, и он должен выглядеть так:

Совет развития STM32F030F4P6

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

Подробнее об этой плате мы поговорим в следующем уроке.

Последовательный USB-адаптер

У вас, вероятно, уже есть один, если вы раньше играли с Arduinos.Если нет, зайдите на ebay и найдите CP2102. Конечно, работают и другие чипы, такие как Ch440 или FTDI. Это просто вопрос предпочтения.

Получить файлы

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

Что теперь?

Если вам не терпится приступить к делу, щелкните урок ниже и приступайте к работе!

Урок 0: Настройка и мигающий светодиод

Урок 1: Передача UART

Урок 2: Внешние прерывания GPIO

Урок 3: Прием UART и внешние файлы

Урок 4: Таймеры, ШИМ и сторожевой таймер

Урок 5: SPI и I2C

Урок 6: ОСРВ

Урок 99: Разное

Если вы не торопитесь, я предлагаю продолжить чтение, пока я буду говорить о проблеме Arduino, предстоящей тенденции 32-битных микроконтроллеров и схеме именования частей STM32.

Корпус Arduino

Теперь есть много веских причин оставаться в экосистеме Arduino. В конце концов, это в первую очередь дало толчок революции производителей. Последовательное оборудование, простая IDE и отличная поддержка сообщества означают, что людям стало проще, чем когда-либо, начать создавать то, что они хотят, а уровень абстракции оградил их от мелочей низкого уровня, таких как конфигурация периферии и настройки предохранителей.

Это все хорошо, и большинству людей это вполне устраивает.Однако, когда вы посмотрите на настоящий чип на большинстве Arduinos, вы найдете устаревший ATmega328P, 8-битный чип десятилетней давности с крошечным объемом оперативной памяти, ограниченными периферийными устройствами и неторопливой тактовой частотой. В результате в коммерческих ситуациях подобные 8-битные программы в основном используются в таких дорогостоящих приложениях, как дешевые игрушки. И мир во многом перешел на 32-битные микроконтроллеры.

Я не говорю, что 8-битные Arduinos стали совершенно бессмысленными, на самом деле они являются отличными инструментами обучения и более чем подходят для большинства хобби-проектов.Это просто , если вы хотите пойти дальше по пути разработки встраиваемых систем, старый добрый Arduino просто не собирается его сокращать.

Почему 32-битный?

Сегодня на рынке представлено огромное количество 32-битных микроконтроллеров, большинство из которых используют архитектуру ARM Cortex-M. ARM выдает лицензию на нее заинтересованным компаниям, в которые они добавляют свои собственные специальные функции и периферийные устройства. Это исключает затраты на разработку собственной архитектуры с нуля и является одной из причин, почему ARM сегодня так широко используется в мобильных вычислениях.

Популярные примеры включают линию STMicroelectronics STM32, линию LPC NXP и собственную линию SAM Atmel. Я использую STM32 в этом руководстве из-за его относительно большого сообщества, красивого графического инструмента настройки, низкой стоимости dev-board и обилия документации.

STM32 также широко используются в реальной потребительской электронике, например, Amazon Dash Button, драйверы 3D-принтера, Apple Watch, Fitbit, робот BB-8, у Nintendo Switch их 3 !.

Эти 32-битные чипы обычно работают быстрее, имеют гораздо больше памяти и периферийных устройств и даже дешевле, чем сопоставимые 8-битные чипы.Чтобы продемонстрировать, вот сравнение между Arduino и моим популярным чипом STM32, STM32F072C8T6:

.

Результат говорит сам за себя даже для младшего чипа STM32. Вот краткое описание:

Преимущества:

Высокая производительность

Даже экономичная серия F0 превосходит Arduino по мощности и периферийным устройствам. В результате вы сможете разрабатывать более крупные и сложные программы с более высокой производительностью и большим количеством возможностей подключения. RTOS также больше не является несбыточной мечтой, как на Arduinos.

Полная поддержка отладки

Аппаратная отладка поддерживается на всех микросхемах STM32, это означает, что у вас есть пошаговый режим, точки останова, программа просмотра памяти и все обычные вещи. Больше не нужно полагаться на println () , как на Arduino.

Универсальный, многоразовый и перспективный:

Есть сотен вариантов STM32 на выбор. Вы можете перейти от 50 центов STM32F0 до 400 МГц STM32H7. Все они используют один и тот же инструмент и структуру кода, поэтому переносить между ними тривиально легко.Они также в основном имеют одинаковую распиновку для данного типа корпуса, поэтому вы можете просто установить более мощный чип, не меняя конструкцию схемы, если возникнет необходимость.

Интегрированный загрузчик

Все STM32 имеют встроенный загрузчик для загрузки прошивки без использования программатора. Это можно сделать через последовательный порт, USB или даже через шину I2C, SPI и CAN, не занимая пользовательскую флеш-память, как это делает Arduino.

5В толерантный

Все цифровые контакты устойчивы к 5 В, поэтому вы можете безопасно подключать их к устаревшим системам.

Рентабельность

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

Недостатки:

Конечно, есть причины, по которым STM32 не так популярен среди производителей, как Arduinos, и это лишь некоторые из них:

Кривая обучения

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

Выбор платы

Вы захотите получить доску для разработчиков, а ее просто не так много. Несколько штук ST делает самостоятельно, а на eBay есть несколько дешевых. Мы коснемся этого позже.

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

Очевидно, что сообщество STM32 не так активно, как сообщество Arduino, и в результате доступно не так много готовых к использованию библиотек.Я надеюсь, что это руководство поможет в этой ситуации, и мы рассмотрим написание ваших собственных библиотек, а также преобразование существующих библиотек Arduino.

Заключение

32-битные микроконтроллеры

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

Схемы именования STM32

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

Посмотрев на 2 символа сразу после STM32 , вы также можете определить, какое ядро ​​процессора ARM использует чип:

Серия STM32 Ядро ARM
F7, H7 Cortex-M7F
F4, F3, L4 Cortex-M4F
F2, F1, L1 Cortex-M3
L0 Cortex-M0 +
F0 Cortex-M0

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

Щелкните здесь, чтобы просмотреть спецификации всех микросхем STM32.

Что не так с Blue Pill?

Blue Pill — еще одна очень популярная плата для разработчиков с чипом STM32F103. Однако лично мне он не очень нравится по ряду причин:

  • STM32F1 — это очень старый дизайн (которому более 10 лет в 2018 году), поэтому отсутствуют некоторые удобные функции более поздних чипов, такие как инверсия контактов TX / RX, встроенные подтяжки USB, резервное копирование даты RTC и многое другое.

  • Более того, многие периферийные устройства просто отсутствуют по сравнению с более новыми чипами STM32F0, например аналоговые компараторы, I2S, HDMI_CEC и так далее.

  • STM32F1 имеет несколько неприятных ошибок проектирования оборудования, на которые следует обратить внимание при использовании определенных периферийных устройств.

  • Есть тонны поддельных чипов STM32F103!

  • серии STM32F0 дешевле.

  • Серия

    STM32F0 имеет бесплатную лицензию Keil MDK без ограничения размера кода.

Поэтому я рекомендую вначале начать с более новых чипов STM32F0.

Следующие шаги

Вот и все для введения! На данный момент вы должны понимать преимущества 32-битных микропроцессоров и заказывать необходимое оборудование на ebay.

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

НАЖМИТЕ МЕНЯ, ЧТОБЫ ПЕРЕЙТИ К СЛЕДУЮЩЕМУ УРОКУ

Перейти на очень маленькое оборудование (Часть 1)

Насколько низко мы можем пройти , пройти и при этом сделать что-нибудь полезное?

Я недавно купил эту до смешного дешевую плату:

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

Оборудование

STM32F030F4P6 — впечатляющее оборудование:

  • CPU: Cortex M0 48 МГц (всего 12000 логических вентилей, в минимальной конфигурации),
  • Оперативная память: 4 КБ,
  • Flash: 16 КБ,
  • АЦП, SPI, I2C, USART и пара таймеров,

все в корпусе TSSOP20.Как видите, это очень маленькая 32-битная система.

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

Если вы надеялись увидеть, как использовать подлинный Go для программирования этой платы, вам нужно еще раз прочитать спецификацию оборудования. Вы должны признать правду: вероятность того, что кто-то когда-либо добавит поддержку Cortex-M0 в компилятор Go, ничтожно мала, и это только начало работы.

Я буду использовать Emgo, но не волнуйтесь, вы увидите, что он дает вам столько Go, сколько может на такой маленькой системе.

До того, как мне пришла эта плата, не было поддержки какого-либо микроконтроллера F0 в stm32 / hal.После краткого изучения RM, серия STM32F0 оказалась урезанной до серии STM32F3, что облегчило работу над новым портом.

Если вы хотите выполнить следующие шаги этого поста, вам необходимо установить Emgo

.
  cd $ HOME
git clone https://github.com/ziutek/emgo/
cd emgo / egc
иди и установи
  

и установите пару переменных среды

  экспорт EGCC = path_to_arm_gcc # например. / USR / местные / рука / бен / рука-нет-eabi-gcc
экспорт EGLD = path_to_arm_linker # например./ USR / местные / рука / бен / рука-none-eabi-ld
экспорт EGAR = path_to_arm_archiver # например. / USR / местные / рука / бин / рука-ни-еаби-ар

экспорт EGROOT = $ HOME / emgo / egroot
экспорт EGPATH = $ HOME / emgo / egpath

экспорт EGARCH = cortexm0
экспорт EGOS = noos
экспорт EGTARGET = f030x6
  

Более подробное описание можно найти на сайте Emgo.

Убедитесь, что egc находится на вашем пути. Вы можете использовать go build вместо go install и скопировать egc в свой $ HOME / bin или / usr / local / bin .

Теперь создайте новый каталог для вашей первой программы Emgo и скопируйте туда пример сценария компоновщика:

  mkdir $ HOME / firstemgo
cd $ HOME / firstemgo
cp $ EGPATH / src / stm32 / examples / f030-demo-board / blinky / script.ld.
  

Программа-минимум

Давайте создадим минимальную программу в main.go файл:

  пакет основной

func main () {
}
  

На самом деле он минимален и компилируется без каких-либо проблем:

  $ egc
$ arm-none-eabi-size cortexm0.эльф
   текстовые данные bss dec шестнадцатеричное имя файла
   7452 172 104 7728 1e30 cortexm0.elf
  

Первая компиляция может занять некоторое время. Полученный двоичный файл занимает 7624 байта Flash (текст + данные), что довольно много для программы, которая ничего не делает. Осталось 8760 байт, чтобы сделать что-нибудь полезное.

А как насчет традиционных Привет, мир! код:

  пакет основной

импорт "FMT"

func main () {
fmt.Println ("Привет, мир!")
}
  

К сожалению, на этот раз все пошло хуже:

  $ egc
/ usr / local / arm / bin / arm-none-eabi-ld: / home / michal / P / go / src / github.com / ziutek / emgo / egpath / src / stm32 / examples / f030-demo-board / blog / cortexm0.elf раздел `.text 'не помещается в регион` Flash'
/ usr / local / arm / bin / arm-none-eabi-ld: регион `Flash 'переполнен на 10880 байт
статус выхода 1
  

Привет, мир! требует наконец STM32F030x6 с 32 КБ флэш-памяти.

Пакет fmt заставляет включать все strconv и отражают пакета. Все три довольно большие, даже уменьшенные версии в Emgo.Мы должны забыть об этом. Есть много приложений, которые не требуют вывода необычного форматированного текста. Часто достаточно одного или нескольких светодиодов или семисегментного дисплея. Однако во второй части я попытаюсь использовать пакет strconv для форматирования и печати некоторых чисел и текста через UART.

Блинки

На нашей плате есть один светодиод, подключенный между контактом PA4 и VCC. На этот раз нам нужно немного больше кода:

  пакет основной

Импортировать (
"задерживать"

"stm32 / hal / gpio"
"stm32 / hal / system"
"stm32 / hal / system / timer / systick"
)

var led gpio.Штырь

func init () {
system.SetupPLL (8, 1, 48/8)
systick.Setup (2e6)

gpio.A.EnableClock (ложь)
led = gpio.A.Pin (4)

cfg: = & gpio.Config {Режим: gpio.Out, Драйвер: gpio.OpenDrain}
led.Setup (cfg)
}

func main () {
для {
led.Clear ()
задержка.Миллисекунды (100)
led.Set ()
задержка.Миллисек (900)
}
}
  

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

system.SetupPLL (8, 1, 48/8) настраивает RCC для использования PLL с внешним осциллятором 8 МГц в качестве источника системного синхросигнала.Делитель ФАПЧ установлен на 1, мультипликатор на 48/8 = 6, что дает системную частоту 48 МГц.

systick.Setup (2e6) устанавливает таймер Cortex-M SYSTICK как системный таймер, который запускает планировщик каждые 2e6 наносекунд (500 раз в секунду).

gpio.A.EnableClock (false) включает часы для порта GPIO A. False означает, что эти часы должны быть отключены в режиме низкого энергопотребления, но это не реализовано в серии STM32F0.

Светодиод

Настройка (cfg) устанавливает вывод PA4 как выход с открытым стоком.

led.Clear () устанавливает низкий уровень на выводе PA4, что в конфигурации с открытым стоком включает светодиод.

led.Set () устанавливает PA4 в высокоимпедансное состояние, при котором светодиод выключается.

Давайте скомпилируем этот код:

  $ egc
$ arm-none-eabi-size cortexm0.elf
   текстовые данные bss dec шестнадцатеричное имя файла
   9772 172 168 10112 2780 cortexm0.elf
  

Как видите, blinky занимает на 2320 байт больше, чем минимальная программа.Осталось еще 6440 байт для дополнительного кода.

Посмотрим, работает ли:

  $ openocd -d0 -f interface / stlink.cfg -f target / stm32f0x.cfg -c 'init; программа cortexm0.elf; сбросить пробег; выход'
Откройте встроенный отладчик 0.10.0 + dev-00319-g8f1f912a (2018-03-07-19: 20)
Под лицензией GNU GPL v2
Для отчетов об ошибках прочтите
        http://openocd.org/doc/doxygen/bugs.html
debug_level: 0
скорость адаптера: 1000 кГц
адаптер_nsrst_delay: 100
ни один отдельный
скорость адаптера: 950 кГц
цель остановлена ​​из-за запроса отладки, текущий режим: поток
xPSR: 0xc1000000 ПК: 0x0800119c MSP: 0x20000da0
скорость адаптера: 4000 кГц
** Программирование начато **
автоматическое стирание включено
цель остановлена ​​из-за точки останова, текущий режим: поток
xPSR: 0x61000000 ПК: 0x2000003a msp: 0x20000da0
записал 10240 байт из файла cortexm0.эльф за 0,817425 с (12,234 КБ / с)
** Программирование завершено **
скорость адаптера: 950 кГц
  

Для этой статьи я впервые в жизни преобразовал короткое видео в анимированную последовательность PNG. Я впечатлен, до свидания, YouTube и извините, пользователи IE. См. Apngasm для получения дополнительной информации. Я должен изучить альтернативу на основе HTML5, но сейчас я предпочитаю APNG для коротких зацикленных видео.

Больше Go

Если вы не программист на Go, но слышали что-то о языке Go, вы можете сказать: «Этот синтаксис хорош, но не является значительным улучшением по сравнению с C.Покажи мне Go язык , дай ми каналы и горутины! ».

Вот вы:

  импорт (
"задерживать"

"stm32 / hal / gpio"
"stm32 / hal / system"
"stm32 / hal / system / timer / systick"
)

var led1, led2 gpio.Pin

func init () {
system.SetupPLL (8, 1, 48/8)
systick.Setup (2e6)

gpio.A.EnableClock (ложь)
led1 = gpio.A.Pin (4)
led2 = gpio.A.Pin (5)

cfg: = & gpio.Config {Режим: gpio.Out, Драйвер: gpio.OpenDrain}
led1.Setup (cfg)
led2.Setup (cfg)
}

func blinky (led gpio.Пин, период int) {
для {
led.Clear ()
задержка.Миллисекунды (100)
led.Set ()
delay.Millisec (период - 100)
}
}

func main () {
мигать (led1, 500)
мигающий (светодиод2, 1000)
}
  

Изменения кода незначительны: был добавлен второй светодиод, а предыдущая функция main была переименована в blinky и теперь требует двух параметров. Main запускает первый мигающий в новой горутине, поэтому оба светодиода обрабатываются одновременно . Стоит отметить, что gpio.Тип контакта поддерживает одновременный доступ к разным контактам одного и того же порта GPIO.

Эмго по-прежнему имеет ряд недостатков. Один из них заключается в том, что вы должны заранее указать максимальное количество горутин (задач). Пора отредактировать script.ld :

  ISRStack = 1024;
MainStack = 1024;
TaskStack = 1024;
MaxTasks = 2;

ВКЛЮЧИТЬ stm32 / f030x4
ВКЛЮЧИТЬ stm32 / loadflash
ВКЛЮЧИТЬ noos-cortexm
  

Размер стопки устанавливается наугад, и в данный момент нас это не интересует.

  $ egc
$ arm-none-eabi-size cortexm0.elf
   текстовые данные bss dec шестнадцатеричное имя файла
  10020 172 172 10364 287c cortexm0.elf
  

Еще один светодиод и горутина стоит 248 байт Flash.

каналов

Каналы — это предпочтительный способ связи между горутинами в Go. Emgo идет еще дальше и позволяет использовать буферизованных канала с помощью обработчиков прерываний . Следующий пример действительно демонстрирует такой случай.

  пакет основной

Импортировать (
"задерживать"
"rtos"

"stm32 / hal / gpio"
"stm32 / hal / irq"
"stm32 / hal / system"
"stm32 / hal / system / timer / systick"
"stm32 / hal / tim"
)

var (
светодиоды [3] gpio.Pin
таймер * tim.Periph
ch = сделать (chan int, 1)
)

func init () {
system.SetupPLL (8, 1, 48/8)
systick.Setup (2e6)

gpio.A.EnableClock (ложь)
светодиоды [0] = gpio.A.Pin (4)
светодиоды [1] = gpio.A.Pin (5)
светодиоды [2] = gpio.A.Pin (9)

cfg: = & gpio.Config {Режим: gpio.Out, Драйвер: gpio.OpenDrain}
for _, led: = range leds {
вел.Установленный()
led.Setup (cfg)
}

timer = tim.TIM3
pclk: = timer.Bus (). Часы ()
if pclk  

Изменения по сравнению с предыдущим примером:

  1. Третий светодиод был добавлен и подключен к контакту PA9 (контакт TXD на разъеме UART).

  2. Таймер (TIM3) был введен как источник прерываний.

  3. Новая функция таймера ISR обрабатывает IRQ.Прерывание TIM3 .

  4. Новый буферизованный канал емкостью 1 предназначен для связи между timerISR и blinky goroutines.

  5. Массив ISR действует как таблица векторов прерываний , часть более крупной таблицы векторов исключений .

  6. Оператор blinky для оператора был заменен оператором диапазона .

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

В этом случае мы хотим, чтобы таймер отсчитывал 1 кГц. Чтобы настроить предварительный делитель TIM3, нам нужно знать его входную тактовую частоту. Согласно RM входная тактовая частота равна APBCLK, когда APBCLK = AHBCLK, в противном случае она равна 2 x APBCLK.

Если регистр CNT увеличивается на 1 кГц, то значение регистра ARR соответствует периоду события обновления счетчика (событие перезагрузки), выраженному в миллисекундах.Чтобы событие обновления генерировало прерывания, должен быть установлен бит UIE в регистре DIER. Бит CEN включает таймер.

Периферийное устройство таймера должно оставаться включенным в режиме низкого энергопотребления, чтобы продолжать работать, когда ЦП переводится в спящий режим: timer.EnableClock (true) . В случае STM32F0 это не имеет значения, но важно для переносимости кода.

Функция timerISR обрабатывает запросов прерывания irq.TIM3 . timer.SR.Store (0) очищает все флаги событий в регистре SR, чтобы сбросить IRQ для NVIC.Практическое правило состоит в том, чтобы сбросить флаги прерывания немедленно в начале их обработчика из-за задержки отмены IRQ. Это предотвращает необоснованный повторный вызов обработчика снова. Для абсолютной уверенности следует выполнить последовательность очистки, но в нашем случае достаточно простой очистки.

Следующий код:

  выберите {
case ch <- 0:
// Успех
дефолт:
светодиоды [0] .Clear ()
}
  

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

Массив ISRs содержит векторы прерываний. //c:__attribute__((section(".ISRs "))) заставляет компоновщик вставлять его в раздел .ISRs.

Новая форма блинки для петли :

  для диапазона ch {
led.Clear ()
задержка.Миллисекунды (100)
led.Set ()
delay.Millisec (период - 100)
}
  

является эквивалентом:

  для {
_, ок: = <-ch
if! ok {
break // Канал закрыт.}
led.Clear ()
задержка.Миллисекунды (100)
led.Set ()
delay.Millisec (период - 100)
}
  

Обратите внимание, что в этом случае нас не интересует значение, полученное от канала. Нас интересует только то, что есть что получить. Мы можем дать ему выражение, объявив тип элемента канала как пустую struct struct {} вместо int и отправив struct {} {} значений вместо 0, но это может показаться странным для глаз новичка.

Давайте скомпилируем этот код:

  $ egc
$ arm-none-eabi-size cortexm0.эльф
   текстовые данные bss dec шестнадцатеричное имя файла
  11096 228 188 11512 2cf8 cortexm0.elf
  

Этот новый пример занимает 11324 байта Flash, что на 1132 байта больше, чем в предыдущем.

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

Встроенный светодиод всегда выключен, поэтому переполнение канала никогда не происходит.

Ускорим отправку, изменив таймер .ARR.Store (700) на таймер r.ARR.Store (200) . Теперь таймер ISR отправляет 5 сообщений в секунду, но оба получателя вместе могут получать только 4 сообщения в секунду.

Как видите, таймер ISR горит желтым светодиодом, что означает, что в канале нет места.

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

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

У нас все еще есть свободное место на Flash.

STM32F030F4P6 Плата «программатора AVR» - TINRS

Кшиштоф Фольтман

После первоначального успеха с LPC810 я был готов работать над чем-то с большим объемом памяти и большим количеством операций ввода-вывода.Поискав в каталоге Farnell простых, недорогих и удобных для любителей микроконтроллеров, я нашел крошечный микроконтроллер STM32F030F4P6 производства ST Microelectronics.

Чип основан на ядре ARM Cortex M0, имеет тактовую частоту 48 МГц, 16 КБ ПЗУ и 4 КБ ОЗУ и доступен в 20-контактном корпусе TSSOP диаметром 0,65 мм.
В отличие от микросхемы LPC, он предоставляет множество контактов ввода / вывода и более широкий выбор периферийных устройств, включая SPI и таймеры. Это все еще чип начального уровня. У него нет ни одного из продвинутых интерфейсов, таких как USB или I2S, присутствующих в его более крупных аналогах, но это отражается на цене - он стоит около 1.50 евро в единичных единицах.
Низкая цена особенно важна для людей, не имеющих опыта пайки SMD-корпусов с относительно мелким шагом - при некотором базовом увеличении их не слишком сложно паять, но получение большого количества запчастей делает весь процесс обучения менее напряженным.

Доступно несколько вариантов, чтобы убедиться, что я смогу использовать новый микроконтроллер. Один из них предполагает использование коммутационной платы SMD и макета. Однако я скептически относился к возможности заставить программатор / отладчик Serial Wire Debug работать с макетной платой - для этого обычно требуются довольно короткие провода и он чувствителен к проблемам с качеством сигнала.Существует также подход «мертвого жучка», заключающийся в том, что ИС приклеивается вверх ногами и припаивается к ней. Я отказался от этого из-за требуемых навыков пайки. Мой самый простой вариант заключался в использовании первой версии макетной платы с матрицей 10х10 см, которая прибыла из Китая не так давно.

После припаивания микросхемы к печатной плате мне понадобился способ проверить, что она работает. Самый простой способ добиться этого - добавить развязывающий конденсатор и порт SWD, а также использовать программатор STLink v2, который я получил от Stijn, для связи с чипом.Эти программаторы легко доступны на eBay или Aliexpress, и большую часть времени они работают нормально - проблемы обычно решаются путем удержания микросхемы в сбросе вручную. Пример ссылки на eBay для получения одного из этих программистов: Здесь

.

Чтобы получить адекватное качество сигнала, потребовались некоторые методы проб и ошибок: длинные кабели или слишком близкое расположение сигнальных проводов делают связь ненадежной на скоростях, которые использует STLink. Я нашел правильный файл конфигурации для использования с OpenOCD (32f0308discovery.cfg - он включен в OpenOCD).

Некоторое время спустя у меня была рабочая установка SWD. В моей системе и OpenOCD, установленном в / usr / local /, пример команды для стирания флэш-памяти и программирования файла .elf:

 sudo openocd -f /usr/local/share/openocd/scripts/board/32f0308discovery.cfg -c 'init' -c "program file.elf verify reset" 

Следующим шагом было написание небольшой программы, которая мигает светодиодом, чтобы убедиться, что основы работают. Для этого я решил использовать код и сценарий компоновщика для LPC в качестве отправной точки.Адреса памяти и весь код инициализации пришлось изменить, чтобы отразить различия между платформами. И никаких больше I2C или расширителей портов - у этого чипа было достаточно ввода-вывода, чтобы делать то, что я мог бы использовать на практике.

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

Проект, основанный на ATmega, вероятно, проще всего прототипировать в среде Arduino. Но непросто купить ATmega со встроенным загрузчиком, по крайней мере, в Ирландии - это может потребовать нескольких дней ожидания или уплаты приличной суммы денег за оригинальный Arduino от Maplin только для того, чтобы поставить чип.Итак, что, если бы я построил устройство именно для этого - взять пустой ATmega и записать в него загрузчик Arduino. Похоже, хороший учебный проект для использования STM32!

У STM32 определенно было достаточно контактов ввода / вывода и памяти, а также периферийное устройство SPI, которое можно было использовать для связи с портом последовательного программирования AVR. На плате было достаточно места для размещения 28-контактного разъема ZIF, поэтому я добавил его и некоторые элементы пользовательского интерфейса - два светодиода (зеленый и красный) с подходящими резисторами и кнопку сброса.Код ICSP на основе SPI было достаточно легко написать на основе документации Atmel: таблицы данных и примечания к приложению AVR910 об использовании интерфейсов программирования. Найти правильную версию загрузчика Arduino оказалось немного сложнее, чем я ожидал, но у меня все заработало после одного дня написания кода. Немного доработанная версия кода и очень грубая документация доступны здесь

.

Остальные части:

  • тактовый кристалл и нагрузочные конденсаторы для ATmega - но не для STM32, поскольку он работает от собственных внутренних RC-часов
  • пищалка - не обязательно, но приятное дополнение.Я не решился запитать бипер напрямую от микроконтроллера, поэтому в качестве переключателя использовал транзистор 2N3904 в режиме общего эмиттера.

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

Теперь, когда я хочу создать простое устройство на базе микроконтроллера ATmega, мне не нужно покупать предварительно запрограммированный чип - я могу получить пустой и предварительно запрограммировать его, просто вставив чип в плату. ЗИФ и нажмите кнопку.Через некоторое время я слышу длинный звуковой сигнал и зеленый свет, сообщая о том, что чип исправен и готов к использованию. Более того, эта плата предоставляет простой способ проверить микросхему Atmega, которая, как я подозреваю, была повреждена во время одного из моих неудачных экспериментов: серия звуковых сигналов и красный свет устранят любые сомнения.

Это вовсе не ракетостроение.

Сложные части - это пайка и качество сигнала SWD, а также инициализация и скрипт компоновщика. Необходимо не забыть включить все часы во время запуска и позаботиться о прерываниях.В противном случае могут возникнуть непредвиденные сбои при срабатывании SysTick и отсутствии вызова ISR. В целом, этот чип легко получить (Farnell), он недорог, относительно прост в использовании и менее ограничен, чем 8-контактный чип LPC.

Есть несколько сопоставимых вариантов от других производителей в том же сегменте рынка: LPC811 и LPC812 от NXP (последний также доступен в 20-контактном корпусе SOIC с шагом контактов 1,27 мм, что упрощает пайку). Моим предпочтительным вариантом была часть STMicro из-за моего предыдущего опыта работы с их платами Discovery и того факта, что большинство навыков, приобретенных при работе с конкретным микроконтроллером, можно использовать во всей их линейке микросхем.В большинстве случаев они используют одно и то же периферийное устройство, поэтому части кода часто могут быть перенесены - с минимальными изменениями - на их части с частотой 180 МГц. Детали NXP имеют ряд других преимуществ, наиболее важными из которых являются четкая документация, которую они предоставляют, и очень гибкая матрица назначения контактов.

STM32F030F4P6 | 32-битный ARM® Cortex® M0 от STMicroelectronics | Микроконтроллеры

I2C Нет
EU RoHS Соответствует
ECCN (US) 3A991.a.2
Статус детали Активный
HTS 8542.31.00.01
Фамилия STM32F
Архитектура набора команд RISC
Ядро устройства ARM Cortex M0
Архитектура ядра ARM
Максимальная частота процессора (МГц) 48
Максимальная тактовая частота (МГц) 48
Ширина шины данных (бит) 32
Тип памяти программы Flash
Размер памяти программы 16 КБ
Размер ОЗУ 4KB
Прогр. расширяемость Да
Тип интерфейса I2C / SPI / USART
Количество входов / выходов 15
No.таймеров 5
Количество АЦП Одиночный
Каналы АЦП 11
Разрешение АЦП (бит) 12
USART 1
UART 0
USB 0
SPI 1
I2C 1 0
CAN 0
Ethernet 0
Watchdog 1
Параллельный главный порт Часы реального времени Да 90 077
Минимальное рабочее напряжение питания (В) 2.4
Типичное рабочее напряжение питания (В) 2,5 | 3,3
Максимальное рабочее напряжение питания (В) 3,6
Максимальная рассеиваемая мощность (мВт) 182
Минимальная рабочая температура (° C) -40
Максимальная рабочая температура (° C) 85
Упаковка Трубка
Количество контактов 20
Стандартное название пакета SOP
Пакет поставщика TSSOP
Монтаж Крепление на поверхности
Высота упаковки 901
Длина упаковки 901 69 6.5
Ширина упаковки 4,4
Печатная плата изменена 20
Форма вывода Крыло чайки

Используется в любой современной системе или цепи Дизайн этого микроконтроллера STM32F030F4P6 от STMicroelectronics сделает любую конструкцию более универсальной. Этот микроконтроллер имеет минимальную рабочую температуру от -40 ° C до максимума 85 ° C.Максимальная тактовая частота составляет 48 МГц. Его разрешение АЦП составляет 12. Это устройство имеет типичное рабочее напряжение питания 2,5 | 3,3 В. Минимальное рабочее напряжение питания составляет 2,4 В, а максимальное - 3,6 В. Это 32-разрядный процессор. Его флэш-память для программ составляет 16 КБ. Это устройство основано на архитектуре ядра ARM Cortex M0.

STM32F030F4P6 - STMicroelectronics | OMO Electronic

ARM Cortex -076 уровень, 16 кБайт,IS 916 9167
  • 740 € 0,7249
  • 7 2272_17604787

    / STM76 STM76 -Pin TSSOP TrayRoHS: Соответствует6 10077 $ 077 9006 9000
        .8603
      • 25 $ 0,9318
      • 10 $ 1,0512
      • 1 $ 1,1999
    CMicroelectronics BitControl

    6M6M 32-битный STM32 ARM Cortex M0 RISC 16KB Flash 2.20-контактный лоток TSSOP, 5 В / 3,3 В, RoHS: Соответствует МГц
    • 1 1,3600 долл. США
    • 10 1,1600 долл. США
    • 100 долл. США 0,8910
    • 500 долл. США 0,7870
    • 1000 0,62 долл. США
    • 2500 долл. США M0 16KB FLASH TSSOP20, PK
    Cortex / MCU-штырь TSSOP TubeRoHS: Соответствует6
  • 2500U
  • 96

  • 2500U 900I
  • Номер детали Производитель Описание Акции Цена

    STM32F030F4P6TRDISTI # STM32F030F4P6TR

    STMicroelectronics MCU 32-разрядный STM32F ARM Cortex M0 RISC 16 КБ флэш-памяти 2.5 В / 3,3 В, 20-контактный TSSOP T / R (альтернативный: STM32F030F4P6TR) RoHS: Соответствует Мин. Кол-во: 2500 Контейнер: лента и катушка Европа -489452
    • 2500 € 0,9109
    • 5000 € 0,7449 10 0008 9000 € 9000
    • 15000 € 0,6299
    • 25000 € 0,5849

    STM32F030F4P6TRDISTI # 511-STM32F030F4P6TR

    STMicroelectronics- Уровень микроконтроллеров ARM - MCU Entry 1 $ 1.3600
  • 10 $ 1,1600
  • 100 $ 0,8910
  • 500 $ 0,7870
  • 1000 $ 0,6210
  • 2500 $ 0,55 10
  • 10000 $ 0,5300
  • STM32F030F4P16TRDISM

    STM32F030F4P16TRDIS7 ARM 16 КБ флэш-памяти 2,5 В / 3,3 В 20-контактный TSSOP T / RRoHS: совместимый

    1107500

    STM32F030F4P6DISTI # C1S730200819008

    STMicroelectronics MCU R 32-разрядный ARM Cortex M0.20-контактная трубка TSSOP, 5 В / 3,3 В, RoHS: соответствует требованиям 76

    STM32F030F4P6DISTI # XSFP00000078078

    STMicroelectronics RISCMicrocontroller, соответствует требованиям RISC CM77, 32-бит, FLASH0, CORTOEX, CMOSEX, 32-бит, FLASH0, CORT 12401

    STM32F030F4P6DISTI #

      60

    STMicroelectronics 32-разрядный микроконтроллер CORTEX-M0 16 КБ FLASH TSSOP20, TU 370
    • 74 £ 0,86580
    • 1480 0,4580 фунтов стерлингов
    • 3700 0,4070 фунтов стерлингов

    STM32F030F4P6DISTI # 2393635

    STMicroelectronics MCU, 32BIT, CORTEX-M076, 48MHZ77, 32BIT, CORTEX-M076, 48MHZ77 £ 0,9260
  • 25 £ 0,9040
  • 50 £ 0,8640
  • 100 £ 0,6940
  • 250 £ 0,6640
  • STM32F030F4P6TR

    STMicrocontelectronics КБ STM - TSSOP-20RoHS: Соответствует 17500
    Reel

    STM32F030F4P6DISTI # 39X0183

    STMicroelectronics 32-разрядный микроконтроллер, Value Line, ARM Cortex-M0, 48 МГц, 16 КБ , Соответствует требованиям RoHS: Да 25109
    • 1 $ 1.3600
    • 10 $ 1,1600
    • 100 $ 0,8910
    • 500 $ 0,7870
    • 1000 $ 0,6210
    • 2500 $ 0,5510
    • 10000 $ 0,5300

    STM32F030F4P ST6TRDIS77

    STM32F030F4P ST6TRDIS77 16 КБ флэш-памяти 2,5 В / 3,3 В, 20-контактный TSSOP T / R (альтернативный вариант: STM32F030F4P6TR) RoHS: СоответствуетМинимальное количество: 2500 Контейнер: лента и катушка

    Азия -12500

    STM32F030F4P6TRDIS

    32-битный микроконтроллер CORTEX-M0 16K FLASH TSSOP20, RL 6680
    • 20 £ 0.7740
    • 50 £ 0,7100
    • 100 £ 0,6450
    • 200 £ 0,6190

    STM32F030F4P6TRDISTI # 75X0274

    STMicroelectronics 32-битный микроконтроллер Cortex Line, значение 4 КБ, 20, TSSOP, соответствует требованиям RoHS: Да 24301
    • 1 1,3600
    • 10 1,1600
    • 25 1,0700
    • 50 0,9810
    • 100 0,8910
    • 250 0,8390
    • 7870
    • 1000 $ 0,6210

    STM32F030F4P6TRDISTI # 8297151

    STMicroelectronics 32-битный микроконтроллер CORTEX-M0 16K флэш-память TSSOP20, PK 100000 £ 9000
  • 9000 0,7 9000
  • 9007 50 £ 0,7100
  • 100 £ 0,6450
  • 200 £ 0,6190
  • STM32F030F4P6DISTI # 16662894

    STMicroelectronics MCU 32-разрядный STM32 ARM Cortex M0 RISC 16K20-контактный лоток TSSOP, 5 В / 3,3 В, RoHS: Соответствует 657120

    STM32F030F4P6DISTI # STM32F030F4P6

    STMicroelectronics Соответствует MCOP000, 32 бит, 2,4 В, 16 кБайт, Flash20, 48 МГц, TSS
  • 10 1,5000 €
  • 50 0,7000
  • 100 0,6700
  • STM32F030F4P6DISTI # 497-14044-5-ND

    STMicroelectronics IC MCU FLASHBITTS: 1 17265
    В наличии
    • 1036 $ 0.6647
    • 518 0,8220
    • 148 0,9793
    • 74 1,1760
    • 1 1,3700

    STM32F030F4P6.DISTI # 28AC3321

    STMicroe
    • 1 $ 1.3600
    • 10 $ 1.1600
    • 100 $ 0.8910
    • 500 $ 0.7870
    • 1000 $ 0.6210
    • 2500 $ 0.5510
    • 10000 $ 0.5300
  • 6TI Микроконтроллер STM477 #
  • 6TI STM327 16 кБ, 48 МГц, SRAM: 4 кБ, TSSOP20
  • 1212
    • 1 доллар США.4214
    • 5 1,2281
    • 25 1,0837
    • 100 0,9074
    • 250 0,7618

    STM32F030F4P6TRDISTI # 497-17333-1-ND

    77 STM : Cut Tape (CT) 14291
    На складе
    • 1000 0,6846
    • 500 0,8467
    • 100 1,0087
    • 10 1,2720
    • 1 1,4200

    02 STM MCU, 32BIT, CORTEX-M0, 48MHZ, TSSOP-20RoHS: Соответствует
    27338
    • 1 £ 0.7740
    • 25 0,7420
    • 50 0,7100
    • 100 0,6190
    • 250 0,6020

    STM32F030F4P6TRDISTI # C1S730200801993

    STMicroe ARM0

    STMicroe / 3,3 В, 20-контактный TSSOP T / RRoHS: Соответствует 1097
    • 250 0,7655 долл. США
    • 100 долл. США 0,7738
    • 25 долл. США , 32BIT, CORTEX-M0, 48MHZ, TSSOP-20RoHS: Соответствует
    25141
    • 1 $ 2.1600
    • 10 1.8400 долл. США
    • 100 1.4100 долл. США
    • 500 долл. США 1.2500
    • 1000 долл. США 0,9830
    • 2500 долл. США, 0,8720
    • 10000 долл. США , TSSOP-20RoHS: Соответствует
    24363
    • 1 2.1600
    • 10 1.8400
    • 100 1.4100
    • 500 1.2500
    • 1000 0.9830
    • 2500 0.8720
    • 10000 $ 0,8390

    STM32F030F4P6DISTI # STM32F030F4P6

    STMicroelectronics MCU 32-разрядный STM32F ARM Cortex M0 RISC / 16KB Flash Pin ) RoHS: Соответствует Мин. Кол-во: 1 Контейнер: Трубка Америка -1910
    • 1 1,3189
    • 10 1,1299
    • 25 1,1279
    • 50 1,1249
    • 100 0,8639
    • 100 0,8639
    • .7629
    • 1000 $ 0,6019

    STM32F030F4P6DISTI # STM32F030F4P6

    STMicroelectronics MCU 32-бит STM32F ARM Cortex M0 RISC 16KB Flash Pin02,5 V / 30 Кол-во: 74 Контейнер: лоток Европа -15099
    • 74 0,9449 €
    • 148 0,9419 €
    • 296 € 0,8329
    • 444 € 0,7269
    • 740 € 0,7249
    STMicroelectronics MCU 32-битный STM32 ARM Cortex M0 RISC 16KB Flash 2.5 В / 3,3 В 20-контактный TSSOP T / RRoHS: Соответствует 1087
    • 1000 $ 0,5697
    • 500 $ 0,6863
    • 250 $ 0,7655
    • 100 $ 0,7738
    • 25 $ 0,9584
    • 10 $ 0,9696 9001
    • 9007 10 9696 900

    STM32F030F4P6TRDISTI # STM32F030F4P6TR

    STMicroelectronics MCU 32-битный STM32F ARM Cortex M0 RISC 16 КБ флэш-памяти 2,5 В / 3,3 В 20-контактный TSSOP T / R - Tape and Reel : Катушка Америка -2500
    • 2500 0 руб.5889
    • 5000 $ 0,5609
    • 10000 $ 0,5359
    • 15000 $ 0,5119
    • 25000 $ 0,5019

    STM32F030F4P6DISTI # 254

    STM76 BitMicroelectronics MCU MCU

    76

    STM32F030F4P6DISTI # 7925925P

    STMicroelectronics 32-битный микроконтроллер CORTEX-M0 16 КБ флэш-памяти TSSOP2076 8 9 977

    0

    0 TSSOP20767640
  • 250 £ 0,6740
  • 1000 £ 0,5840
  • STM32F030F4P6TRDISTI # ICMCU23288

    STMicroelectronics Cortex M0 16K TSSOP205 900 - Stock76 906 906 905 - Stock76 0

    STM32F030F4P6DISTI # V99: 2348_17730546

    STMicroelectronics MCU 32-разрядный STM32 ARM Cortex M0 RISC 16 КБ флэш-память 2,5 В / 3,3 В 20-контактный TSSOP

    0

    STM32F030F4P6TRDISTI # XSFP00000078079

    336501
    • 2500 $ 1,3100
    • 336501 $ 1,1900

    STM32F030F4P6DISTI # 15251521

    STMicroelectronics MCU 32-разрядный R-bit STM32 ARM Cortex M020-контактный лоток TSSOP, 5 В / 3,3 В, RoHS: совместимый 4386

    STM32F030F4P6TRDISTI # 25925703

    STMicroelectronics MCU 32-разрядный STM32 ARM Cortex M0 PinV / 16KB 16KB / RRoHS: Соответствует 1087
    • 1000 0,5697
    • 500 0,6863
    • 250 0,7655
    • 100 0,7738
    • 25 0,9584
    • 12 0,9696
    50

    STM32F030F4P6DISTI # 511-STM32F030F4P6

    STMicroelectronics ARM Микроконтроллеры ARM MCU Value-Line Соответствует MCU76 Value-Line MCU
    130
    • 10 £ 0.8990
    • 100 £ 0,7640
    • 250 £ 0,6740
    • 1000 £ 0,5840

    STM32F030F4P6DISTI # C1S730201051629

    STMicroelectronics 444
    • 100 $ 1.0600
    • 25 $ 1.2900
    • 5 $ 1.5900

    STM32F030F4P6DISTI # C1S730200792686 STM32F030F4P6DISTI # C1tex730200792686

    900U20-контактная трубка TSSOP, 5 В / 3,3 В, RoHS: Соответствует
    50
    • 50 0,7670
    • 10 1,1400
    • 5 1,3400

    STM32F030F4P6TRDISTI

    -

    STM32F030F4P6TRDISTI # 497-17333000

    IC MCU 32BIT 16KB FLASH 20TSSOPRoHS: СоответствуетМинимальное количество: 2500 Контейнер: лента и катушка (TR) 12500
    В наличии
    • 12500 $ 0,5782
    • 5000 $ 0,5978
    • 2500 $ 0,6253
    • 9

    STMicroelectronics Cortex M0 16K TSSOP20 85 ° CRoHS: Соответствует Stock DE -6560
    Stock US -0