Pull to refresh

Comments 102

Всем хорош STM32, одно плохо — EEPROMа в нём нет. Ну и не все порты 5 вольт-толерантны, да и нагрузочная способность у портов меньше.
Sun-ami Ну… По поводу нагрузочной способности, я бы не сказал что всё так плохо:

image

У ATmega328, если мне не изменяет память, столько же.

А вот отсутствие EEPROM — да, смущает немного. Хотя слыхал про Backup Domain:

http://mcu8.ru/wp-gull/mylinks/2012/04/08/stm32-sohranenie-parametrov/

Пока что не разобрался особо, но как понял — специальная память, которая питается от отдельного источника, например как ионистора, и в паре с часами реального времени она себе работает и кушает какие-то микроамперы.
Отсутствие EEPROM компенсируется циклической записью во FLASH (под 1 байт полезной информации резервируется, например, 10 байт памяти, зависит от частоты записи и срока службы), благо флеш-памяти на STM32 хватает.
Специальная память — это Backup registers (BKP). Позволяет хранить 84 байта, пока имеется питание на Vbat.
да не так то уж и много этой флеш памяти в конкретно этой стмке. что не делай, но бинарник получается поувесистее чем на той же меге и 64кб на стм32 сравнимы с 32кб на меге.
Все, в конечном счете, зависит от задачи, которую необходимо решить микроконтроллером. Хорошо, когда выбор есть и обоими инструментами умеешь пользоваться.
Память не единственный решающий параметр. Например в этом STM32 есть USB, он и дороже поэтому. Есть STM32F100 без USB, памяти столько же, + еще есть ЦАП и дешевле, чем ATMEGA328.
речь идет о плате, которая целиком дешевле чем эта же стмка с usb в рознице
А сколько ее надо, той EEPROM (объем)?
Конечно, удобно когда «на борту», но если «стремно» за флеш и нужно долговременно хранить данные можно прицепить внешнюю EERPOM по, например, I2C и нужные данные хранить там.

Microchip-Technology 24AA08T-I-OT
Memory Type EEPROM
Memory Size 8K (4 x 256 x 8)
Speed 100kHz, 400kHz
Interface I²C, 2-Wire Serial
Voltage — Supply 1.7 V ~ 5.5 V
Operating Temperature -40°C ~ 85°C (TA)
Package / Case SC-74A, SOT-753

розница порядка $0,23 за штуку.
Прицепить конечно можно, но здесь речь идёт о девайсах, собираемых из дешевых готовых плат, без пайки. К тому же I2C — это дополнительные сложности. Ниже по теме описано как народ отказавшись от аппаратного ST-шного I2C свои чисто программные реализации пишет. Я тоже сталкивался с тем, что при сбоях в обмене по I2C с термодатчиком DS1621 удаётся восстановить обмен с ним только вручную, переводя линии I2C в режим GPIO (хотя это — недостаток DS1621).
Про проблемы с I2C тоже видел ниже. Но не совсем понял — это конкретно глюк аппаратной реализации у STM/конкретного МК, или это все же недоработка библиотек ST-DUINO? В первое не сильно верится.

Касательно дешевых плат — за все в этой жизни приходится платить. :) Тем более, что все же в МК есть флеш-память.

Если без пайки — в принципе, есть EEPROM-шилды для ардуины с Serial-интерфейсом. Конечно по цене получается сравнимо с самой платой (где-то от $1,6 и до наглости продавца), зато EEPROM, шилд (без пайки) и объем 128-256 кбит, хватит надолго. Их еще часто и каскадом несколько штук можно прицепить.

Для прототипирования покатит, а в готовом девайсе развести память которая подходит.
С другими микросхемами (EEPROM, цифровые потенциометры, усилитель) у меня проблем с I2C не было. И испытания на ЭМС нормально проходит. Я использую свой драйвер на основе драйвера из SPL. Так что дело, похоже, не в железе. Хотя с F103 я не работал, у меня F217, F407, F427
а при чем тут EEPROM? вы наверно веткой ошиблись.
Почему ошибся? Выше есть «претензия», что у STMок нет EEPROM.
Но во-первых у них есть флеш, а во-вторых, если нужен именно EEPROM для долговременного хранения неких данных, а ограничения по количеству перезаписей флеша встроенного в МК мало, то есть микросхемы внешнего EEPROM, которые при необходимости можно прицепить по I2C или SPI. Если брать чисто микросхему, то микруха будет от $0,2 за 8Кбит за голый чип (правда не в самом удобном для новичков корпусе) до $1.5 за ардуино-совместимый «шилд» на 256 Кбит. О чем я и написал.
Насчёт нагрузочной способности я конечно придрался, но все же нужно иметь ввиду — у ATmega328 максимальный ток порта — 40 мА и 200 на чип.
40 это абсолютный максимум, долго порт так не проработает ;)
Вместо EEPROM в STM32 можно использовать Flash.
Flash не трбует питания для хранения данных, это часть памяти программ. Flash хуже eeprom только по циклам перезаписи.
С Flash другие нюансы.
— Меньший ресурс, чем у eeprom.
— Необходимость писать блоками, даже если нужно записать 1 байт
Меньший ресурс — да, но компенсируется объемом.
1 байт, действительно, не запишешь. Но во флеш можно писать по 2 или 4 байта за раз. А вот чтобы стереть 1 байт, необходимо стирать всю страницу (1кБ или 2кБ). Ниже Anthrax_Beta уже дал ссылку на апнот AN2594 — там есть методика, как использовать флеш вместо eeprom.
Интересно, из arduino ide возможно использовать, например, DMA и и всякие хитрые циклические режимы сбора с АЦП? Понимаю, что скорее всего нет, но всё же.
Как вообще проживает проект maple? Не забрасывают его разработчики?
maple помер давным-давным давно. у меня даже одна плата лежит которую я не могу использовать потому, что… винда x64 :/
Ну вот, теперь будет повод ;)
таки вопрос по DMA открыт. работа с периферией по прерываниям снижает производительность до уровня той же AVR. так что вопрос сильно важный.
Arduino и производительность — вещи диаметрально противоположные, и DMA там особо не поможет.
Вроде как mbed сейчас успешно заменяет maple. Работал и с тем и с тем. Года 4 назад адаптировал maple bootloader для своей платы в STM32F103RBT.
На сколькоя в курсе, то на Ардуино ИДЕ можно писать Сишный код, Спп и ардуиновский с фреймворком. Больше чем уверен, с этой платой дела обстоят точно так же.
а зачем тогда ардуино иде вообще?
По поводу отсутствия EEPROM частично не соглашусь. Да в явном виде она отсутствует, но у ST есть дока goo.gl/WKsbA3 в которой говорится как эмулировать EEPROM используя встроенную flash память.
Для использования со средой ардуино лучше использовать именно клоны Maple Mini а не обычные демоплатки, что бы не дёргать их вручную.
Не все библиотеки можно использовать в прямую, приходится допиливать на ходу.
На винде7 х64 всё живёт прекрасно.
Клон Maple Mini стоит 5 баксов, а это почти как Arduino Mega 2560.
во первых стоит 4. Для разовых поделок это не имеет никакого значения. А если предполагается изготовление продукта большим количеством, то для отладки всё равно проще взять мэпл мини, отладить на ней без лишних танцев с бубном и потом эту прошивку закинуть уже на что подешевле.
Расскажите, что конкретно приходилось допиливать и с какими отличиями плат это было связано?
Платы идентичные (мэпл мини и минимальная отладочная), отличие только в распиновке и авторебут для заливки прошивки у мэпл мини.
У стм32 на ардуино иде i2c работает постоянно с глюками, особенно если использовать обе шины.
ШИМ другой, если использовать для чего то более серьёздного чем просто поморгать.
Надо несколько костылей для корректного использования ком порта через усб.

Вообще мой путь начинался с ардуино на авр, потом ардуино дуэ (арм), стм32. Начиная с арм, почти всегда приходится лезть в кишки библиотек и что-нибудь допиливать. Код постепенно обрастает ассемблерными вставками заточенными на проц.
Оооо, это великое колдунство… Неделя ковыряния и что-нибудь происходит и она начинает работать.
Сейчас у меня завис проект усилителя. Там темброблок управляется по и2ц, никак не могу победить. Похоже придётся переходить на авр :( и отказыватся от ряда функций.
для ненагруженного i2c проще сделать софтовую реализацию.
От авр не подходит, те что для стм32 работают криво.
У вас есть опыт софт и2ц на стм32 в ардуино иде? Если есть нормальная рабочая либа?
софтовая реализация достаточная для редкого чтения/записи нескольких байт пишется простым ногодрыгом за пол часа. какие еще либы тут нужны?
Сталкивался с темброблоком, который не поддерживает 400КГц по I2C, только 100. Может в этом причина?
ядро не работает на версиях среды разработки свыше 1.6.5
— это странно, у меня на 1.6.9 все работает, проверял буквально пару дней назад на чистой виртуалке.

Так же не понял танцев с загрузкой «STM32duino-bootloader» — в МК встроенный загрузчик есть, хотя тут не поручусь — т.к. со своей платой уже проводил эксперименты раньше.

В качестве отправной точки использовалась эта статья (похоже — перепечатка, но оригинала я не нашел)
У меня ничего не компилируется на версии 1.6.7:
image

А встроенный загрузчик есть, он он не даёт возможность прошивать плату по аппаратному USB.
Вы хочите пруфов?
Их есть у меня! :)



Варнинг, непонятный — напрягает слегка.

И, да с загрузчиком проянилось — есть же разные варианты загрузки в том числе «STM32duino bootloader», я пользуюсь «Serial» — встроенным загрузчиком.
Действительно, на версии 1.6.5 библиотека OLED_I2C заработала:



Но LCD дисплей перестал выводить русские буквы. В версии 1.6.5 всё было гладко:

Заголовок спойлера
image


А сейчас выводит тупо geektimes.ru.
Блин, протупил, писал про версию 1.6.9.
То есть пропали русские буквы. Думаю надо посмотреть в сторону кодировки. Что там реально улетает на LCD? В UTF-8 латиница так и останется, а вместо кирилицы будет что-то двухбайтовое.
Короче говоря библиотека LiquidCrystalRus.h перестала отображать русские символы.
Загрузчик есть, но он слыхом не слыхивал про какую-то там ардуину, и ждёт совсем других протоколов для прошивки поэтому его надо менять.
а примеры по работе с USB есть?
например эмуляция клавиатуры
Есть чуть более простой способ.
Можно не прошивать загрузчик. Нужен ST-Link и тот же репозиторий от Роджера.
В папке с библиотеками (точнее в папке Arduino, где лежат библиотеки) создать рядом папку hardware и туда поместить все содержимое репозитория.

Настройка для 103С8T6:
Выбрать палату: Generic STM32F103C series
В опциях платы выбрать метод загрузки: STLink

На этом все, и не нужно будет мучатся с ресетом, устанавливать драйвера, прошивать загрузчик.
Бонусом на будущее будет программатор, но это будущее, и сами потом поймете зачем :)
ST-Link неизбежно появится у всех кто захочет чуть серъезнее заняться stm32 (- быстрая прошивка, отладка, незанятые пины), но в качестве задела сойдет и загрузка по uart

>На этом все, и не нужно будет мучатся с ресетом, устанавливать драйвера, прошивать загрузчик.
лукавите — драйвер понадобится уже для ST-Link'а )
китайцы кстати торгуют вполне годными стлинками по 2-3 бакса. купил пол дюжины после того как один оригинальный помер после небольшого чиха.
Да вы правы. Запамятовал, что под виндой ставились вместе с IAR. Под OSX ничего не ставил, а так как это было недавно, то и осталось в памяти.
У меня была проблема с аппаратным интерфейсом I2C. Раз в секунду читались датчики — первое чтение правильное, остальные ерунду давали.
UFO just landed and posted this here
В STM32 есть BKPSRAM — 4 КБ энергонезависимой SRAM (питается от батарейки часов). Правда в моделях постарше, а не в бюджетном STM32F103C8T6.
UFO just landed and posted this here
BKP register и BKP SRAM — разные вещи. С практической точки зрения сильно разные объемы (84 B и 4 КБ)
UFO just landed and posted this here
Я 4 KB использую как буфер значений датчика. При отключаниях питания буфер не стирается, этим гарантируется непрерывный мониторинг.

Ну и плюс в этих 4 KB хранится запись SytemHealth, там вся инфа о возникших ошибках/ассертах, срабатываниях вочдога и т.д. за все время работы. Очень помогает увидеть качество работы устройства в реальных условиях у заказчика. А то может быть ситуация когда девайс у заказчика перезагружается по вочдогу, а разработчик об этом никогда и не узнает.
UFO just landed and posted this here
Ну CR1220 хватит девайсу на год без питания. А в реальных условиях год без питания наберется лет за 10 работы.
Постарался вложить всю суть данной статьи в одной картинке :)
  1. сколько можно уже сравнивать устаревшие АТмеги и СТМ? Ближайший родственник ХМега и то приблизительный...
  2. У СТМ наиотвратительнейшая документация (против Атмеловской), с этим не раз соглашались сами разработчики на СТМ (и сам же производитель, выпустивший визард). По поводу Дунь: так вообще черный ящик, вы на СТМ одну только периферию замучаетесь настраивать, придется юзать всякие Кубы и полученные данные не сможете толком прикрутить к проекту, т.к. это уже другой уровень разработки, выходит, что если "дядя вася" не напишет готовую библиотеку, вы ничего сделать не сможете.
  3. Ценовой диапазон плат пока конкурентен...
  4. Чип весьма не маленький, для весьма простых задач — избыточно. Но да, поморгать светодиодиком можно.)))
Вообщем как говорил Сократ, «Кто хочет, тот ищет возможности, а кто не хочет — причины».
ардуино в классическом виде даст на стм32 сделать ровно столько же, сколько и на авр. Если надо большего — нужно просто забыть об ардуино. А искать возможности сделать именно на ардуино — это как искать иголку в стогу сена при том что рядом стоит ведро с иголками
Как минимум 12-ти битный АЦП и 16-ти битный ШИМ на 12-ти портах, вот чем эта плата заметно отличается от Arduino плат основанных на AVR-ках.
Есть один такой интересный чип, для светодиодов предназначенный и с интерфейсом SPI — 24-битный ШИМ 12 каналов с 6-битной индивидуальной регулировкой тока по каждому выходу. И наращивай сколько хочешь таких выходов… интерфейс ведь SPI.
Конечно есть, но это ведь отдельная железка, тем более, как Вы говорите, специализированная.
А так, всё под рукой и на одной платке.
Так и эти чипы можно развести на одной платке, сколько душе угодно а не строго фиксированное количество.
если для 12-бит АЦП я применения еще и смогу найти, то для 16-бит ШИМ — вряд ли.
Управлять светодиодами, 8 бит довольно мало — слишком заметный шаг между уровнями что сразу становится заметным на плавных переходах яркости. А 16 бит уже позволяет развернуться.
хм. при наличии гамма-коррекции 8 бит обычно хватает.
Гамма-коррекция делает переходы ещё сильнее, и она нужна будет в любом случае.
Как я говорил в ролике — цифровой ЛБП может получится отличный.
в ЛАБОРАТОРНЫЙ блок питания можно думаю и на цап раскошелиться.
Посмотрим, я то всё не перестаю думать про тему ЛБП на этой STM32 плате…
вообще я для себя решил что цифровой лабораторник плохая идея, особенно самодельный. пользуемся rigol dp832 только когда нужны конкретно фишки цифрового, в других случаях берем аналоговых собратьев ибо удобнее.
Ну… У меня то крутится идея сделать аналоговый БП, но с цифровым управлением.

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

«интегрированные в микроконтроллер часы реального времен» — не следует некритически повторять неудачные фразы из рекламных листовок, нет их там.
UFO just landed and posted this here
RTC там есть, но упрощенные, по сути — микропотребляющие генератор и 32-битный счётчик с предделителем, с возможностью отдельного питания от батареи. Вопрос только в том, можно ли это считать RTC. По определению которое даёт википедия — нельзя. Но я считаю — можно, раз это специально предназначено для счёта реального времени.
DS12887 — вот это часы реального времени, то есть собственно модуль счета времени, модуль учета даты, таймер прерываний, и, конечно же, модуль переключения питания + встроенная резервная батарейка на весь срок службы (10 лет).
На самом деле представление времени в виде 32-битного или 64-битного числа секунд даже удобнее. Когда нужно выполнять какие-либо расчёты времени — его всё равно придётся преобразовывать к этому формату. Такой формат компактен и потому удобен для меток времени в логах. Кроме того он избавляет от заморочек с переводом времени — привязываемся к UTC и тогда временные уставки и таймстампы не сбиваются при переводе часов. А для конвертирования можно использовать стандартные функции C, лучше 64-битные чтобы избежать проблемы 2038 года. Мне RTC в STM32F1xx нравится даже больше чем «полноценные» RTC в STM32F2xx и STM32F4xx — они более универсальны, их можно настроить так чтобы считать и доли секунды. А регистр будильника и прерывание есть и там и там.
UFO just landed and posted this here
UFO just landed and posted this here
За все в этом мире надо платить…
Хотя лично я юзал встроенный генератор с внешним кварцем 32768 и питал все это от ионистора и ионистора 4.7 Ф за вроде 40 рублей хватало на неделю точно.
Тогда CR2032 хватит на год как минимум.
Коллеги, а есть у кого-нибудь электрическая схема именно этой платы, что на фото? То, что легко гуглится, немного отличается…
В статье есть, посмотрите внимательнее.
Очень смотрю на stm в плане работы через Ардуино ИДЕ. Подходит в основном размером.
Ардуино потому, что проект открытый и для легкого повторения. Сейчас справляется ардуинка про мини, размер важен — места немного.

Кто знает, реально запустить под stm+arduino_ide библиотеки ic2dev/mpu6050 и radoihead RH_RF24?
Sign up to leave a comment.

Articles