Программирование stm32 на си без библиотек: Программирование NVIC на STM32 (без библиотек)

Содержание

STM32

Список видео, входящих в плейлист «STM32»:

  1. Программирование с использованием Simulink и Embedded Coder
  2. Быстрое прототипирование алгоритмов
  3. Использование библиотек замещения кода
  4. Интеграция внешнего кода

Программирование с использованием Simulink и Embedded Coder

В данном видео рассказывается про возможность реализации моделей Simulink непосредственно на отладочной плате STM32F4-Discovery. Объясняются системные требования, необходимые подключения платы и приводится пример параметрического аудиоэквалайзера.

Быстрое прототипирование алгоритмов

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

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

Использование библиотек замещения кода

В этом видео будет показано использование оптимизированных библиотек в процессе кодогенерации. Так как для многих семейств процессоров существуют оптимизированные библиотеки, желательно применять их, а не стандартные библиотеки. Embedded Coder предоставляет технологию Code Replacement Library, позволяющую использовать такие оптимизированные библиотеки в процесее генерации исходного кода.

Интеграция внешнего кода

В этом видео на примере N-мерного интерполятора будет продемонстрировано переиспользование наследованного кода в моделях Simulink. Практика показывает, что по мере работы происходит накопление реализованных и оттестированных алгоритмов, фреймворков и т.д. Желательно переиспользовать их в новых разработках, ведущихся в MATLAB/Simulink. Обсуждается инструмент Legacy Code Tool, позволяющий интегрировать наследованный код в модели Simulink

Начало работы с stm32 или не повторяйте моих ошибок

Небольшой рассказ о граблях, встреченных на пути познания ARM на примере stm32f103c8t6 и stm32l151rct6.

Мое знакомство с микроконтроллерами началось с AVR. Ими я занимался довольно долго, пройдя путь от плат с процарапанными дорожками и ассемблера в AtmelStudio4 до нормального лута и самописных makefile’ов для работы в блокноте (в моем случае — KWrite) и командной строке.

Но пришло время потыкать палочкой и в их старших братьев — ARM. Выбор конкретного семейства был долгим и пассивным (потому что прямой надобности нет, вот и не спешил), но в конце концов закончился на stm32f1, как самом, пожалуй, распиаренном.

Покупать программатор, отладочную плату вроде Discovery или blue pill? Что вы, я же мастер по AVR-кам! Любую плату можно сделать ЛУТом, да еще так, как тебе нужно, без лишнего обвеса. Поэтому покупаю голый stm32f103c8t6 и начинаю шаманить с трассировкой платы. Что же мне понадобится? Хотя бы два порта вывести на гребенки… упс, выводить порты целиком неудобно. Да и ладно, выведу по 8 ножек — от порта A младшие (0-7), от B — старшие (8-15). Еще, конечно, светодиоды и кнопки, как же без индикации и управления. Вот что меня удивляет в готовых отладочных платах так это отсутствие хотя бы 2-3 светодиодов и 1-2 кнопок, которые бы ни с чем не конфликтовали. Как они вообще себе представляют отладку? Под кнопки сами просятся PA8, PA9, они удобно расположены. Еще пригодятся USB, джамперы BOOT0, BOOT1 и разъем батарейки для часов. И разъемы для кварцев, чтоб совсем красиво (впоследствии ни разу не воспользовался разъемами для кварцев). Для питания контроллеру нужно не более 3.6 В, а с USB идет 5 В.
Надо ставить стабилизатор. Много читал, как народ выбирает стабилизаторы с низким падением напряжения… зачем? Разница полтора вольта, да тут дубового 78l33 хватит. А теперь разъем JTAG. У Atmel разъем программирования был стандартный ISP10 или ISP6. Наверное JTAG тоже штука стандартная. Оказывается, да… но только для отдельного производителя или даже устройства. Смотрим разъем на st-link: красивый, 10-контактный. Смотрим на каком-то программаторе для AVR: упс, уже 20-контактный. Смотрим еще где-то: больше несовместимых разъемов богу несовместимых стандартов. Ну, раз так, будем изобретать свой. Если что, переходник между ними будет не сложнее переходника ISP-6 на ISP-10. Вроде бы все готово, можно делать плату. Как оказалось, шаг 0,5 мм вполне достижим на любительском уровне, даже почти маркером подрисовывать не пришлось.

Теперь чем ее прошивать. Раз есть USB, наверное, через него и умеет. Читаю даташит — ага, через USB не умеет, зато через UART1 умеет. Упс, как раз его-то я и забыл вывести.

Мало того, он еще и с кнопкой конфликтует, с той что на PA9 висит. Ну да ладно, выведу на проводочках, а кнопка все равно еще одна есть. Немного шаманства и плата готова и даже определяется в stm32flash.

С железом вроде бы разобрался, пора переходить к коду. Почитав несколько статей в интернете нашел готовый архив под gcc-arm-none-eabi. Разбираться, как именно задавать последовательность сборки, буду потом. Пока что занимаюсь hello-world’ами на кнопках и светодиодах. Поскольку это мое первое знакомство с данным семейством, никаких оберток вроде HAL — только ручная работа с регистрами. Впрочем, это вполне естественный подход, как мне кажется, можно было и не упоминать. Немного напрягает все время дергать питание и BOOT0 на плате, ну да ладно, когда-нибудь сделаю JTAG-программатор. Как ни сранно, на грабли с отключенным тактированием периферии не наступил. Вспомнил молодость, когда на TurboPascal’е писал обработку трехмерной графики. Здесь у меня есть дисплей на ili9341 от raspberry pi и контроллер на целых 72 МГц.

Вот что получилось — до 200 точек на модель и 11 fps. Конечно же, все матрицы трансформаций считаются в числах с фиксированной точкой.


В какой-то момент захотелось сделать носимое устройство, чтобы долго работало от батарейки. Посмотрел я в даташит и огорчился: знаменитые ARM по потреблению в разы хуже тех же AVR-ок! Если у вторых (ткнул в первый попавшийся контроллер, которым оказался ATmega88p) потребление составляет 0,8 мкА в учетом часов, то у первых даже в самом экономичном режиме сна* — 25 мкА ± 1.4 мкА на RTC. Это никуда не годится. Впрочем, stm32f103 и не позиционируется как экономичная серия. Смотрю на сайте STmicroelectronics другие серии контроллеров и выбираю серию stm32l1: помимо потребления порядка 1 мкА, там есть еще емкостный датчик и контроллер ЖКИ. Правда, максимальная частота поменьше, всего 36 МГц (или 24 МГц если используется USB), но это я как-нибудь переживу.

Решено: беру пару stm32l151rct6 аж с 32 кБ оперативки (еще там 256 кБ флеша, но слабо представляю чем его можно забить. Разве что совсем диким говнокодом или массивами данных).


  • ) не путать режимы сна (sleep, stop) с отключением (standby)

Параллельно делаю из запасной stm32f103 программатор st-link v2, просто потому что надоело возиться с BOOT0 и питанием, да и быстрее он. Впрочем, программирование по UART оставлю — мало ли что. Там тоже было немного шаманства, но ничего выдающегося. Разве что найти командную строку для openocd оказалось проблемой. Для будущих поколений оставлю ее:

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "reset halt" -c "flash write_image erase "$(firmware).bin" 0x08000000" -c "reset run" -c "exit"

Для stm32l151 надо, само собой, поправить target на «target/stm32l1.cfg»

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

Так получилось, что на плате программатора я предусмотрел всего два крепежных отверстия в рандомных местах. А места оказались довольно далеко от разъема JTAG. И через какое-то время я заметил, что программатор работает нестабильно. То работает, то нет, то через UART приходится стереть «жертву», тогда подхватит. Оказалось, что резистор, идущий от вывода контроллера к разъему, сломался. У него просто отвалилась контактная площадка от корпуса. Резистор я перепаял. Потом перепаял остальные. Потом догадался, что даже той малой деформации платы, которая возникала при втыкании-выдирании шлейфа, хватало для несчастных компонентов. В результате воткнул подпорку прямо рядом с разъемом. Пока держит.

Как читатель уже догадался, программирование все также идет в текстовом редакторе, а компиляция и прошивка — в консоли. Естественно, покупная отладочная плата под l151 меня вдохновляла не больше, чем всякие IDE. Потирая следы от граблей, оставленных первой платой, развожу вторую (считая программатор — третью, но он все-таки не отладочная плата). Раз уж собрался отлаживать энергоэффективное устройство, надо заморочиться с питанием. Стабилизатор 78l33 менять не буду, но его выход я разорвал джампером, чтобы туда можно было ткнуться амперметром (надеюсь все-таки на микроамперметр, но там уж как пойдет). Гребенки пусть будут такие же, как на предыдущей плате — совместимость! Ну и пару светодиодов и кнопок, конечно. Грабли с UART1 призывно поблескивают, но я все же ставлю его разъем и не получаю по лбу. Конечно, JTAG у меня уже есть, но страховка не повредит. Так же, как и предыдущую (и плату программатора тоже) удалось развести по одной стороне, даже перемычек не слишком много.

А вот при запаивании контроллера возникла проблема. Я как-то наивно полагал, что на корпусе микросхем должен быть ключ, обозначающий первую ногу. Кто бы ожидал, что молодцы из ST сделают ДВА ключа, симметрично. Вот и какой стороной его запаивать теперь? Подумав, я решил, что это не ключи, а технологические углубления. Мало ли, для позиционирования чипа при изготовлении, например. Или прижать основание для заливки пластиком. Тогда надо ориентироваться по надписи. Логично же, что надпись должна быть читаема если расположить микросхему «стандартно», то есть когда первая нога в левом верхнем углу. Так и начал припаивать. То ли дефект ЛУТа, то ли кривые руки, но припаялась микросхема криво, благо вовремя заметил, прежде, чем запаял целиком. Не беда, есть же старый способ отпаивания многоножек с помощью лезвия бритвы: оно не смачивается припоем и достаточно тонкое чтобы не слишком погнуть. Оказалось, руки все-таки недостаточно прямые, поскольку ножки погнулись. Но не вверх, а вбок, хорошо хоть не сильно и их удалось кое-как выпрямить. Вторая попытка запаивания шла уже под микроскопом, но прежде я решил доправить ножки. И одна из них отломалась. Из чего их делают, что один раз согнуть-разогнуть нельзя? У выводных-то компонентов такой проблемы нет. Ну все, думаю, микросхему в брак, придется запаивать другую. Но вдруг это не критичная ножка? Ну там, вывод общего назначения, или одно из питаний. Пока что запаяю без нее, а там видно будет. На этот раз удалось запаять ровно, правда ножка попала на I2C, с которым я хотел поразвлекаться, но хоть не на жизненно важные разъемы вроде USB, JTAG, UART или BOOT. Подключаю — не работает, программаторы плату не видят. Какое-то время шаманю с пропаиванием ножек, но не помогает. Блуждающий по даташиту взгляд натыкается на картинку контроллера, расположенную где-то в подвале документа. Вот как можно было придумать нанести надпись БОКОМ?! То есть если повернуть контроллер так, чтобы надпись читалась, первая нога окажется в правом верхнем углу. Попутно выяснилось, что одно из «технологических углублений» таки является ключом. Правда, не поясняется, как его отличить от симметричного… Ну, хоть какая-то зацепка. Выпаиваю контроллер строительным феном, чтобы не доломать выводы, и запаиваю на этот раз боком. Отломанный вывод попадает аккурат на TX вывод UART1, то есть на разъем программирования и отладки. Это совсем нехорошо, но перед тем, как менять контроллер, надо хотя бы убедиться что с ориентацией угадал чтобы при перепаивании на живой не убить его неправильным подключением. Подключаю программатор — работает. Ура. Остались мелочи — впаять разъемы, диоды и прочую обвязку.

Работать с контроллером без UART1 не хочется, да и хуже чем сейчас уже не будет. А если и будет, так все равно менять, поэтому принимаю решение поиграть в хирурга и сделать контроллеру протез ноги из волосинки МГТФа. Как раз под рукой валяется хороший электропроводный клей, которым волосинка решительно приляпывается к площадке на корпусе микросхемы. Тот клей, который попал на соседние ножки, безжалостно удаляется скальпелем. А что вы хотите, попасть в полумиллиметровую площадку и не попасть по соседним торчащим ножкам? Проверяю — работает. Пока не отвалилось, а чтобы не отвалилось и потом, заливаю цианакрилатом.

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

Итак, железо готово, пора перейти к коду. Хорошо бы найти готовый пример под gcc и библиотеки CMSIS. Что для этого подойдет лучше, чем официальный сайт производителя? Как оказалось, STmicroelectronics не разделяют моего оптимизма. То, что навигация на сайте сделана через неприличное место — уже привычно, сейчас трудно найти сайт, сделанный людьми для людей. Но они не позволяют ничего с сайта скачать! Возможно, позволили бы после регистрации, но у меня и раньше не было желания регистрироваться где попало, а после такого отношения к разработчикам — и подавно. На кой ляд вам моя почта или что вы там требуете? Собирать персональные данные, спам слать? Идите лесом, а я в свободном доступе найду! Кстати, немного удивило что соответствующего пакета не оказалось в репозитории, но, возможно, ST придумали какой-то лицензионный геморрой. Посему шлю лучи поноса маркетологам, придумавшим такую политику, да и за неудобный сайт тоже.

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

С железом разобрались, с сорцами тоже. Пришло время разбираться наконец с контроллером. Первый сюрприз ждал при попытке воспользоваться сторонним кодом под Discovery. Там применен контроллер stm32l152, который на первый взгляд почти не отличается от stm32l151, установленного у меня. Помимо мелких отличий, оказалось, что в «мой» контроллер не установлен модуль ЖКИ. Немножко обидно, но я все равно не планировал им пользоваться. Хотя вот такое различие могли бы и более явно выделить, чем сносочкой в даташите. Но более интересным оказалось поведение часов реального времени. Они упорно не хотели работать, причем в интернете пишут просто «делай так, делай так, оно работает». А оно не работает. Кое-где, впрочем, упоминалось об «известных проблемах с RTC в данной серии». Как бы то ни было, часы все же завелись, правда, только на встроенном RC-генераторе. Попытки запстить часовой кварц приводили к бесконечному ожиданию бита готовности LSE. Я попытался проверить не отвалились ли ножки микросхемы от дорожек на плате и подергал ими в режиме обычных GPIO. Отвалился высокочастотный кварц. WTF?! В общем, вместе эти два кварца работать не желают, но хотя бы по отдельности худо-бедно функционируют.

И тут я догадался: суперклей, которым была залита половина контроллера (он ведь жидкий, его точечно не нанесешь, да и кто бы мог подумать…), дает утечку и кварцы своими наводками мешают друг другу. Ну, снаружи отскрести клей нетрудно, но ведь он затек даже под низ микросхемы. И если утечек по нему достаточно для кварцев, это ведь и на потреблении скажется. Ищу в гугле, чем люди удаляют цианакрилат. Предлагается теплая вода (что???) и диметилсульфоксид. В теплую воду я не верю, поэтому покупаю ДМСО. После более чем часового нахождения капли химиката на поверхности клея, разницы я не заметил. Зато заметили кварцы и стали работать более-менее нормально (интересно, почему? Димексид вытеснил влагу, впитанную клеем?). Впрочем, меня это не убедило, да и остатки клея все равно мозолят глаза… даром что находятся на нижней стороне платы и особо не видны. Кстати, теплая вода, которой я смывал димексид, на клей не повлияла (я не удивлен). Обнаружил, что существует такая штука, как удалитель клея, в таком же тюбике, как и сам клей, только фиолетовом. Ну хоть она-то должна сработать! Как оказалось, она может и работает, но по консистенции напоминает сметану и под микросхему просто не лезет. Ну и толку с тебя, удалитель?! Снаружи я и так почистить могу. Последний шанс: изредка упоминается ацетон. Немножко опасаюсь за пластиковые детали, но как раз их заменить несложно. Заливаю ацетон в стеклянную банку, кидаю туда плату и оставляю на ночь. Наутро выяснилось, что ацетон и правда работает, да еще как! От клея не осталось и следа. Мало того, растворился толкатель одной из кнопок. Что интересно, вторая уцелела, наверное, была сделана из более устойчивого пластика. Немного удивлен был, что и прочий пластик остался нетронутым, даже надписи уцелели. Ну и отлично, а кнопку можно и заменить.

Вот теперь удалось запустить и RTC от часового кварца, и режим сна потрогать, да и с другой периферией пообщаться. А еще, чтобы совсем фен-шуйно было, нанес подписи на плату. Но не маркером (вдруг снова купать в растворителях?) а процарапал скальпелем. На века!

Ну и для будущих поколений оставлю примеры кода для обоих контроллеров, вместе с библиотеками, makefile’ами и прочим. Останется только установить gcc-arm-none-eabi, openocd, stm32flash и прочую мелочь.
stm32f103
stm32l151

Выводы:


  1. Делать отладочные платы под себя при желании можно, они не хуже покупных. А вот программатор-отладчик все же лучше купить, если он не слишком дорогой. Сделать его, конечно, можно, но схему-то вы менять не будете, а раз так — лучше покупного он не будет. Дешевле, скорее всего, тоже. Разве что если контроллер лишний остался или с доставкой проблемы.
  2. Не забывайте про резервный разъем программирования UART1, ну и заодно джамперы BOOT0, BOOT1. Помимо собственно программирования, по UART’у довольно удобно отлаживать программу.
  3. На корпусе LQFP64 два ключа, один из которых фальшивый. Ориентироваться придется на надпись чтобы смотрела ногами вправо.
  4. Паять компоненты с малым шагом стоит только под микроскопом. Иначе сложно определить все ли пропаялось и нет ли «соплей». Ну либо на «профессиональном» оборудовании вроде специального фена, паяльной пасты и т.п. Тут уж не знаю, я пишу про любительскую технологию.
  5. Не экономьте на толщине текстолита. Он гнется и этого может хватить для повреждения smd резисторов и, наверное, конденсаторов. Выводным это не страшно, да и компоненты с гнутыми выводами (транзисторы, микросхемы), пожалуй, переживут.
  6. Делать разъемы для кварцев — пустая трата времени. Вы не будете их менять, поэтому просто запаяйте на плату.
  7. Выпаивать многоножку с помощью лезвия бритвы стоит только в самом крайнем случае, когда нет фена. Иначе слишком велик риск ее повредить
  8. Даже если у микросхемы отвалилась ножка, ее можно восстановить! Даже когда шаг 0,5 мм. Главное пользоваться пайкой, а не проводящим клеем.
  9. Никогда не заливайте микросхему цианакрилатным клеем (суперклеем)! Он не обладает должными электрическими, да и механическими, характеристиками.
  10. Для удаления суперклея из труднодоступных мест лучше всего подходит ацетон. Растворяет полностью. Главное убедиться что окружающие компоненты не пострадают. Из не-труднодоступных мест можно и механически удалить.

linux — Как я могу разработать для обнаружения STM32 в Linux?

Простым способом программирования и отладки платы STM32 Discovery (или любого STM32 с помощью программы ST-Link) является использование проекта ‘stlink’ https://github. com/texane/stlink (однако OpenOCD кажется более популярным)

Есть несколько хороших страниц о том, как разработать для обнаружения STM32 в Linux, например http: //gpio.kaltpost.de/?page_id=131 и http://torrentula.to.funpic.de/2012/03/22/setting-up-the-stm32f4-arm-development-toolchain/ и http://jethomson.wordpress.com/2011/11/17 /получение стартером-с-stm32f4discovery-в-Linux /

Однако я нашел последнюю ссылку наиболее полезной. Он показывает, как создавать ST-STM-проекты как есть. Единственное изменение — добавить его Makefile, который кажется идеальным решением.

В новых версиях Ubuntu есть пакет, который вы можете установить, который содержит компилятор ARM:

sudo apt-get install gcc-arm-linux-gnueabi

Это установит компилятор GCC как «arm-linux-gnueabi-gcc»

Однако, если вы это сделаете, вам нужно добавить строку ‘* (. note.gnu.build-id) в нижней части раздела’ /DISCARD /’из stm32_flash.ld (скрипт компоновщика, поставляемый с ST), чтобы компилятор Ubuntu-packaged создавал код, который может быть свернут и что работает.

Также имейте в виду, что мне не повезло с использованием стандартных библиотек C /GCC (включая программы с плавающей запятой). Однако установка пакета намного сложнее, чем создание GCC из исходного кода.

Обратите внимание, что все процессоры немного разные. STM32F0..4 все будут нуждаться в разных флагах компилятора, а скрипт компоновщика будет немного отличаться для каждого (хотя только из-за измененных размеров RAM и Flash).

Изменить: если вы хотите быстро начать очень быстро , вы также можете посмотреть http: //www.espruino.com . Это интерпретатор JavaScript, который запускается на самой STM32, поэтому, как только вы установили «stlink», чтобы вы могли мигать на доске, вы можете просто загрузить изображение с этого сайта, включить его, а затем подключиться к терминальному приложению и начать программирование.

Чем отличаются друг от друга CMSIS, STM32CubeMX и MBED | arm

По сути это все библиотеки для платформы ARM Cortex (STM32). CMSIS содержит низкоуровневые, не зависящие от производителя методы для доступа к аппаратуре микроконтроллеров ARM Cortex. Некоторые производители, например STM, предоставляют библиотеки поверх CMSIS или в дополнение к CMSIS, такие как STM32CUBE. Библиотеки MDED предоставляют высокоуровневый, независимый от производителя интерфейс программирования (C++ API) для аппаратуры микроконтроллеров различных производителей. Библиотека MBED может использовать соглашения по программированию CMSIS, вызовы функций CMSIS, или может быть функций STM32CUBE. Детали реализации зависят от используемой части библиотеки и выбранной модели микроконтроллера.

В программе на основе MBED есть следующие уровни (если спускаться от высокого уровня к самому низкому):

6. Ваша программа на C++.
5. Библиотека MBED C++.
4. Слой HAL библиотеки MBED, нацеленный на определенную модель микроконтроллера.
3. Слой HAL библиотек, предоставленный производителем (такой как STM32CubeMX) — не обязательный слой.
2. Слой библиотек CMSIS, нацеленный на определенную модель микроконтроллера.
1. Микроконтроллер.

Слой CMSIS работает как легкая абстракция, находящаяся между остальным кодом и железом микроконтроллера. Изначально CMSIS представлял из себя только заголовочные файлы с описанием регистров, но потом были добавлены низкоуровневые функции. В основном CMSIS гарантирует, что доступ к регистрам CPU, прерываниям и т. п. будет (почти) одинаковым для всех поддерживаемых моделей микроконтроллеров. Тогда предоставленный производителем слой HAL (например STM32Cube) может использоваться для упрощения доступа к остальной периферийной части микроконтроллера. Слой MBED HAL предоставляет традиционный API на языке C для управления периферийными устройствами микроконтроллера, и он может использовать (а может и не использовать) для этого опциональный слой HAL от производителя микроконтроллера. Библиотека MBED C++ содержит обычные объекты C++ для различных периферийных устройств (например DigitalOut, SPI, Serial). Эти объекты используют традиционный API на языке C, предоставленный слоем HAL. И наконец, Ваша программа находится на самой вершине этого стека, и она использует объекты C++ для управления микроконтроллером на верхнем уровне, используя все эти промежуточные слои абстракции.

В сущности все эти слои позволяют программе быть независимой от выбранного микроконтроллера. То есть Вы не должны иметь дело с библиотекой STM32Cube, или с HAL API, используя вместо этого библиотеку MBED C++. В редких случаях понадобится использовать некоторые функции CMSIS, такие как __disable_irq() и NVIC_SystemReset().

[Ссылки]

1. STM32: аббревиатуры и термины.
2. Cortex Microcontroller Software Interface Standard.

stm32 — Мне действительно нужно учиться использовать регистры — Программирование микроконтроллера?

Закрыт . Этот вопрос основан на мнении. В настоящее время он не принимает ответы.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы на него можно было ответить с помощью фактов и цитат, отредактировав это сообщение.

Закрыт 1 год назад.

У меня любопытный вопрос. Действительно ли мне нужно учиться использовать регистры при программировании микроконтроллера?

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

Все равно! Я пытался мигать светодиодом и читать цифровые входы, например, переключаться с помощью STM32, запрограммировав его с помощью регистров. Это трудоемко и болезненно. К счастью, STM предлагает CubeMX, поэтому пользователь может настроить полный проект с HAL-библиотеками без использования регистров. Супер просто и супер весело!

Так выглядит Atollic CubeMX.

А теперь мой реальный вопрос, почему я начал этот вопрос. Я использовал Atollic TrueStudio. Работает отлично. Но сегодня я обновил свой Atollic TrueStudio, а STM реализовал CubeMX в Atollic TrueStduio.Прежде чем мне нужно будет загрузить и Atollic TrueStudio, и затем CubeMX. Другими словами, отдельное программное обеспечение.

Но сегодня Atollic TrueStudio и CubeMX объединены в одно программное обеспечение. Большой! Это действительно хорошо.

Но … чтобы создать проект для микроконтроллера STM32, вам нужно создать проект CubeMX. Нет «Создать пустой проект ARM на C», как было раньше. Теперь это похоже на «Вы хотите создать проект STM32? Что ж, вы больше никогда не собираетесь использовать регистр, поэтому мы выбираем за вас! Вот, у вас есть проект CubeMX с HAL-библиотеками! Готов к запуску!»

Хорошо. ..Замечательно! Но предполагает ли STM, что работа с регистрами не нужна, когда я использую STM32?

У меня нет проблем использовать SMT32 с библиотеками CubeMX + HAL. Нисколько. Но меня беспокоит, что я стану «глупым», если буду использовать CubeMX + HAL только для того, чтобы упростить жизнь.

Следует ли мне программировать STM32 с регистрами или использовать библиотеки CubeMX + HAL? Обратите внимание, что это 32-битный микроконтроллер с тоннами документации, а не простой AvRTiny8.

Сегодня я создаю большие проекты с STM32 благодаря библиотекам CubeMX + HAL.Я бы никогда не смог этого сделать без этой технологии.

Вот причина, по которой я использую STM32. Просто ….. лучше если сравнить цену и то, что получишь.

Рука

— CMSIS против HAL против стандартной библиотеки периферийных устройств

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

Любая / все эти библиотеки предназначены для того, чтобы избавить вас от этого понимания / бремени / работы и заставить его чувствовать себя просто вызовом API-интерфейса, подобного опыту программирования приложений.Этого хотят многие люди. Вы можете использовать весь исходный код этих библиотек, чтобы понять, но по мере того, как вы совершенствуетесь, вы обнаруживаете дыры и проблемы в библиотеках, иногда очень страшный код. код, собранный вместе, написанный в общем и грубо перенесенный с одного чипа на другой, возможно, поддерживающие функции, которых нет у вашего чипа, и т. д. И все они имеют чрезмерное количество накладных расходов. От 10 до 100 раз больше кода для задачи, конечно, большая его часть может быть оптимизирована, но зачем вообще он нужен?

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

Обратите внимание, что документация по микросхеме тоже не идеальна, это часть удовольствия.

Я не понимаю, почему сборка поднимается при обсуждении программирования на голом железе. Вы можете обойтись очень небольшой сборкой. Для этих чипов cortex-m вам технически понадобится только столько asm для загрузки:

  .globl _start
_Начните:
.word 0x20001000
.word main
  

Вы не можете полагаться ни на данные, ни на bss, и вы не можете вернуться из main с этим минимальным asm.Но это все, что вам НЕОБХОДИМО для почти голого металла. Теперь, если вы хотите обрабатывать прерывания, вам нужно больше записей в таблице векторов. больше строк .word. Я рекомендую больше asm, но может быть на 10 или 20 строк больше.

— это обычно все, что я использую.

  .cpu cortex-m0
.большой палец
.thumb_func
.global _start
_Начните:
stacktop: . word 0x20001000
.word сбросить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.word повесить
.слово висит
.word повесить
.word повесить
.thumb_func
перезагрузить:
    bl notmain
    б повесить
.thumb_func
повесить: б.
.выровнять
.thumb_func
.globl PUT16
PUT16:
    strh r1, [r0]
    bx lr
.thumb_func
.globl PUT32
PUT32:
    str r1, [r0]
    bx lr
.thumb_func
.globl GET32
GET32:
    ldr r0, [r0]
    bx lr
.thumb_func
.globl GET16
GET16:
    ldrh r0, [r0]
    bx lr
.thumb_func
.globl фиктивный
дурачок:
    bx lr
.конец
  

Да, там написано cortex-m0, но это настоящая начальная загрузка для моего кода m4. Я предпочитаю, чтобы это был большой палец, а не большой палец2.И я просто повторно использую этот код из одной cortex-m в другую, при необходимости меняя адрес указателя стека, так что он работает для m0, m3 и m4. У меня еще нет m7, и я его особо не исследовал.

Для включения fpu может потребоваться еще несколько строк asm, поскольку требуются конкретные инструкции. Но дело в том, что не путайте низкоуровневое программирование и asm. В C есть все необходимое для настройки микросхемы, а также для написания приложения. Библиотеки, о которых вы говорите, написаны на C, а не на asm, поэтому очевидно, что им также не нужно использовать asm.

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

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

Приложение

создается без ошибок, но не запускается

Главная / Техническая поддержка

Информация в этой статье базы знаний относится к:

  • Кейл MDK
  • Keil MDK версии 5.14 и новее для программного обеспечения Keil :: Compiler Пакет

СИМПТОМ

Я создал свое приложение с помощью инструментария Arm Compiler и стандартная библиотека времени выполнения. Я могу загрузить приложение и установить контрольные точки. Когда я пытаюсь запустить его на своей цели, это не работает. Это кажется, что программа даже не доходит до функции main (). В в процессе сборки не было сообщений об ошибках или предупреждений, которые могли бы объяснить это поведение.

ПРИЧИНА

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

  • Отсутствует куча
  • Полухостинг включен
  • Линия RESET подключена неправильно

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

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

Полухостинг
При отладке Вид -> Разборка в окне показано, что выполнение остановлено:

  • Инструкция по сборке точки останова e. грамм. BKPT 0xAB
  • При выполнении программных прерываний, например SWI 0xAB

Ссылки на стандартную библиотеку времени выполнения в некоторых низкоуровневых отладках рутины, т.е. функции полухостинга.
Другие отладчики Arm поддерживали полухостинг, отвечая на SWI и события БКПЦ. Для неотладочной (выпущенной) версии приложения, программист перенацелит эти функции полухостинга к эквивалентам без полухостинга. Отладчик µVision не поддерживает semihosting — поэтому эти функции всегда нужно перенацеливать.

РЕШЕНИЕ ПО ВЫПУСКУ HEAP

Настройте больше кучи в файле запуска, чтобы проект не ошибка перед main (). Размер кучи зависит от приложения. Пытаться выделить слишком много кучи и поэкспериментировать с уменьшением размера вниз. Функции __heapstats () и __heapvalid () могут помочь в устранение проблем с кучей.

РЕШЕНИЕ ПО ВЫПУСКУ ПОЛУХОСТИНГА

Чтобы удалить функции отладки низкого уровня, выполните одно из следующих действий: используйте программный пакет Compiler, включите Microlib или добавьте перенацелить. c файл.

  • Решите с помощью пакета компилятора Keil:

    В Keil MDK версии 5.14 и новее программный компонент Компилятор перенастраивает функции ввода / вывода стандартного C библиотека времени исполнения. Установите пакет Keil :: ARM_Compiler из пачка Окно установщика. В Управлении Окно RTE, выберите вариант для изменения целевого оборудования интерфейс канала ввода / вывода, например ретаргет:

    • STDIN для каналов отладки ITM
    • STDERR до точки останова
    • STDOUT к пользовательскому интерфейсу

    При выборе варианта «Пользователь» используйте ввод / вывод. Шаблон пользовательского кода для реализации индивидуального функциональность.

  • Решаем включив Микролиб:
    Микролиб уже удалены библиотеки полухостинга. Помимо меньшего размера, есть другие маленькие различия между Microlib и стандартной библиотекой C.
  • Решить с помощью retarget.c:

    Retarget.c импортирует этикетку, чтобы предотвратить создание проект с полухостингом:

     #pragma import (__ use_no_semihosting_swi)
     

    Остальная часть файла перенаправляет частично размещенные функции на непостоянные.Это был стандартный способ обращения с функции полухостинга в MDK-ARM версии 4 и до ARM :: Compiler pack был выпущен.
    См. Прикрепленные к этому делу файлы retarget.c .

РАЗРЕШЕНИЕ НА СБРОС ВЫПУСКА

На настраиваемых досках пользователь несет ответственность за настройку аппаратное подключение устройства к стандартному интерфейсу (SW или JTAG), используется блоком отладки. В диалоговом окне настройки целевого драйвера, если HW_RESET выбран или определяется автоматически, то возможно, что запуск приложение является первым тестом строки RESET.Стирание, вспышка для программирования и отладки может не потребоваться аппаратный сброс. Если физическое соединение неверно, то поведение по умолчанию устройство не определено.

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

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О HEAP

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПОЛУХОСТИНГЕ

СМОТРИ ТАКЖЕ

ПРИЛОЖЕННЫЕ ФАЙЛЫ

Запросить прикрепленные файлы к этой статье базы знаний.

Последняя редакция: 12 ноября 2020 г., четверг


GCC и программирование на чистом металле

Написано Пэт Ханрахан и Джули Зеленски

В этом руководстве дается краткий обзор уникальных особенностей компиляции программ C для выполнения в среде с нуля.

Размещенные и не размещенные (автономные) среды

Типичная программа компилируется для системы , размещенной на хосте , где она имеет доступ к стандартные библиотеки и средства, предоставляемые уровнем операционной системы. В режиме хоста программа запускается в соответствии с требованиями операционной системы хоста. Напротив, программа на «голом железе» не размещается; он не стоит на вершине операционная система или библиотека; он работает полностью автономно. Программа имеет свободу делать все, что захочет, без надоедливого вмешательства властной ОС, но не может рассчитывать ни на какие возможности, кроме тех, которые предоставляет сама себе.

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

Опция компилятора

- автономный

Этот параметр gcc указывает компилятору ограничить эту программу только теми функциями, которые доступны в автономной среде.

  $ arm-none-eabi-gcc -ffreestanding -c blink. c
  

В автономном режиме доступны только стандартные файлы заголовков: , , , , , и (стандарт C99 4.6). Эти заголовки также определяют типы, подходящие для используемой машины. как полезные константы, такие как минимальное и максимальное значения для разных типов. Другие стандартные файлы заголовков ( , и т. Д.) Не должны использоваться.

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

  int main (int argv, char * argv [], char * env []) // main в размещенном env
  

Компилятор выдаст предупреждения, если вы определите main по-другому для размещенной программы.

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

  void main (void) // main в окружении без покрытия
  

Параметр -ffreestanding также указывает компилятору не предполагать, что стандартные функции имеют свои обычные определения. Это предотвратит оптимизацию компилятора. на основе предположений о поведении стандартных библиотек.Например, в размещенной среде gcc гарантирует, что доступная библиотека соответствует спецификация языкового стандарта. Он может преобразовать printf ("привет \ n") в put ("привет") потому что знает из определения стандартной библиотеки ввода-вывода, что эти два функции в этом случае ведут себя эквивалентно. В автономном режиме вы можете определить свои собственные помещает функция и ваша версия ставит может действовать совершенно иначе, чем стандартная помещает функцию , что делает такую ​​замену недействительной.Таким образом, когда используется - отдельно стоящий , gcc не предполагает использование стандартной библиотечной среды и не будет выполнять такую ​​оптимизацию.

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

Параметры компоновщика для библиотек по умолчанию и начальных файлов

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

При компоновке размещенной программы стандартные системные библиотеки, такие как libc связаны по умолчанию, предоставляя программе доступ ко всем стандартным функции ( printf , strlen и др.). Параметр компоновщика -nodefaultlibs отключает связывание с этими библиотеками по умолчанию; связаны только библиотеки именно те, которые вы явно назначаете компоновщику с помощью флага -l .

libgcc.a — стандартная библиотека (по умолчанию скомпонована, исключена -nodefaultlibs ) который предоставляет внутренние подпрограммы для устранения недостатков конкретных машин. Например, процессор ARM не включает команду деления. Рука версия libgcc.a включает функцию деления, и компилятор выдает вызывает эту функцию там, где это необходимо. Программа, которая пытается использовать разделение и связана -nodefaultlibs , не сможет связать. Ошибка компоновщика будет чем-то сродни

  arm-none-eabi-ld: main.o: в функции `main ':
main.c: 11: неопределенная ссылка на `__aeabi_idiv '
  

Вы можете разрешить эту ссылку, связавшись с libgcc.а ( -lgcc ).

Обратите внимание, что libgcc не , а предоставляет memcpy и связанные с ним функции. Похоронен глубоко в https://gcc.gnu.org/onlinedocs/gcc/Standards.html, есть небольшой выноска, которая отмечает это:

Большинство подпрограмм поддержки компилятора, используемых GCC, присутствуют в libgcc, но есть несколько исключений. GCC требует автономной среды предоставить memcpy , memmove , memset и memcmp .

Если вашей программе требуется одна из этих подпрограмм, вам нужно будет предоставить ее самостоятельно.

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

Опция -nostartfiles указывает компоновщику не использовать стандартные функции запуска системы или свяжите код, содержащий эти функции.

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

leaflabs / libmaple: [НЕАКТИВНО] Библиотека C и C ++ для плат разработки STM32 ARM Cortex-M3.

GitHub — leaflabs / libmaple: [НЕАКТИВНО] Библиотека C и C ++ для плат разработки STM32 ARM Cortex-M3.

[НЕАКТИВНО] Библиотека C и C ++ для плат разработки STM32 ARM Cortex-M3.

Файлы

Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.

Тип

Имя

Последнее сообщение фиксации

Время фиксации

 [НЕАКТИВНЫЙ] libmaple

libmaple неактивен и больше не принимает заявки.Пожалуйста примите к сведению
www.stm32duino.com вместо этого.

-------------------------------------------------- ----------------------------

                   _ _ _ _
                  | (_) | __ _ __ ___ __ _ _ __ | | ___
                  | | | '_ \ | '_ `_ \ / _` | '_ \ | | / _ \
                  | | | | _) | | | | | | (_ | | | _) | | __ /
                  | _ | _ | _. __ / | _ | | _ | | _ | \ __, _ | .__ / | _ | \ ___ |
                                            | _ | от LeafLabs!
                                                              листовые лаборатории.com


Последнюю версию этого репозитория можно найти здесь:

    https://github.com/leaflabs/libmaple

ВАЖНО: прочтите ВЗЛОМ _перед_ отправкой исправлений.

Общая информация
-------------------------------------------------- ----------------------------

libmaple - это библиотека для программирования STM32 линии Cortex M3.
микроконтроллеры. Он имеет чистый слой C, собственно libmaple, который
большую часть работы, а также слой C ++ Wirish, который обеспечивает высокоуровневый
удобные функции и интерфейс, совместимый с Wiring / Arduino.libmaple разработан для обеспечения переносимости и в настоящее время работает на различных
микроконтроллеров STM32F1, с экспериментальной поддержкой
для микроконтроллеров STM32F2.

Использование libmaple
-------------------------------------------------- ----------------------------

Самый простой способ использовать libmaple - это согласование с Maple IDE. 
Maple IDE, родственный проект LeafLabs, представляет собой форк Arduino IDE.
можно использовать для программирования досок Maple, которые включают libmaple и
набор инструментов для компиляции и загрузки:

    http: // leaflabs.com / docs / maple-ide-install.html

Кроме того, HOWTO по настройке этой библиотеки для использования из
командная строка в среде Unix доступна здесь:

    http://leaflabs.com/docs/unix-toolchain.html

Документация и т. Д.
-------------------------------------------------- ----------------------------

HTML-документация для последней версии libmaple / Maple IDE:
доступно здесь:

    http://leaflabs.com/docs/

libmaple хорошо документирован в комментариях Doxygen. HTML
документация, указанная выше (которая также включает Doxygen
output) автоматически создается из исходных файлов в
Репозиторий leaflabs-docs.Чтобы получить листовые лаборатории-документы
репозиторий, посетите:

    http://github.com/leaflabs/leaflabs-docs/

Макет репозитория
-------------------------------------------------- ----------------------------

/строить/

    Вывод компилятора

/ contrib /

    Ресурсы, предоставленные сообществом.  LeafLabs не поддерживает
    содержимое этого каталога, поэтому оно может устареть.

/Примеры/

    Пример кода и тестовые программы. Скопируйте их в /main.cpp, чтобы скомпилировать.

/ libmaple /

    Это основа библиотеки.Только C, без C ++. В
    Уровень совместимости, подобный Arduino (в C ++), находится в / wirish /.

/ библиотеки /

    Специальные библиотеки, которые не заслуживают включения в
    каталоги / libmaple / и / wirish /, предназначенные для
    общее использование. Здесь находятся библиотеки, совместимые с Arduino.

/ЛИЦЕНЗИЯ

    Информация о лицензировании и авторских правах.

/main.cpp.example

    main.cpp требуется для успешной сборки, но не существует
    дефолт; используйте этот файл в качестве шаблона для построения вашей программы. К
    по умолчанию просто мигает светодиод./ Makefile

    Инструкции по сборке libmaple для GNU Make. (Это дополняется
    build-targets.mk, файлы rules.mk по всему дереву и
    файлы в support / make /).

/Примечания/

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

/ПРОЧТИ МЕНЯ

    Этот файл ;).

/поддерживать/

    Файлы поддержки и скрипты для различных целей.

    gdb / GDB скрипты.
    ld / Linker скрипты.
    make / Дополнительные файлы, используемые Makefile верхнего уровня.
    скрипты / Разное.Конфигурация doxygen / Doxygen.
    stm32loader.py Сценарий загрузки для встроенного загрузчика USART STM32.

/ wirish /

    Дополнительные оболочки и функциональность для кода нижнего уровня в
    / libmaple /. Эти файлы реализуют «проводку» в Arduino.
    библиотека.
 

Около

[НЕАКТИВНО] Библиотека C и C ++ для плат разработки STM32 ARM Cortex-M3.

Ресурсы

Лицензия

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

— Справочник по Arduino Сроки

— Справочник по Arduino

Официальные библиотеки

  • AudioFrequencyMeter: Получите основную высоту звукового сигнала
  • NTP Клиент: NTPClient для подключения к серверу времени
  • RTCZero: Позволяет использовать функции RTC.Только для Arduino Zero, MKRZero и MKR1000.

Предоставлено сообществом

  • AceTime: Дата, время, часы и часовые пояса базы данных TZ для Arduino.
  • Adafruit Si5351 Библиотека: Драйвер для Adafruit Si5351 Clockgen Breakout
  • ардуино-таймер: Библиотека таймеров для задержки вызовов функций
  • arduino-timer-api: Простой кроссплатформенный API для многозадачности обработчиков прерываний таймера
  • Датчики
  • Arduino: Библиотека библиотек датчиков
  • Arduino Резьба: Простой способ запускать потоки на Arduino
  • ArduinoThreadRunOnce: Запустите ArduinoThread только один раз
  • Асинхронные_операции: Библиотека для точного отслеживания длинных задач без блокировки основного потока
  • AsyncDelay: Простая библиотека абстракций, реализующая задержки и таймауты.
  • AsyncTimer: JavaScript-подобные функции асинхронного времени (setTimeout, setInterval)
  • avdweb_SAMDtimer: Библиотека таймера для SAMD21 и Arduino Zero
  • avdweb_VirtualDelay: Позволяет использовать (множественные) задержки без блокировки выполнения кода. Arduino Uno и Zero.
  • Стандартная временная библиотека C для AVR
  • :

    Функции реального времени для Goldilocks ATmega1284p и ATmega2560

  • Хронограф: Библиотека хронометра / секундомера, которая считает время, прошедшее с момента запуска.
  • CMMC Easy: CMMC Easy — это библиотека для управления временем без задержки.
  • CoopTask: Переносимая библиотека C ++ для совместной многозадачности, например, Arduino Scheduler на ESP8266 / ESP32, AVR, Linux, Windows
  • CoopThreads: Легкая, не зависящая от платформы библиотека кооперативных потоков
  • Cron Сигналы тревоги: Планируйте срабатывание сигналов тревоги в определенное время с помощью синтаксиса crontab.
  • DCF77: Считайте и расшифруйте атомное время, передаваемое радиостанцией DCF77.
  • dcf77_xtal: Декодер DCF77 с отличной помехоустойчивостью.
  • Debouncer: Библиотека Debounce для Arduino
  • Осциллятор
  • DMO: Библиотека, которая упрощает управление включением / выключением вывода с фиксированной или динамической скоростью.
  • DM Таймер: Библиотека, которая упрощает повторные вызовы без блокировки.
  • Эмулятор
  • DS1307: Эмулятор DS1307, который преобразует Arduino в чип RTC, фактически не имея физического RTC.
  • DS1307новый Добавление будильника к функции RTC DS1307
  • DS1307RTC: Используйте микросхему часов реального времени DS1307 с библиотекой времени
  • DS3231: Библиотека Arduino для часов реального времени DS3231 (RTC)
  • ds3231FS: Библиотека Arduino для интегрированных часов реального времени Maxim DS3231.
  • DS3232RTC: Библиотека Arduino для интегрированных часов реального времени Maxim DS3232 и DS3231.
  • DST RTC: Библиотека Arduino для автоматической настройки времени RTC для перехода на летнее время (DST)
  • D Время: Служба обхода даты и времени
  • DueTimer: Библиотека таймера полностью реализована для Arduino DUE
  • EasyNTPClient: Библиотека для чтения времени с серверов протокола сетевого времени (NTP).
  • EasyTask: Легкая, но мощная реализация диспетчера задач.
  • Прошло
  • Миллис: Упрощает создание адаптивных эскизов.
  • ESP32 Время: Установка и получение внутреннего времени RTC на платах ESP32.
  • ESPPerfectTime: Библиотека SNTP, которая обеспечивает более точное время для ESP8266 / ESP32.
  • каждый раз: Простая в использовании библиотека для периодического выполнения кода.
  • EveryTimer: Библиотека, предоставляющая возможность вызывать функцию через определенные промежутки времени.
  • Руководитель: Выполнять подпрограммы по заданному расписанию
  • ezВремя: ezTime — произносится как «Easy Time» — это очень простая в использовании библиотека времени и даты Arduino, которая обеспечивает поиск сетевого времени NTP, расширенную поддержку часовых поясов, форматированные строки времени и даты, пользовательские события, точность до миллисекунды и многое другое.
  • FaBo 215 RTC PCF2129: Библиотека для FaBo RTC I2C Brick
  • FifteenStep: Библиотека MIDI-секвенсоров Arduino общего назначения.
  • FireTimer: Простая и неблокирующая библиотека для определения времени выполнения процессов
  • flex_DST: Библиотека для наблюдения за летним временем в соответствии с предопределенными параметрами пользователя.
  • FreeRTOS:

    Операционная система реального времени FreeRTOS, реализованная для AVR (Uno, Nano, Leonardo, Mega).

  • FreqPeriodCounter: Умная библиотека с обширными функциями для подсчета (множественных) частот. Для Arduino Uno и Zero.
  • FrequencyTimer2: Сгенерируйте частоту с помощью Timer2
  • фрт: Легкая и простая в использовании оболочка для библиотеки Arduino_FreeRTOS_Library.
  • Grove — RTC DS1307: Библиотека Arduino для управления Grove — RTC DS1307.
  • HeliOS: Бесплатная встроенная операционная система.
  • IntervalCallback: Библиотека для повторного вызова обратного вызова через определенное время.
  • jm_Scheduler: Библиотека кооперативного планировщика для Arduino.
  • светодиодная мигалка: Отзывчиво мигают светодиоды
  • леев: Простой планировщик, запускающий небольшие задачи в IRS
  • leOS2: Простой планировщик на основе сторожевого таймера, который выполняет небольшие задачи в IRS
  • петлитель: Протокладчик на основе использования millis ()
  • M5_RTC_Module: Библиотека для использования RTC-модуля от iotec для M5-Stack.
  • MCP79412RTC: Библиотека Arduino для часов / календаря реального времени Microchip MCP79411 / 12.
  • MicroNMEA: Компактная библиотека Arduino для анализа предложений NMEA.
  • Миллис Таймер: Библиотека таймеров для работы с millis ().
  • MilliStopper: Простая в использовании и легкая пробка
  • Минимальный тайм-аут: Минимальная готовая к работе библиотека тайм-аута для Arduino.
  • мс Задача: Используйте аппаратный таймер 1 для запуска задач в установленное время
  • MsTimer2: Запустить функцию прерывания с помощью Timer2
  • muТаймер: Библиотека Arduino для удобного использования задержек включения / выключения и таймеров цикла с неблокирующими функциями.
  • Неотимер: «Мощный неблокирующий таймер»
  • Нет Задержка: Библиотека Arduino для использования функции Millis для неблокирующих задержек.
  • NodeRedTime: Получите временную метку Unix Epoch из потока Node-Red.
  • NtpClientLib: Клиентская библиотека NTP
  • PagonGameDev GameLoop: «Библиотека для создания игры с GameLoop»
  • PCF8523: Библиотека Arduino для часов реального времени PCF8523
  • PCF8583: PCF8583 Часы реального времени и библиотека счетчиков событий для Arduino
  • Таймер опроса: Библиотека Arduino для гибкого управления временем и событиями с помощью опроса
  • Планировщик процессов: Библиотека многозадачности ООП
  • pt Планировщик: Библиотека Arduino для написания неблокирующих периодических задач без использования процедур задержки или миллисекунд.
  • PWMFreak: Настраивает частоту ШИМ на выводе
  • RBD_Timer: Управляйте множеством запланированных событий.
  • Ракетный Крик RTCAVRZero: Минималистичная реализация RTC (счетчик реального времени) для микроконтроллеров MegaAVR 0-серии.
  • RT-резьба: Перенос операционной системы в реальном времени для плат Arduino SAM и SAMD
  • часов реального времени: Библиотека для RTC на основе I2C (DS1307, DS3231, PCF8563).
  • RTC RV-3028-C7 Библиотека Arduino: Библиотека для управления часами реального времени RV-3028-C7 с чрезвычайно низким энергопотреблением
  • Rtc_Pcf8563: Библиотека, которая взаимодействует с микросхемой часов реального времени Phillips PCF8563.
  • RTCC Счетчик: Обеспечивает использование периферийного устройства RTC в режиме 32-битного счетчика.Только для плат Arduino SAMD21.
  • RTCDS1307: Библиотека для rtc 1307
  • RTCDue: Использование для RTC внутри SAM3X8E от Arduino DUE
  • RTClib: Форк фантастической библиотеки RTC
  • от Jeelab
  • RTC, время: Совместимая библиотека «Standard C Runtime» для взаимодействия с модулями часов реального времени DS1307 и DS3231.
  • RTC Таймер: Библиотека Arduino для простого выполнения запланированных задач.
  • RTCx: Библиотека для доступа к часам реального времени DS1307, DS1337 / 8, MCP7941x и PCF85263.
  • RV-1805-C3: Библиотека для модуля RTC с экстремально низким энергопотреблением Micro Crystal RV-1805-C3.
  • RV-3028-C7: Библиотека для модуля RTC с очень низким энергопотреблением Micro Crystal RV-3028-C7.
  • SandTimer: Простой в использовании и легкий таймер
  • SceneManager: кооперативный мультисценовый менеджер для Arduino
  • ПланировщикESP8266: Библиотека для создания расписаний по времени.
  • РасписаниеТаблица: Эта библиотека позволяет планировать несколько действий по времени.
  • сек Таймер: Счетчик секунд простой
  • SeqTimer: Небольшая часть последовательного класса таймера (не изменяет аппаратные таймеры)
  • simpleDSTadjust: Функция автоматического перехода на летнее время для Arduino / ESP8266
  • SimpleTicker: Библиотека для создания тикеров, которая будет уведомлять пользователя об истечении заданного периода.Заменяет delay () и позволяет пользователям писать неблокирующий код.
  • SimpleTimer: Простой таймер ардуино.
  • SimplyAtomic: Библиотека для создания переносимых атомных блоков в вашей программе
  • легкое исчезновение: затухание временного значения.
  • Smart_Duty_Cycling: Автоматическая генерация рабочего цикла для вашей программы Arduino.
  • SoftTimer: SoftTimer — это легкое псевдо-многозадачное решение для Arduino.
  • SoftTimers: Библиотека SoftTimers arduino — это набор программных таймеров. Библиотека нацелена на значительное упрощение многозадачной сложности.
  • SparkFun Clock 5P49V60 Библиотека Arduino: Библиотека, обеспечивающая все функции генератора часов SparkFun 5P49V60.
  • SparkFun Qwiic RTC RV1805 Библиотека Arduino: Библиотека для управления RV-1805 чрезвычайно точными часами реального времени с очень низким энергопотреблением
  • спин-таймер: Универсальный таймер с разрешением 1 миллисекунда, поддерживающий принципы ООП.
  • Стенс Таймер: Доступная библиотека таймеров Arduino, которая позволяет использовать обратные вызовы для экземпляров классов, а также статические обратные вызовы (наиболее часто используемые).
  • STM32duino FreeRTOS: Операционная система реального времени реализована для STM32
  • STM32duino RTC: Позволяет использовать функции RTC плат на базе STM32.
  • STM32F1_RTC: Позволяет использовать функции RTC плат на базе STM32F1xx с использованием внешнего низкоскоростного генератора.
  • StopWatch_RT: Библиотека Arduino, реализующая секундомер.
  • Стробер: Простой в использовании и легкий проигрыватель со светодиодной подсветкой
  • Switch3_lib: Клон библиотеки Switch_lib (O.Goma) для переключения цифровых выводов с помощью таймеров, добавляющих миллисекунды
  • Switch_lib: Библиотека переключения цифровых выводов с таймерами, выдержкой времени и периодами
  • Задание Макуны: Библиотека, которая упрощает создание сложных проектов, состоящих из нескольких задач.
  • Планировщик заданий: Легкий и быстрый планировщик с вытеснением для плат ATMega и SAM3X Arduino.
  • Таскер: Избавьтесь от вызовов delay (), вместо этого запланируйте задачи / функции.
  • TaskManager: кооперативный многозадачный менеджер для Arduino
  • Taskrunner: Позволяет arduino запускать планировщик, который может запускать функции с определенной частотой
  • Планировщик задач: Совместная многозадачность для Arduino, ESPx, STM32 и других микроконтроллеров.
  • TeensyTimerИнструмент: Общий интерфейс для таймеров Teensy
  • Таймер с резьбой: Библиотека синхронизации с резьбой для mbed Arduinos
  • Тикер: Библиотека для создания тикеров, которые могут вызывать повторяющиеся функции. Заменяет delay () неблокирующими функциями.
  • Время: Функциональность хронометража для Arduino
  • TimeAlarms: Выполняйте задачи в определенное время или через определенные промежутки времени.
  • TimeInterrupt: Позволяет прерывания по таймеру на различных платформах.
  • TimeOut: Библиотека, которая выполняет обратный вызов времени.
  • Тайм-аут обратного вызова: Библиотека для обратного вызова через определенное время.
  • TimeProfiler: Профайлер времени для Arduino
  • TimerEvent: Используйте эту простую библиотеку, чтобы без труда создавать синхронизированные события.
  • TimerFa: Программный таймер
  • TimerFive: Используйте аппаратный таймер 5 для более точного управления ШИМ и / или запуска функции периодического прерывания
  • TimerFour: Используйте аппаратный Timer4 для более точного управления ШИМ и / или запуска функции периодического прерывания
  • TimerFour32u4: Разрешить использование 10-битного аппаратного высокоскоростного Timer4 на ATMega16u4 и ATMega32u4.
  • TimerOne: Используйте аппаратный таймер 1 для более точного управления ШИМ и / или запуска функции периодического прерывания
  • ТаймерТри: Используйте аппаратный таймер 3 для более точного управления ШИМ и / или запуска функции периодического прерывания
  • Часовой пояс: Библиотека Arduino для облегчения преобразования часовых поясов и автоматической корректировки летнего времени.
  • TinyRTCLib: Маленькая версия RTCLib для использования с TinyWireM
  • Библиотека времени работоспособности: Библиотека времени работы для плат Arduino и совместимых систем
  • uTimerLib: Крошечная библиотека таймеров, совместимая с разными устройствами
  • VariableTimedAction: Библиотека для создания событий / действий по времени.
  • WeeklyAlarm: будний таймер (термостат, как планировщик)
  • Электропроводка-таймер: Универсальный таймер с разрешением 1 миллисекунда, основанный на времени безотказной работы системы (например, функция Arduino: millis () или функция STM32: HAL_GetTick ()), поддерживающий принципы ООП.
  • Еще одна библиотека Debounce для Arduino: Асинхронная библиотека Arduino для устранения неполадок
  • ZeroTC45: Позволяет использовать счетчики ARM Cortex-M0 TC4 и TC5 для периодических прерываний.

Stm32 — Библиотеки Arduino

Список 109 библиотек в архитектуре stm32.

Библиотека Библиотека
Adafruit Protomatter Библиотека для светодиодных матриц Adafruit RGB.
ADCTouchSensor Создание сенсорных датчиков с одним аналоговым выводом без внешнего оборудования
ArdTap Библиотека для управления платой Arduino с мобильного за пару минут.Никакого кодирования, только конфигурация.
ArduinoUniqueID Arduino для получения заводского серийного номера микроконтроллера Atmel AVR, SAM, SAMD, STM32 и ESP.
AsyncDNSServer_STM32 Библиотека асинхронного DNS-сервера для STM32 с использованием встроенного LAN 8742A Ethernet
AsyncUDP_STM32 Асинхронная библиотека UDP для STM32 с использованием встроенного LAN 8742A Ethernet
AsyncWebServer_STM32 AsyncWebServer для STM32 с использованием встроенного LAN 8742A Ethernet
Atmel TSS463C VAN bus Библиотека контроллера Datalink Библиотека для контроллера Atmel TSS463C VAN Datalink с SPI
Bh2750 Arduino для коммутационных плат цифровых датчиков освещенности, содержащих Bh2750FVI IC
Синий дисплей Эта библиотека позволяет смартфону или планшету Android работать в качестве графического дисплея для Arduino.
Синий дисплей Эта библиотека позволяет смартфону или планшету Android работать в качестве графического дисплея для Arduino.
Библиотека BlueVGA для BluePill Библиотека VGA для STM32F103C8T6 (BluePill), которая может управлять размером 224×240 пикселей с помощью плиток 8×8 или символов из пользовательского растрового шрифта
BlynkEthernet_STM32_WM Simple Blynk Credentials Manager для плат STM32 с использованием встроенных экранов LAN8742A Ethernet, ENC28J60 или W5x00 Ethernet, с SSL или без него, данные конфигурации сохраняются в EEPROM.
Ch476msc Библиотека для микросхемы управления файловым менеджером Ch476.
DaisyDuino Библиотека Arduino для аудиоплатформы Daisy.
EthernetWebServer_SSL_STM32 Простой веб-сервер TLS / SSL Ethernet, клиент HTTP и клиентская библиотека WebSocket для плат STM32F / L / H / G / WB / MP1 с запущенным сервером WebServer с использованием встроенных экранов Ethernet LAN8742A, Ethernet W5x00 или ENC28J60. Теперь он поддерживает Ethernet TLS / SSL Client.
EthernetWebServer_STM32 EthernetWebServer_STM32 — это простая библиотека Ethernet WebServer, HTTP Client и WebSocket Client для плат STM32F / L / H / G / WB / MP1, использующих встроенные экраны Ethernet LAN8742A, Ethernet W5x00 или ENC28J60
Жиры Файловая система FAT на основе решения FatFS с открытым исходным кодом.
FlashStorage_STM32 Библиотека FlashStorage_STM32 предназначена для обеспечения удобного способа хранения и извлечения данных пользователя с использованием энергонезависимой флэш-памяти STM32F / L / H / G / WB / MP1.Он использует буферизованное чтение и запись, чтобы минимизировать доступ к Flash. Теперь он поддерживает запись и чтение всего объекта, а не только побайтно.
GroveDriverPack GroveDriverPack
GUIslice GUIslice Встроенная библиотека графического интерфейса пользователя для сенсорного экрана на языке C для Arduino и Raspberry Pi
IBusBM Библиотека Arduino для протокола Flysky / Turnigy RC iBUS — сервопривод (прием) и датчики / телеметрия (отправка) с использованием аппаратного UART (архитектуры AVR, ESP32 и STM32)
IRMP Прием и отправка инфракрасных сигналов.
Библиотека устройств KONNEKTING Библиотека, позволяющая создавать устройства KNX на базе Arduino.
мWebSockets Простая в использовании реализация WebSockets для микроконтроллеров
Платформа MCCI Catena Arduino Библиотека Arduino для систем MCCI Catena 44xx, 45xx, 46xx и 48xx.
MCCI FRAM I2C Драйвер для FRAM MCCI Catena на базе I2C.
MjGrove MjGrove
NeoPatterns Шаблоны для полосок и матриц NeoPixel, включая шаблоны из примера NeoPattern от Adafruit.
Контроллеры NintendoSTM32 Поддержка Nunchuck, контроллера GameCube и джойстиков Game Port на STM32F1
OneWireNg Сервисная библиотека 1-Wire Arduino
OpenMRNLite Стек сетевых протоколов для модельных железных дорог: реализация OpenLCB и LCC.
PJON PJON — сетевой протокол мультимедийной шины с открытым исходным кодом и несколькими ведущими.
PS2KeyAdvanced Клавиатура PS2 ПОЛНОЕ управление и обработка ВСЕХ клавиш, а также управление светодиодами.
RC-переключатель Работает с устройствами 433/315 МГц.
Выход SerialWire С последовательным проводным выходом (SWO) stm32duino может записывать трассировку и регистрацию на компьютер на высокой скорости.
Сервопривод Обеспечивает плавное движение сервопривода. Предусмотрены как линейные, так и другие (кубические, круговые, отскоки и т.д.) легкие движения для сервоприводов. Поддерживаются библиотека сервоприводов Arduino или расширители сервоприводов PCA9685.
SP Память Библиотека памяти SPI для Arduino. (Ранее SPIFlash)
SSLClient Библиотека Arduino для добавления функциональности TLS к любому клиентскому классу
STM32F1_RTC Позволяет использовать функции RTC плат на базе STM32F1xx с использованием внешнего низкоскоростного генератора.
STM32_TimerInterrupt Эта библиотека позволяет использовать прерывание от аппаратных таймеров на плате на базе STM32
STM32duino ASM330LHH Автомобильный инерциальный измерительный блок.
Примеры STM32duino Предоставляет несколько примеров для ядра Arduino для микроконтроллеров STM32.
STM32duino FP_Примеры Предоставляет несколько функциональных пакетов, которые объединяют использование нескольких плат X-NUCLEO
STM32duino FreeRTOS Операционная система реального времени, реализованная для STM32
STM32duino HTS221 Емкостной цифровой датчик относительной влажности и температуры.
STM32duino I-NUCLEO-LRWAN1 Эта библиотека предоставляет драйвер LoRa® для платы расширения I-NUCLEO-LRWAN1.
STM32duino IIS2MDC 3D-магнитометр со сверхмалым энергопотреблением.
STM32duino ISM330DLC Трехмерный акселерометр и трехмерный гироскоп.
STM32duino ISM43362-M3G-L44 Эта библиотека включает драйверы для WiFi-устройства Inventek Systems с именем ISM43362-M3G-L44.
STM32duino LIS2DW12 Трехмерный акселерометр со сверхнизким энергопотреблением.
STM32duino LIS2MDL 3D-магнитометр со сверхмалым энергопотреблением.
STM32duino LIS3MDL Высокопроизводительный 3D-магнитометр.
STM32duino с низким энергопотреблением Функции примитивов энергосбережения для плат STM32
STM32duino LPS22HB 260-1260 гПа Барометр с цифровым абсолютным выходом.
STM32duino LPS22HH Нано датчик давления.
STM32duino LPS25HB 260-1260 гПа Барометр с цифровым абсолютным выходом.
STM32duino LSM303AGR 3D-акселерометр и 3D-магнитометр.
STM32duino LSM6DS0 Трехмерный акселерометр и трехмерный гироскоп.
STM32duino LSM6DS3 Трехмерный акселерометр и трехмерный гироскоп.
STM32duino LSM6DSL Трехмерный акселерометр и трехмерный гироскоп.
STM32duino LSM6DSO Инерциальный измерительный блок сверхнизкого энергопотребления.
STM32duino LSM6DSOX Инерциальный измерительный блок сверхнизкого энергопотребления.
STM32duino LSM6DSR Инерциальный измерительный блок iNEMO.
STM32duino LwIP Облегченный стек TCP / IP
STM32duino M24SR64-Y Эта библиотека включает драйверы для метки NFC / RFID ST M24SR64-Y.
STM32duino M95640-R Эта библиотека включает драйверы для ST M95640-R EEPROM.
STM32duino MX25R6435F Библиотека флэш-памяти Quad-SPI NOR.
Жест приближения STM32duino Позволяет выполнять простое обнаружение жестов с помощью датчиков приближения
STM32duino RTC Позволяет использовать функции RTC плат на базе STM32.
STM32duino S2-LP Эта библиотека включает драйверы для трансивера ST S2-LP с частотой ниже 1 ГГц.
STM32duino SPBTLE-RF Эта библиотека включает драйверы для устройства ST BlueNRG / BlueNRG-MS Bluetooth Low Energy.
STM32duino ST25DV Позволяет управлять NFC ST25DV
STM32duino STM32 Ethernet Разрешает сетевое соединение (локальное и Интернет) с помощью платы STM32.
STM32duino STM32SD Позволяет читать и писать на SD-карту с помощью слота для SD-карты на плате STM32.
STM32duino STTS22H цифровой датчик температуры.
STM32duino STTS751 цифровой датчик температуры.
STM32duino VL53L0X Позволяет управлять VL53L0X (датчик времени полета и обнаружения жестов)
STM32duino VL53L1 Позволяет управлять VL53L1 (время полета)
STM32duino VL53L1X Позволяет управлять VL53L1X (датчик времени полета и обнаружения жестов)
STM32duino VL53L3CX Позволяет управлять VL53L3CX (времяпролетный датчик дальности с обнаружением нескольких целей).
STM32duino VL6180 Позволяет управлять VL6180 (датчик приближения)
STM32duino VL6180X Позволяет управлять VL6180X (датчик приближения и внешнего освещения (ALS))
STM32duino X-NUCLEO-53L0A1 Позволяет управлять датчиками VL53L0X на борту X-NUCLEO-53L0A1
STM32duino X-NUCLEO-53L1A1 Позволяет управлять датчиками VL53L1X на борту X-NUCLEO-53L1A1
STM32duino X-NUCLEO-53L1A2 Позволяет управлять датчиками VL53L1 на борту X-NUCLEO-53L1A2
STM32duino X-NUCLEO-53L3A2 Позволяет управлять датчиками VL53L3CX на борту X-NUCLEO-53L3A2
STM32duino X-NUCLEO-6180A1 Позволяет управлять датчиками VL6180 на борту X-NUCLEO-6180A1
STM32duino X-NUCLEO-6180XA1 Позволяет управлять датчиками VL6180X на борту X-NUCLEO-6180XA1
STM32duino X-NUCLEO-GNSS1A1 Позволяет управлять X-NUCLEO-GNSS1A1 (плата расширения GNSS на базе Teseo LIV3F)
STM32duino X-NUCLEO-IDB05A1 Позволяет управлять платой расширения ST X-NUCLEO-IDB05A1
STM32duino X-NUCLEO-IHM02A1 Позволяет управлять платой расширения ST X-NUCLEO-IHM02A1
STM32duino X-NUCLEO-IHM05A1 Позволяет управлять платой расширения ST X-NUCLEO-IHM05A1
STM32duino X-NUCLEO-IHM12A1 Позволяет управлять платой расширения ST X-NUCLEO-IHM12A1
STM32duino X-NUCLEO-IKA01A1 Позволяет управлять платой расширения ST Microelectronics X-NUCLEO-IKA01A1
STM32duino X-NUCLEO-IKS01A1 Позволяет управлять платой расширения ST X-NUCLEO-IKS01A1
STM32duino X-NUCLEO-IKS01A2 Позволяет управлять платой расширения ST X-NUCLEO-IKS01A2
STM32duino X-NUCLEO-IKS01A3 Позволяет управлять платой расширения ST X-NUCLEO-IKS01A3
STM32duino X-NUCLEO-LED61A1 Позволяет управлять платой расширения ST Microelectronics X-NUCLEO-LED61A1
STM32duino X-NUCLEO-NFC01A1 Позволяет управлять платой расширения ST X-NUCLEO-NFC01A1
STM32duino X-NUCLEO-NFC03A1 Позволяет управлять платой расширения ST X-NUCLEO-NFC03A1
STM32duino X-NUCLEO-NFC04A1 Позволяет управлять платой расширения ST X-NUCLEO-NFC04A1
STM32duino X-NUCLEO-S2868A1 Позволяет управлять радиостанцией S2-LP на борту X-NUCLEO-S2868A1
STM32duino X-NUCLEO-S2868A2 Позволяет управлять радиостанцией S2-LP на борту X-NUCLEO-S2868A2
STM32duino X-NUCLEO-S2915A1 Позволяет управлять радиостанцией S2-LP на борту X-NUCLEO-S2915A1
ВНХ4СП30 Библиотека для контроллеров моторов ВНХ4СП30 и ВНХ5019А-Э (драйвер мотора Н-мост)
WiFiSpi Библиотека Wi-Fi Arduino, подключающая ESP8266 по протоколу SPI
Wio cell lib для Arduino Драйвер плат Wio 3G и Wio LTE M1 / ​​NB1 (BG96).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *