[Установилось: старое ядро] Представляем новую доставку для STM

Wi6labs
Пн 19 сентября 2016 г. 8:35 утра
Привет всем

Приятно видеть интерес сообщества к нашей работе по переносу STM32 на Arduino. : D

Мы хотели бы представить нашу работу и ответить на ваши вопросы о нашем выборе реализации.

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

Мы решили разделить проект на 2 части:
-LIB, который содержит доступ к драйверам и конфигурации MCU. Библиотека содержит STM32 HAL. Скомпилируется независимо.
ST попросил использовать HAL, так как он поддерживается командами ST, чтобы вы могли легко интегрировать новые функции :).
-Ядро arduino с протирским интерфейсом и вариантом.

У них не должно быть прямой ссылки на регистры аппаратного обеспечения в Arduino Core.

Мы четко понимаем вопросы о следах памяти, но этот проект представляет собой компромисс, чтобы заставить STM32 работать более эффективно с Arduino Core, самым простым способом.

Так что, если у вас есть какие -либо вопросы, не стесняйтесь, и мы попытаемся ответить.

Бренд

Wi6labs Team

Rogerclark
Пн 19 сентября 2016 г., 10:08
Добро пожаловать Wi6labs

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



У нас есть несколько вопросов о том, как добавить больше досок из одной и той же серии MCU E.глин. STM32F1

Старое ядро ​​"Libmaple" поддерживало STM32F103CX, STM32F103RX. STM32F103VX и STM32F103ZX

@rickkimbal начал добавлять плату «Bluepill» (STM32F103C8) в ядро ​​F103, но мы поняли, что в HW_CONFIG были различия, и нам пришлось переместить этот файл из Libstm32f1 в папку варианта.

Это обсуждается в 2 потоках

http: // www.STM32duino.com/viewtopic.PHP?F = 48&t = 1407

и

http: // www.STM32duino.com/viewtopic.PHP?F = 48&t = 1406


Также. Одна вещь, которую нам нужно добавить, это USB CDCACM, я не думаю, что у кого -либо из плат ядра есть прямое USB -соединение, но большинство плат F103 используют встроенный USB -порт, и у нас есть загрузчик, который мы используем для загрузки.

КСТАТИ
Я думаю, возможно, я должен переместить весь этот размер в этот раздел http: // www.STM32duino.com/viewforum.PHP?F = 48 как это посвящено вашей работе ;-)

Рик Кимбалл
Пн 19 сентября 2016 г., 8:31 вечера
@Wi6labs Вы планируете внести какие -либо изменения в ядро ​​STM32F1?

Рик Кимбалл
Пн 19 сентября 2016 г., 8:51 вечера
Wi6labs написал: Мы решили разделить проект на 2 части:
-LIB, который содержит доступ к драйверам и конфигурации MCU. Библиотека содержит STM32 HAL. Скомпилируется независимо.
ST попросил использовать HAL, так как он поддерживается командами ST, чтобы вы могли легко интегрировать новые функции :).
-Ядро arduino с протирским интерфейсом и вариантом.

У них не должно быть прямой ссылки на регистры аппаратного обеспечения в Arduino Core.
Wi6labs Team

Рик Кимбалл
Пн 19 сентября 2016 г., 8:56 вечера
Rogerclark написал: Также. Одна вещь, которую нам нужно добавить, это USB CDCACM, я не думаю, что у кого -либо из плат ядра есть прямое USB -соединение, но большинство плат F103 используют встроенный USB -порт, и у нас есть загрузчик, который мы используем для загрузки.

Rogerclark
Пн 19 сентября 2016 г., 21:18
Рик,

Фредерик опубликовал список доски, которую они намерены поддерживать, но это выглядело только как одна доска на серию MCU.

Я напишу Laurent, руководителю команды в STM, так как Фредерик теперь может уехать в отпускном отпуске.

Я думаю, что нам нужно будет подождать до завтра, чтобы ответить от Wi6labs, потому что он будет продолжаться в полночь во Франции

Кстати. Еще одна вещь, которую я заметил, это то, что имена PIN -код, кажется, устанавливаются с использованием #Defines, а не перечислены.
Если WI6 больше не выполняет работу над ядром F1, я согласен, что потребуются более радикальные изменения.

Wi6labs
Вторник 20 сентября 2016 г., 7:36 утра
Роджер,

ST разработала поддержку доски Nucleo для:
  • STM32F103RBT6 STM32F303RET6 STM32F429ZIT6 STM32L476RG STM32F091RCT6 STM32L053R8T6
Как вы знаете, эти платы совместимы с архитектурой Arduino. Теперь они также совместимы с программным обеспечением.
Как мы уже говорили в предыдущем посте, наша цель - предоставить общие интерфейсы, чтобы связать мир Arduino с миром STM32Cube.
Мы понимаем, что есть несколько способов реализации такого рода «клея». Но мы решили сделать что -то очень простое в использовании с Arduino IDE.
У нас есть несколько вопросов о том, как добавить больше досок из одной и той же серии MCU E.глин. STM32F1

Старое ядро ​​"Libmaple" поддерживало STM32F103CX, STM32F103RX. STM32F103VX и STM32F103ZX
Если вы хотите поддержать другую серию STM32, мы рекомендуем вам изменить библиотеку (Libstm32f1). Вы можете сгенерировать архив с помощью файла Make в build_gcc (требуются некоторые модификации). Если вам нужна дополнительная информация о том, как генерировать архив, мы можем вам помочь.
Пожалуйста, также проверьте систему/драйверы/CMSIS/Device/ST/STM32F1XX/Включите в список поддерживаемых плат.

Рик,
@Wi6labs Вы планируете внести какие -либо изменения в ядро ​​STM32F1? Только если в Arduino IDE есть ошибка для STM32F103RB.

Бренд

Wi6labs Team

Rogerclark
Вторник 20 сентября 2016 г. 8:20 утра
Спасибо @wi6labs

Rogerclark
Вторник 20 сентября 2016 г., 11:44
@wi6labs

Возможно, вы можете прочитать этот поток

ViewTopic.PHP?F = 48&t = 1407&начало = 40

Уже есть несколько вопросов о том, как мы можем добавить поддержку для плат серии F103VX и F103ZX.

Похоже, что код в libstm32f1 не обрабатывает порты GPIO, D E F или G, поэтому нам нужно будет обновить многоплементные файлы E.фон. Digital_io.C, чтобы добавить поддержку этих портов GPIO (то же самое относится и к MCU с большим количеством USARTS, а также у некоторых MCU F103 есть UART, а также USARTS.

Чтобы создать создание нового варианта, похоже, что нам, возможно, придется сделать полную копию Libstm32 F1 (в системной папке), но это не идеально, поскольку это приведет к дублированию многих функций, которые будут идентично во многих разных досках.

Таким образом, Alos выглядит так, как будто нам нужно разделить глобальные структуры инициализации из внутренних файлов, таких как Digital_io.c и, возможно, сделайте новый файл E.G Digital_IO_CONFIG.H, содержащий структуру глобальных определений.

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

Спасибо

Роджер

Сжимать
Вторник 20 сентября 2016 12:29
Нет никаких проблем внедрить GPIO для портов, которые нам нравятся, например, PA, PB, ПК, PD, PE, PF и т. Д.... в библиотеке.
Легко проверить, определяется ли определенный порт, так как HALMX определяет периферические основания, если периферийные. Как я вижу, некоторые IFDEF необходимы, если нам нужно сохранить те же исходные файлы для GPIO, UARTS и т. Д., По крайней мере, для проверки периферийного существования. Я знаю, что тебе не нравится Ифдеф, но другой способ иметь несколько версий библиотеки - худшее, что мы могли бы сделать.

Рик Кимбалл
Вторник 20 сентября 2016 г. 13:01
Вопрос о конфигурации стека для @wi6labs

В ядре STM32F1, можете ли вы объяснить, как используется стек? Если я посмотрю на файл линкера:
https: // github.com/stm32duino/arduino_c ... ПЕПЕЛ.Ld#L49

Переменная _estack установлена ​​на адрес в середине ОЗУ.
_estack = 0x20001fff;

Кроме того, это странный адрес, а не даже.

Почему эта переменная не установлена ​​на вершину ОЗУ (0x20005000) ?

-рик

Wi6labs
Ср 21 сентября 2016 г. 13:02
Рик,

Это ошибка. __ESTACK должен быть установлен на 0x20005000, последний адрес SRAM.
Мы сообщим об этом ST, который скоро натолкнет патч.

Спасибо, Рик.

Wi6labs Team

Рик Кимбалл
Ср 21 сентября 2016 г., 15:30
@Wi6labs

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

[Примечание:]
Я прочитал ваш предыдущий ответ и искал проверку, что это действительно ваше решение.

Вы, кажется, говорите, что для каждой платы нам нужно создать новую библиотеку? Похоже, что их атрибуты описаны как в каталоге вариантов, так и в библиотечном каталоге. Вы не можете просто переопределить аналоговый штифт с PWM, чтобы использовать другой штифт в варианте.Файл CPP, он также должен соответствовать информации в аналоге.C в каталоге библиотеки.
[/Примечание]

-рик

Wi6labs
Пт 23 сентября 2016 г., 11:54
Роджер / Рик,

Чтобы ответить на ваши вопросы, как добавить новую доску:

Во -первых, проект основан на досках Nucleo, поэтому в коде Core Code не реализована некоторая функция (в разделе System/Libstm32f1).
Итак, вам нужно добавить код в источниках (как вы уже сделали). Вы должны создать новую папку в варианте для каждой добавленной платы. И вы должны генерировать библиотеку для новой платы (в System/Libstm32f1/Bult_gcc есть файл Makefile/libstm32f1/build_gcc. Этот файл Makefil должен быть завершен с помощью вариантов новой доски.
Наконец, чтобы использовать доску с Arduino, вы должны заполнить доску.TXT с параметрами новой платы.
Вы, кажется, говорите, что для каждой платы нам нужно создать новую библиотеку? Похоже, что их атрибуты описаны как в каталоге вариантов, так и в библиотечном каталоге. Вы не можете просто переопределить аналоговый штифт с PWM, чтобы использовать другой штифт в варианте.Файл CPP, он также должен соответствовать информации в аналоге.C в каталоге библиотеки. Вы ограничены в PIN -функциях. Поэтому нам нужно определить также в аналоге.C Конфигурация PIN -кода. В варианте.CPP, вы просто сигнализируете о том, как можно использовать штифт.

Бренд
Wi6labs Team

Стивестронг
Пт 23 сентября 2016 г. 13:41
Что на самом деле означает «назначение PINS»? Это расписка соответствующей доски?
Так, например, если у меня есть две доски с одним и тем же чипом (скажем так: STM32F407VET6), мне действительно нужно сделать новую папку для каждого варианта платы?
Не было бы более эффективным для разделения вариантов чипов, а не вариантов платы?
Я имею в виду, что когда я использую GPIOS, я всегда использую стиль "pax", так что даже если плата отличается, я получаю одинаковую функциональность для одного и того же штифта, когда используется один и тот же чип.
Или я что -то упускаю?

Wi6labs
Пт 23 сентября 2016 г. 14:51
Стивестронг,

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

Wi6labs Team.

Рик Кимбалл
Пт 23 сентября 2016 г., 15:11
@Wi6labs

Что если я хотел бы добавить все булавки на досках Nucleo и использовать заголовок Morpho с сердечником Arduino Core. Что было бы лучшим способом сделать это?

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

-рик

Олли
Пт 23 сентября 2016 г. 15:39
Рик, я полностью с тобой согласен. Библиотека должна быть доступна для любого варианта. Большинство функций «платы» должны быть просто для картирования физических штифтов с элементами на доске, таких как внутренние компоненты или открытые выводы.

+++ Олли

Rogerclark
Пт 23 сентября 2016 г., 8:34 вечера
Ребята

У меня была пара электронных писем от STM и Wi6labs, и в основном кажется, что Wi6 было предложено только создать систему для обработки досок ядрев и, следовательно, не разработал очень гибкую архитектуру.

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

Я действительно хотел бы получить первый код Bluepill Pass в репо в эти выходные, поэтому я полагаю, что смогу просто действие PR Рика, но я все еще склонен взять полную копию Libstm32 и сделать Libstm32f103cx, чтобы Bluepill мог быть вариант этого, как мог Maple Mini

Рик Кимбалл
Пт 23 сентября 2016 г., 8:49 вечера
Rogerclark написал: ... Но я все еще склонен взять полную копию Libstm32 и сделать libstm32f103cx, чтобы Bluepill мог быть вариантом этого, как и Maple mini

Rogerclark
Пт 23 сентября 2016 г., 21:01
Спасибо, Рик

Даниэфф
Сб 24 сентября 2016 г., 4:35 утра
Wi6labs написал:Роджер,

ST разработала поддержку доски Nucleo для:
  • STM32F103RBT6 STM32F303RET6 STM32F429ZIT6 STM32L476RG STM32F091RCT6 STM32L053R8T6
Wi6labs Team

Rogerclark
Сб 24 сентября 2016 г. 5:45 утра
Даниэль

Единственный исходный код, выпущенный STM, был до сих пор, был для Nucleo F103RB и доски Nucleo L4

Насколько я понимаю, они выпустит исходный код для других досок, которые они перечислили, но это все, что они собираются сделать.
Не существует планов создавать «доски» (варианты) для плат серии обнаружений, не говоря уже о каких -либо общих платах или Maple Mini и т. Д.

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

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

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

Примечание. На самом деле, нам нужно также изменить код Nucleo F103RB, так как Рик уже нашел ошибку в файле линкера.
Но я ожидаю, что мы будем вносить изменения в минимум, чтобы они были только исправлением ошибок.

Rogerclark
Сб 24 сентября 2016 12:21
Видеть http: // www.STM32duino.com/viewtopic.PHP ... 227#P18227

Пито
Сб 24 сентября 2016 12:27
Я сомневаюсь, что STM заплатит один цент кому -то, чтобы поддержать доски, кроме Nucleos или Discovery..

Роджерл
Пн 26 сентября 2016 г., 15:56
Я был вне сети в течение последней недели, поэтому пропустил большую часть волнения. У меня есть пара вопросов:

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

В чем ситуация с библиотеками. Если бы я хотел использовать, скажем, существующие библиотеки Arduino Wire, MIDI и I2C, они могут работать без слишком много хлопот?

Извините, если это основные вопросы. Я собирался запустить новый проект на основе доски Mega 2560, но я обеспокоен тем, будет ли у меня достаточно программного пространства, поэтому я просматриваю свои варианты. Мой текущий опыт STM32 ограничен загрузкой программ мигания на досках F103.

Rogerclark
Пн 26 сентября 2016 г., 21:04
Я не думаю, что один человек мог попробовать нуклео L4, но я не могу вспомнить, кто.
(Но я мог ошибаться)

STM сказал, что они пришнут мне несколько досок для тестирования, но они, кажется, потерялись в должности :-(

Re: библиотеки

Я еще не думаю, что кто -то еще их тестировал, но ядро ​​поставляется со стандартными либерациями, такими как Wire и Spi.
Но никакой поддержки USB вообще.
В настоящее время я работаю над добавлением USB -сериала, но чтобы все USB -устройства работали хорошо, на самом деле требуется довольно серьезный пересмотр кода, созданного STMCubemx, так как нам нужно композитное USB -устройство, и я не думаю, что у куба есть возможность сгенерировать Пример подобного кода.

Я уверен, что мы могли бы получить отдельные USB -устройства, такие как MIDI и HID, работающие по одному, но это далеко не идеально

Сжимать
Пн 26 сентября 2016 г., 21:09
Я работаю с серией L4, но сейчас я не тестировал большую часть ядра, некоторые базовые ввод -вывода, простой сериал и некоторые устройства i2c.
L476 - это исключительный MCU (мой любимый MCU STM32), и вы можете проверить также ядро ​​Grumpyoldpizza от http: // www.STM32duino.com/viewtopic.PHP?F = 42&t = 1092
Он предназначен для пользовательской платы L476 (Dragonfly), он очень хорошо написан на вершине CMSIS (оптимизированный), с полными основными функциями (и более того), безусловно, очень хороший кусок кода.

Подробнее для Dragonfly (фотографии, схема, печатная плата) здесь: https: // www.Тинди.com/продукты/Onehors ... ent-board/

Олли
Пн 26 сентября 2016 11:35
Сжимать,

Каковы функции и функциональность в Dragonfly STM32L4, которые вам нравятся по сравнению с Teensy 3.2/3.5/3.6? Они находятся в том же ценовом диапазоне, но у Teensy больше ввода -вывода, более высокой производительности и отличных библиотек S/W.

Ура, Олли

Rogerclark
Вторник 27 сентября 2016 г. 12:54
Олли написал:
Каковы функции и функциональность в Dragonfly STM32L4, которые вам нравятся по сравнению с Teensy 3.2/3.5/3.6? Они находятся в том же ценовом диапазоне, но у Teensy больше ввода -вывода, более высокой производительности и отличных библиотек S/W.

Ура, Олли

Сжимать
Вторник 27 сентября 2016 г. 1:40
У меня нет Dragonfly или Teensy Board, просто L476-Nucleo, а L476-MCU по моему выбору для разработки на заказ. По этой причине я оцениваю код и аппаратное обеспечение, когда изучаю чип. Я думаю, что любой новый дизайн должен основываться на новых чипах STM32, таких как L475/6 или L431/2, поскольку они предлагают много и улучшенные периферийные устройства, большие воспоминания, хорошие производительность и очень хорошая ценность.

Rogerclark
Вторник 27 сентября 2016 г. 2:20 утра
Было бы хорошо, если бы BAITE или VCC-GND начали производить небольшую плату, используя эти устройства

Роджерл
Вторник 27 сентября 2016 г., 9:50 утра
Спасибо за комментарии, ребята.

Доска Dragonfly выглядит интересно, но цена на доставку доски, доставленную в Великобританию, составляет 45 британских фунтов (с возможными дополнительными таможенными сборами)-немного по сравнению с моим бюджетом для этого проекта. Я могу получить доску Nucleo STM32L476RG за 11 британских фунтов от Фарнелла, так что это лучший вариант для меня, если я смогу получить ее для вывода MIDI и поддержать ЖК -дисплей 1602 или другого небольшого дисплея.

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, мне не нужна MIDI над USB ---- Я просто планирую подключить штифт TX в 5-контактный Midi Jack.

Grumpyoldpizza
Вторник 27 сентября 2016 г., 16:23
Олли написал:Сжимать,

Каковы функции и функциональность в Dragonfly STM32L4, которые вам нравятся по сравнению с Teensy 3.2/3.5/3.6? Они находятся в том же ценовом диапазоне, но у Teensy больше ввода -вывода, более высокой производительности и отличных библиотек S/W.

Ура, Олли

Grumpyoldpizza
Вторник 27 сентября 2016 г., 16:34
Роджерл написал:Спасибо за комментарии, ребята.

Доска Dragonfly выглядит интересно, но цена на доставку доски, доставленную в Великобританию, составляет 45 британских фунтов (с возможными дополнительными таможенными сборами)-немного по сравнению с моим бюджетом для этого проекта. Я могу получить доску Nucleo STM32L476RG за 11 британских фунтов от Фарнелла, так что это лучший вариант для меня, если я смогу получить ее для вывода MIDI и поддержать ЖК -дисплей 1602 или другого небольшого дисплея.

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, мне не нужна MIDI над USB ---- Я просто планирую подключить штифт TX в 5-контактный Midi Jack.

Роджерл
Вторник 27 сентября 2016 г., 17:19
Grumpyoldpizza написал: Извините за цены. Возможно, мы сделаем более дешевую доску с L433 или тому подобным. Пожалуйста, имейте в виду, что доски Nucleo STM продаются ниже стоимости. Трудно конкурировать с этим.

Сжимать
Вторник 27 сентября 2016 г., 17:34
Кроме того....

Даниэфф
Ср 28 сентября 2016 г. 10:55 утра
Роджерл написал: В чем ситуация с библиотеками. Если бы я хотел использовать, скажем, существующие библиотеки Arduino Wire, MIDI и I2C, они могут работать без слишком много хлопот?

Rogerclark
Ср 28 сентября 2016 г., 11:20 утра
Даниэфф написал: ...
Будет ли определение, которое можно использовать для IFDEF в библиотеках, как уже есть IFDEF, используемые для ESP8266, Teensy...?

Grumpyoldpizza
Ср 28 сентября 2016 г. 15:38
Rogerclark написал:Даниэфф написал: ...
Будет ли определение, которое можно использовать для IFDEF в библиотеках, как уже есть IFDEF, используемые для ESP8266, Teensy...?

Rogerclark
Ср 28 сентября 2016 г., 21:49
Я использовал только подчеркивание, так как это был стандарт Arduino в то время (насколько я мог видеть).

Но, возможно, они избыточны

ZMEMW16
Чт 29 сентября 2016 г., 21:47
Я всегда думал, что они были из стандарта кодирования для определения аспектов «системы».
Подчеркивание помогает их уникальности, но я никогда не уверен, должен ли это быть один или два из них. : D

Стивен

Даниэфф
Пн, 3 октября 2016 г., 11:16
Код F1 использует HAL_GETTICK () для расчета Millis (), но L4 использует таймер TIM5 в часах.в. Почему это?

Rogerclark
Пн, 3 октября 2016 г., 8:17 вечера
Интересный

Интересно, правильные ли результаты теста на сухой камень, так как Show A 80 МГц L476 значительно медленнее, чем 72 МГц F103 (хотя тесты F103 Используют Libmaple и L4 Используют ядро ​​HAL на основе HAL))

Возможно, прерывание тратит впустую много обработки, или миллисы () не точны на ядро ​​L4

Wi6labs
Вт 04 октября 2016 г. 14:37
Даниэфф написал:Код F1 использует HAL_GETTICK () для расчета Millis (), но L4 использует таймер TIM5 в часах.в. Почему это?

Эдогальдо
Вторник 04 октября 2016 г., 16:02
Wi6labs написал:ST разработала поддержку доски Nucleo для:
  • STM32F103RBT6 STM32F303RET6 STM32F429ZIT6 STM32L476RG STM32F091RCT6 STM32L053R8T6

Wi6labs
Ср. 05 октября 2016 г. 13:31
Эдогальдо написал:Wi6labs написал:ST разработала поддержку доски Nucleo для:
  • STM32F103RBT6 STM32F303RET6 STM32F429ZIT6 STM32L476RG STM32F091RCT6 STM32L053R8T6

Rogerclark
Ср. 05 октября 2016 г., 8:00 вечера
Я думаю, что на основе рук arduino e.глин. Очитание, используйте Systick для миллитов ()

Так что, возможно, это норма для ядер Arduino. (Libmaple также использует Systick для Millis ())

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

Интересно, что еще использует Systick на ядре L4, если он не считает Millis ()

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

Сжимать
Ср. 05 октября 2016 г., 21:16
Специально для API ARDUINO, я не нахожу причину не использовать Systick. Миллисекундный таймер Ардуино-всегда на таймер с фиксированным периодом.
Systick не доступен во всех ядрах ARM, но у всех членов семьи STM32 есть Systick, поэтому не проблема использовать его во всем мире.

Rogerclark
Ср. 05 октября 2016 г. 11:08
@slammer

Есть ли у коры M0 это ?

Я знаю, что NRF51822 Cortex M0 не имеет Systick, но это, вероятно, связано с оборудованием NRF51, а не то, что это кора M0

Сжимать
Ср. 05 октября 2016 г., 11:42
Systick является дополнительной частью дизайна коры, но я думаю, что все STM32 даже самые маленькие члены F0x0, у них есть это.

Grumpyoldpizza
Чт, 6 октября 2016 г. 12:13
Rogerclark написал:@slammer

Есть ли у коры M0 это ?

Я знаю, что NRF51822 Cortex M0 не имеет Systick, но это, вероятно, связано с оборудованием NRF51, а не то, что это кора M0

Rogerclark
Чт 06 октября 2016 г., 20:28
Интересный момент о мощности запустить таймер.

Это значительное количество тока для устройства с низкой питанием.

Я не думаю, что есть какая -то момент, изменяя это для ядра L4, но на других досках, если WI6 решит использовать таймер для Миллиса, я думаю, что мы, вероятно, в конечном итоге изменим его обратно на использование Systick

Mailhouse
Сб 05 ноября 2016 г. 12:50 утра
Если это разбило доску? Nucleo-64 STM32F103RB и STM32L476RG показывают одно и то же поведение void TIM2_IRQHandler(void) { if (TIM2->SR & TIM_SR_UIF) { Serial.println("TIM2 Interrupt"); } TIM2->SR = 0; // reset the status register } void setup() { // put your setup code here, to run once: Serial.begin(9600); delay(3000); // open your serial console already RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // enable TIM2 clock TIM2->PSC = 36000; // clock speed should be 72MHz, so 72MHz/36000 = 2KHz TIM2->ARR = 2000; // 2KHz clock/2000 = 1Hz so interrupt handler should run once a second TIM2->DIER |= TIM_DIER_UIE; // enable update interrupt NVIC_EnableIRQ(TIM2_IRQn); Serial.println("Interrupt set"); TIM2->CR1 |= TIM_CR1_CEN; // counter enabled Serial.println("Timer 2 enabled"); } void loop() { // put your main code here, to run repeatedly: Serial.println(TIM2->CNT); delay(50); }

Даниэфф
Чт 24 ноября 2016 г., 11:46
@Wi6labs, в чем причина uint32_t apin = ulPin&0x0000000F;

Rogerclark
Чт 24 ноября 2016 г., 8:33 вечера
звучит как несколько проблем.

1. Сбой при использовании таймеров.

2. Ограничение аналоговых контактов на низкие номера выводов

3. Hal_delay не работает правильно на L4

Re: 2

Я думаю, это было введено для досок нуклео. Но я не уверен, какую цель он выполняет, я.E он превращает PIN 16 в PIN 0 и т. Д

Я не уверен, что происходит на доске AVR Arduino, если вы делаете аналог на PIN 16

Nikosx
Вторник 09 мая 2017 г. 6:19
Привет.
Я использую STM32F1XX Cores 2017.1.20 с STM32 VL Discovery STM32F100RB. Проблемы с использованием интегрированных каналов DAC.
Я использовал оба dac_write_value & Analogwrite, но без результатов (код застрял или ничего не делает), даже когда я внес некоторые изменения в g_current_init_id аналога.в

Однако функции ADC работают нормально !!!

Думайте, код DAC неполный. Какая ситуация ?

Спасибо,
Ник

Эдогальдо
Вторник 09 мая 2017 г. 7:04
Вы уверены, что STM32F100RB имеет DAC?!
AFAIK только HD MCU (с XC ON) имеют DAC..

Nikosx
Вторник 09 мая 2017 г. 13:44
ДА !! Он имеет 2 выхода ЦАП (двойной ЦАП). Это оба в руководстве платы STM32VLdovery. Рис. 6, Блок -схема. 12 -битный DACS, Таблица 4PINOUT, PA4 DAC1, PA5 DAC2, также та же информация в STM32F100XX ref. руководство....
Также есть код внутри аналога.в .....

Nikosx
Вторник 09 мая 2017 г. 13:46
Извините, не понимал HD MCU .....

Эдогальдо
Вторник 09 мая 2017 г., 19:13
Nikosx написал:Извините, не понимал HD MCU .....

AG123
Вторник 09 мая 2017 г., 19:41
STM32F103RБеременныйT6 (Мплотность эдия) всего на 1 точку ниже, чем STM32F103RВT6 (ЧАСинициатор Дюймовыйрасти
http: // www.ул.com/en/microcontrollers/s ... tid = ln1565
И версия высокой плотности имеет ЦАП, у меня была плата STM32F103RBT6 https: // www.Олимекс.com/products/duino/s ... INO-STM32/ Кроме того, нет DAC, единственная хорошая вещь - это больше из штифтов GPIO, а AFIO разбиты, поэтому все больше функций доступны по сравнению с SAD STM32F103C8T6 или STM32F103CBT6 (Blue Pill / Maple Mini)

Nikosx
Вторник 09 мая 2017 г. 9:48 вечера
οκ!

Nikosx
Сб 16 сентября 2017 г. 20:42
Привет.

Получил новый Nucleo 64 с STM32F103RB (кроме L476) и попытка перенести программу из чипа M4 Ti Arm - тот же Arduino Framework.... Часть кода с использованием серийного для GPRS Interfacing работает ОК. Однако я пытаюсь найти использование таймера и либерации (а не HAL), чтобы помочь с этим, как сравнивается с другой чипом ARM, использование таймеров низкое использование гораздо сложнее...

Любая помощь с этим ?

Спасибо

Nikosx
Пн, 6 ноября 2017 г. 16:56
Есть ли какое -либо (общее или конкретное) руководство или код для использования прерываний таймера с помощью ядра STM, в одном или периодическом режиме ?
Спасибо !

Chismicro
Пн, 6 ноября 2017 г., 8:11 вечера
Я не знаю, потому что я использовал таймер только в рамке STM32GENERIERENERIEN:

https: // github.com/chrismicro/stm32gene ... Новая.Ино

fpistm
Вторник 07 ноября 2017 г. 8:39 утра
В настоящее время нет API.
Планируется расширить API Timer.
В любом случае, как показывает @ChriSmicro в своем примере, вы можете использовать непосредственно HAL, чтобы использовать таймер.

Nikosx
Вторник 07 ноября 2017 г. 9:15 утра
Большое спасибо !! Спасибо Chismicro за код. Я попробую.... Это нормально, используя Хэл, как это работает...
Я использовал HAL раньше, но у меня были проблемы с компиляцией с функцией обратного вызова...

Выключить код....

Ник

Nikosx
Вторник 07 ноября 2017 г. 9:51 утра
К сожалению, он не компилируется и дает ошибку

(Arduino IDE)
таймер.c :(.текст.Tim3_irqhandler+0x0): множественное определение `tim3_irqhandler '

Sketch \ sketch_nov07a.Ино.CPP.o: Sketch_nov07a.Ино.CPP :(.текст.Tim3_irqhandler+0x0): сначала определено здесь

или против Ардуино
Timer1f030.INO: 25: 17: Ошибка: Конфликтное объявление «void TIM3_IRQHandler ()» со сцеплением 'c'
Timer1f030.INO: предыдущее объявление с помощью "C ++"

Работа выполняется в ядрах F030RB с ядром STM.... Я думаю, что у вас код не с STM Core....

Насколько я помню.... Впервые я попытался использовать HAL для таймеров...

Nikosx
Вторник 07 ноября 2017 г. 9:55 утра
Моя проблема в том, как ссылаться на ручку прерывания таймера и не получить ошибку..... В прошлом мне удавалось настроить таймер для подсчета (с HAL), но я не мог иметь доступ к ручке таймера, чтобы выполнить какую -то полезную задачу....

Nikosx
Вторник 07 ноября 2017 г. 9:57 утра
@fpistm: Какой правильный способ ссылаться на Tim3_irqhandler в коде и не получить ошибку ?

fpistm
Вт, 07 ноября 2017 г., 10:46 утра
Гул, в настоящее время нет, как это определено в таймере.C ядра.

В качестве обходного пути вы можете прокомментировать этот в основе:
https: // github.com/stm32duino/arduino_c ... эр.C#L1077

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

Nikosx
Вторник 07 ноября 2017 г. 12:09
еще раз спасибо !!!

должно быть что -то, иначе, почему компилятор жалуется ??? :)

Я попробую...

Nikosx
Вторник 07 ноября 2017 г. 12:20
строка 1077, таймер.C:


void tim3_irqhandler (void)
{
if (timer_handles [2] != Null) {
Hal_tim_irqhandler (timer_handles [2]);
}
}

Nikosx
Вторник 07 ноября 2017 г. 12:27
Нашел 2 раз.C, поместите код в комментарий, та же ошибка....

где должен быть этот файл ?

fpistm
Вторник 07 ноября 2017 г. 15:41
Не могли бы вы предоставить эскиз, который вы использовали.
На самом деле ошибка состоит в том, что TIM3_IRQHandler (void) уже определен в ядре.
Поскольку это слабый, вы сможете прокомментировать это.

Nikosx
Вторник 07 ноября 2017 г. 16:16
Хорошо.... Не компилируется для VS 10 + VS Arduino, но он скомпилировался и работал OK для Arduino IDE...
это также работало хорошо
Код ниже

// для Arduino для компиляции
// таймер.в
// c: \ users \ nick \ appdata \ local \ arduino15 \ packages \ stm32 \ hardware \ stm32 \ 2017.8.31 \ cores \ arduino \ stm32
// Похвалите TIM3_IRQHandler


static tim_handletypedef s_timerinstance =
{
.Экземпляр = TIM3
};


Extern "C" void TIM3_IRQHandler (void)
{
Статический логический флаг = false;
static int32_t index = 0;

if (__hal_tim_get_flag (&s_timerinstance, tim_it_update) != Сбросить)
{
__Hal_tim_clear_it (&s_timerinstance, tim_it_update);
if (flag)
{
DigitalWrite (LED_BUILTIN, HIGH);
flag = 0;
}
еще
{
DigitalWrite (LED_BUILTIN, LOW);
флаг = 1;
}
}
}

void setup ()
{
pinmode (led_builtin, output);

Hal_nvic_setpriority (tim3_irqn, 0, 0);
Hal_nvic_enableirq (Tim3_irqn);

s_timerinstance.Инициатор.Прескалер = 48000; // APB1 TIM3 имеет 48 МГц

s_timerinstance.Инициатор.Countmode = TIM_COUNTERMODE_UP;
s_timerinstance.Инициатор.Период = 100-1; // Прескалер дает базу времени 2 кГц
s_timerinstance.Инициатор.ClockDivision = TIM_CLOCKDIVISION_DIV1;
s_timerinstance.Инициатор.RepetitionCounter = 0;

__Hal_rcc_tim3_clk_enable ();

Hal_tim_base_init ( &s_timerinstance);
Hal_tim_base_start_it ( &s_timerinstance);
}

void loop ()
{

}

Nikosx
Вторник 07 ноября 2017 г. 16:19
Это стало очень близко к коду, который я пробовал раньше в VS Arduino, и получил такую ​​же ошибку, что и сегодня

Testf030.INO: 31: 17: Ошибка: Конфликтное объявление «void TIM3_IRQHandler ()» со сцеплением 'c'
Testf030.INO: предыдущее объявление с помощью "C ++"
Ошибка компиляции

Вещи VS намного лучше / быстрее, чем Arduino IDE, и (кроме этой проблемы таймера) работает нормально с досками ST Nucleo....
все еще не мог найти файл, который используется для изменения, как это было с Arduino....

Nikosx
Вторник 07 ноября 2017 г. 18:59
Единственный способ компилировать в VS - это сделать

Extern "C ++" void TIM3_IRQHandler (void)

Но в этом случае код не работает !!!!!

Рик Кимбалл
Вторник 07 ноября 2017 г. 19:08
Было бы неплохо, если бы вы разделили этот разговор на новую ветку Nikosx. Ваши проблемы имеют мало общего с ядром STM, и все это связано с вашим выбором инструментов разработки, а также недопонимание имени C VS C ++ Compling and Scileding.

Nikosx
Вторник 07 ноября 2017 г., 21:14
Привет, Рик.

Да, я не опытный программист C ++....

Я поставил сюда проблему с тех пор, как использую ядро ​​STM, а не какую -то другую структуру, которая обрабатывает таймеры по -другому....

Насколько я вижу, STM Core еще не имеет API для использования таймера, но имеет внутренние определения, которые создают проблемы, даже используя HAL для Timer & прерывания... Мне кажется, что проблема не так легко решить...

Я не знаю где -то еще, чтобы выразить это, так как это относится только к ядру STM.... У тебя есть что -то в виду ?

Рик Кимбалл
Вторник 07 ноября 2017 г., 21:22
[Nikosx - Вторник 07 ноября 2017 г. 9:14 вечера] - Я не знаю где -то еще, чтобы выразить это, так как это относится только к ядру STM.... У тебя есть что -то в виду ?
Да, запустите еще одну ветку в этом подразделе форума и загомит: «Проблемы с использованием ядра STM с Visual Studio 10»

В ту минуту, когда вы упомянули это: Nikosx написал:Хорошо.... Не компилируется для VS 10 + VS Arduino, но он скомпилировался и работал OK для Arduino IDE...
это также работало хорошо

fpistm
Чт, 09 ноября 2017 г. 10:26 утра
Рик прав. Это должно быть в выделенной теме.

В любом случае, я проверил ваш эскиз.
Итак, первая проблема - многочисленное определение TIM3_IRQHandler.

Я думаю, что лучшее исправление - определить его как слабый.
Я протестировал, и это нормально.

Extern "C" обязателен, чтобы избежать каких -либо названий функции C ++.

Nikosx
Чт, 09 ноября 2017 г., 16:37
Привет.

а) Как вы думаете, где тема будет ?

б) Я знаю, что внешняя "c" - это мандатота, но куда должна быть поставлена ​​неделя ?

Спасибо