Armduino - общая реализация Arduino на чипах Arm Cortex -M

Дэнниф
Сб 27 мая 2017 г. 13:19
Все:

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

Только недавно мой друг заставил меня задуматься о портировании Arduino в некоторые чипы Pic24F/DSPIC, и я начал использовать тот же подход к Порт -Ардуино на чипсах STM8S.

Как только это будет сделано, я поднял его на более модульный уровень и получил код, работающий на общем чипе Cortex -M - в данном случае, чип STM32F100 на плате STM32VldScovery. В противном случае код также должен работать для чипов STM32F10X.

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

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

До сих пор я работал на STM32F100/103, MSP432 и LM4F120. Детали / код доступны здесь: https: // dannyelectronics.WordPress.ком/ ... x-m-chips/

это не завершено, поэтому следите за обновлениями -> Код сейчас в V0.11, против. V0.10 Опубликовано, например.

Ваши комментарии высоко ценится.

Chismicro
Сб 27 мая 2017 г. 15:25
Привет, Дэнни,

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

STM также начал поддерживать больше MCU:
ViewTopic.PHP?F = 48&t = 2098

Рик Кимбалл
Сб 27 мая 2017 г. 16:23
Вы можете перенести свой пост в раздел «Ядра», чтобы его увидели больше людей:

http: // www.STM32duino.com/viewforum.PHP?F = 42

Рик Кимбалл
Сб 27 мая 2017 г. 16:28
Я вижу, у вас есть порт PIC24F, как вы собираетесь иметь дело с библиотеками C ++? Разве эти компиляторы 'C' C 'или они добавили C++?

Rogerclark
Сб 27 мая 2017 г. 9:10 вечера
КСТАТИ.

Несколько других людей и уже используют имя Armduino

https: // www.Google.компонент.Au/Search?Q = ARMDUINO

Я не думаю, что это торговая марка, но это довольно запутанно, если вы ищете этот термин

Пса. Я также переместил его в ядра

Ппс.

Помимо ядра @Danieleff's STMGeneric и собственных ядер STMS, есть Koduino, который также является ядром Arduino для STM32F3 и STM32F4, а также наша старая верная либмапл, а также несколько заброшенных ядер, таких как ядро ​​MakerLabme

Однако вы, по -видимому, является единственным ядром, которое охватывает разные производители, кроме, конечно, mbed
Но MBED не Arduino, это просто аналогичная парадигма Dev

Кенджуцу
Солнце 28 мая 2017 г. 13:50
Дэнниф написал:... Я начал использовать тот же подход к порту Arduino на чипсах STM8S.

Дэнниф
Солнце 28 мая 2017 г. 15:11
Крис: не знал проекта STM32Generic. Спасибо. там много сходства:

1. Наши подходы к GPIO идентичны.
2. Проект STM32GENERIERC изолировал специфичные для устройства вещи в отдельные файлы.

Мы отличаемся тем, что его цель состоит в том, чтобы создать общий шаблон для STM32, и моя цель - создать общий шаблон для всех ChPI ARM, но не писать самостоятельно, специфичные для устройства вещи.

Но два проекта вполне расширяются в сферы друг друга.

Рик: Я беру С-подход к портированию, чтобы все функции CPP должны быть воспроизведены в C, иногда с немного разными именами. Как случайный (мин, максимум) получает максимум до random2 (min, max), так как случайный (макс) уже существует.

Кен: Проект STM8S связан на странице Armduino, но вы можете нажать его здесь: https: // dannyelectronics.WordPress.ком/ ... tm8s-mcus/

Я только что перенести функции AnalogWrite () и Analogread (), но еще не имел времени обновлять код. сделаю это позже.

Рик Кимбалл
Солнце 28 мая 2017 г. 15:44
Дэнниф написал:Рик: Я беру С-подход к портированию, чтобы все функции CPP должны быть воспроизведены в C, иногда с немного разными именами. Как случайный (мин, максимум) получает максимум до random2 (min, max), так как случайный (макс) уже существует.

Rogerclark
Солнце 28 мая 2017 г. 9:51 вечера
Рик Кимбалл написал:....

К сожалению, проблема с таким подходом в том, что вы упускаете все богатые библиотеки, которые люди написали для платформы Arduino. Я думаю, что маловероятно, что люди будут портировать библиотеки C ++ в C, чтобы работать с вашим ядром. Сторонние библиотеки - это то, почему люди смирились с неэффективной платформой Arduino в первую очередь. По крайней мере, так я это вижу.

Дэнниф
Пн 29 мая 2017 г. 13:32
"К сожалению, проблема с этим подходом в том, что"

К сожалению, правда: если компилятор не поддерживает полицейского, этого невозможно.

Но если вы отступите назад, и ситуация может быть немного другой, так как у вас есть два варианта здесь:

1. Не поддерживайте Arduino, так как компилятор не поддерживает весь код Arduino. Или

2. Поддержите хотя бы какой -то код Arduino (кодируемые в C).

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

Недостатком этого подхода, особенно для толпы Arduino, является то, что они могут посчитать слишком сложным, чтобы получить попытку.

Но тогда вы ничем не отличаетесь, если вы подходили 1 подход 1.

Так что подход 2 дает вам немного потенциала, но нет недостатка.

Рик Кимбалл
Пн 29 мая 2017 г. 13:42
Я провел некоторое время, пробуя чипсы PIC24F, когда я начинал с MCUS около 7 лет назад. Я бы провел больше времени с серией Pic24, если бы у него был компилятор C ++. Я мог бы даже потратить больше времени, если бы бесплатный компилятор «C» не был нанесен ущерб тем, как он отключил функции оптимизации более высокого уровня. Этот подход к программному обеспечению казался довольно отсталым мышлением. Зачем наказывать людей, которые хотят использовать ваш чип? Когда я заметил, что ваша публикация здесь я подумал, хм, может быть, они пришли, так как купили Atmel. Теперь я вижу, что ничего не изменилось. Жаль, что я надеялся, что в конце концов они увидят свет.

Дэнниф
Вторник 30 мая 2017 г. 11:05
Вся семейство PIC24F - моя любимая, потому что его векторы прерывания, замечательные булавки и периферическая консистенция. Они предлагают отличную скорость для численных расчетов. И C30, и XC16 генерируют код хорошего качества. Это мой чип goto для microchip.

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

Для меня важно то, что продавец предлагает качественные продукты и услуги. На этом фронте Microchip делает хорошую работу здесь. Я надеюсь, что они смогут больше инвестировать в маркетинг PIC24F, однако.

Дэнниф
Ср 31 мая 2017 г., 22:16
Потратил больше времени на это и реализовано Analogread (), Analogwrite () и dacnwrite ().

Analogwrite () предлагает до 16 бит разрешения и доступен на 16 отдельных разъемах.

Dacnwrite () использует 12 -битные каналы DAC для получения аналогового выхода.

Далее - Exti и Serial Comms.

Даниэфф
Чт, 01 июня 2017 г. 3:56 утра
Вы серьезно публикуете свой код на страницах WordPress? И где эта реализация анализа/записи?

Кенджуцу
Чт, 01 июня 2017 г., 6:43
Я начал играть с вашим проектом STM8S, и мне было интересно, будете ли вы его обновлять, и если вы рассмотрите возможность размещения его на GitHub? ;)

Дэнниф
Чт, 01 июня 2017 г. 10:18 утра
Если вы также обновите это, да. Мой код не v0.11a, добавленное pulsein (), tone ()/notone (), analogwrite (), analogread (), attrintrupt () и detachinterrupt () - уродливая реализация, и я думаю о том, чтобы вскоре его обновить.

Я хотел доставить его в критическое состояние, а затем выпустить, но могу опубликовать промежуточную версию, если хотите попробовать.
Если вы подумаете о размещении его на GitHub? не знаю об этом. не хочу создавать учетную запись, когда мне не нужно, :)

Кенджуцу
Вт 13 июня 2017 г. 9:31
Что касается STM8, вы видели этот проект: https: // tenbaht.GitHub.io/sduino?

Rogerclark
Вт 13 июня 2017 г. 9:42
Кенджуцу писал:Что касается STM8, вы видели этот проект: https: // tenbaht.GitHub.io/sduino?

Дэнниф
Ср 14 июня 2017 г., 17:54
Кенджуцу писал:Что касается STM8, вы видели этот проект: https: // tenbaht.GitHub.io/sduino?

Дэнниф
Ср 14 июня 2017 г., 17:58
STM8 действительно недооценивает. Я надеюсь, что все порты, надеюсь, примут в это больше людей, учитывая, где семья AVR.

Кенджуцу
Чт 15 июня 2017 г., 7:55 утра
Дэнниф написал:Мой легче настроить и начать, однако.

Zoomx
Чт 15 июня 2017 г. 14:35
Поскольку у меня есть две из этих дешевых досок STM8....
Я смотрю этот проект на GitHub и в блоге.
Надеюсь найти время, чтобы протестировать это в ближайшее время.

Кенджуцу
Пт 16 июня 2017 г. 14:00
Любые планы по созданию STM8SDUINO Скомпилируйте с помощью SDCC? Стандартная периферийная библиотека STM8S переносит в SDCC для нескольких целей STM8 уже сделан. Поскольку я использую MacOS, было бы неплохо использовать нативный порт SDCC для игры с STM8SDUINO ;) ;)

Дэнниф
Пт 16 июня 2017 г. 8:05 вечера
Кенджуцу, в настоящее время не существует плана переносить его в другие компиляторы.

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

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

Портирование в космическое должно быть довольно простым - в основном вокруг деклараций IST.

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

В то же время я сделаю код работать на Cosmic.

РЕДАКТИРОВАТЬ: Существующая база кода STM8Sduino фактически была написана, чтобы разрешить компиляцию под компиляторами Cosmic и выражения, но я прокомментировал кроссплатформенные вещи. Таким образом, теперь я переоценил поддержку для этих двух компиляторов, и код теперь должен компилироваться во всех трех компиляторах, IAR, Cosmic и Sacisonance.

Я также быстро рассмотрел руководство по компилятору SDCC, и единственная разница, которую я видел, была объявление прерываний. Макро Enterrupt_handler может быть написан довольно легко, чтобы на карту обратно в стиль SDCC - ST показал, как это сделать в конце STM8S.час.

РЕДАКТИРОВАТЬ 2: Я загрузил пересмотренные файлы, чтобы обеспечить поддержку Cosmic (протестированная) и выражение. Помимо обработки прерываний, Cosmic не поддерживает «inline» - довольно легко иметь дело с. Соберите однако собранные для сортировки - не протестировано.

Rogerclark
Пт 16 июня 2017 г., 21:43
Я не уверен, что потрудился создать STM8 в предпочтении плате STM32F103.

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

эн.глин. У меня есть несколько светодиодных панелей Mount Mount Meters, которые используют STM8, и я недавно разобрал USB -напряжение и ток -ключ отдельно, и он также содержит STM8.

Учитывая, что STM буквально продали миллиарды MCU STM8, я уверен, что использование инструментов STM8 Arduino будет очень полезно для хакеров устройств

Zoomx
SAT 17 июня 2017 г. 10:12
Дэнниф написал: РЕДАКТИРОВАТЬ: Существующая база кода STM8Sduino фактически была написана, чтобы разрешить компиляцию под компиляторами Cosmic и выражения, но я прокомментировал кроссплатформенные вещи. Таким образом, теперь я переоценил поддержку для этих двух компиляторов, и код теперь должен компилироваться во всех трех компиляторах, IAR, Cosmic и Sacisonance.

Rogerclark
Сб 17 июня 2017 г. 10:52 утра
Мне пришлось заказать другие вещи на eBay, поэтому я заказал 2 x stm8 доски, так как они дешевые

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

Кенджуцу
Сб 17 июня 2017 г. 13:03
Zoomx написал: Тестирование с SDCC, я получаю In file included from stm8sduino.h:56, from example.c:1: stm8s.h:90:3: error: #error "Unsupported Compiler!" stm8s.h:2735:25: fatal error: intrinsics.h: No such file or directory compilation terminated.

Кенджуцу
Сб 17 июня 2017 г. 13:05
Rogerclark написал:Но я заметил, что многие дешевые устройства используют STM8, поэтому иметь способ перепрофилировать эти устройства было бы хорошим.

Дэнниф
Сб 17 июня 2017 г. 13:14
Внутренние поступают из STM8s.H И вы можете прокомментировать это - я не помню, чтобы использовал что -то там, в частности. Может быть, шваба?

Жалобы вокруг строки 590 на TMP связаны с тем, что она была объявлена ​​в середине этой функции. С тех пор я перенес его в начало функции.

Исправлена ​​это и посмотрите, что еще может появиться.

Жалобы на недоступную проблему в бесконечную петлю.

Не уверен насчет Эвелин и собака.

Дэнниф
Сб 17 июня 2017 г. 13:19
Эти 4 -цифровые вильты используют RX и TX -контакты, позволяющие тогда быть в цепью Daise в цепье в виде 4 -цифрового автономного или 8 -цифрового или 12 -значного дисплея.

Кенджуцу
Сб 17 июня 2017 г. 13:46
Дэнниф написал:Жалобы вокруг строки 590 на TMP связаны с тем, что она была объявлена ​​в середине этой функции. С тех пор я перенес его в начало функции.

Исправлена ​​это и посмотрите, что еще может появиться.

Дэнниф
SAT 17 июня 2017 г. 16:50
Я не могу найти ничего интересного в строке 249/250, или 899 и 935. Может быть, вы можете скопировать эти строки, +/- 5 строк?

Опять же, эти упоминания о Эвелин / собаке ничего не значат для меня. Выглядит очень специфичным для SDCC.

Rogerclark
Сб 17 июня 2017 г., 21:22
Кенджуцу писал:Rogerclark написал:Но я заметил, что многие дешевые устройства используют STM8, поэтому иметь способ перепрофилировать эти устройства было бы хорошим.

Кенджуцу
Солнце 18 июня 2017 г. 15:12
[Дэнниф - SAT 17 июня 2017 г. 16:50] - Я не могу найти ничего интересного в строке 249/250, или 899 и 935. Может быть, вы можете скопировать эти строки, +/- 5 строк?

Опять же, эти упоминания о Эвелин / собаке ничего не значат для меня. Выглядит очень специфичным для SDCC.
Я избавился от сообщений "Эвелин / собака", удалив в соответствии от
  • void pinmode (pin_typedef pin, режим uint8_t)
  • void DigitalWrite (PIN_TYPEDEF PIN, UINT8_T VAL)
  • Int DigitalRead (PIN_TYPEDEF PIN)
«Предупреждение 116: влево сдвигает больше, чем размер объекта, измененный на ноль» и «Ошибка 9: Сообщения о фатальной компиляторе» находятся в void mcu_init (void) На следующих строках: TIM1->ARRL = (PWM_PR); //top at 0x0fff

Дэнниф
Солнце 18 июня 2017 г., 17:27
Первые два в порядке. Они бросают лабораторию 16 -битного типа в ARRL. Если хотите, вы можете вручную разыграть PWM PR на UINT8.

Я посмотрю на прерывания. Он отображается в EI, и я увижу, как прерывания включены или отключены в SDCC.

Дэнниф
Солнце 18 июня 2017 г. 9:37 вечера
Я посмотрел на руководство по SDCC. Проблема с прерыванием ()-это использование IAR-специфического вызова.

Вы можете воссоздать это с помощью инструкций по сборке "rim" и "sim".

Чтобы сделать его более плавным, вы можете изменить STM8s.H Файл, особенно в начале, где он жалуется на неподдерживаемый компилятор - просто вставьте еще один #ELIF для SDCC, и вы готовы к работе.

Кенджуцу
Чт 22 июня 2017 г. 13:30
[Дэнниф - Солнце 18 июня 2017 г. 9:37 вечера] - Я посмотрел на руководство по SDCC. Проблема с прерыванием ()-это использование IAR-специфического вызова.

Вы можете воссоздать это с помощью инструкций по сборке "rim" и "sim".

Чтобы сделать его более плавным, вы можете изменить STM8s.H Файл, особенно в начале, где он жалуется на неподдерживаемый компилятор - просто вставьте еще один #ELIF для SDCC, и вы готовы к работе.
Я использую STM8S.час от Стандартная периферийная библиотека STM8S переносит в SDCC для нескольких целей STM8 которые содержат необходимые #idefs Для SDCC, включая то, что необходимо для прерываний, но все же «Ошибка 9: Фатальный компилятор внутренняя ошибка» находится в void mcu_init (void). У меня есть чувство, что SDCC не доволен чем -то другим в этой функции, а не в этой конкретной линии :(

Обновлять:
Я поместил простой для петля после линии SDCC жалуется, и теперь прерывания () больше не генерирует ошибку, но для петля после этого... Придется копать глубже

Дэнниф
Пт 23 июня 2017 г. 9:42
Для максимальной совместимости я отобрал прерывания () -> EI () -> Enable urterrupts (), который затем отображается на __asm ​​() __ с помощью ваших STM8s.H Файл. Так что это должно работать.
Но для петли после этого. Это предполагает, что проблема связана с предыдущими заявлениями - вы можете подтвердить это, комментируя прерывание () в mcu_init ().

Как выглядят ваши макросы use_xxx?

Дэнниф
Солнце 25 июня 2017 г. 22:43
[Дэнниф - Сб 17 июня 2017 г. 13:19] - Эти 4 -цифровые вильт -счетчики используют RX и TX -контакты.
Я заказал пару этих подразделений с eBay, чтобы проверить эту концепцию. В ожидании их, я написал простой кусок кода на PIC16F193X (@16 МГц). До сих пор он хорошо жил на симуляторе-я вместе с ними с марионированием, чтобы сформировать 8-значный дисплей. Код доступен от GitHub.

Я ожидаю, что минимальные изменения в ретаргезии кода для STM8.

Дэнниф
Пн 26 июня 2017 г. 12:14
теперь прерывания () больше не генерирует ошибку Я установил SDCC и использовал его для компиляции STM8Sduino.в. не получил никакой ошибки, особенно критической ошибки, которую вы получили. Всего три предупреждения.

Я использовал последнюю SDCC для Windows. 3.6.0 я думаю.

Кенджуцу
Пн 26 июня 2017 г. 12:57
Спасибо за отзыв.

Вот что я использую: Я использую твою простую мигание.в пример:
#include "stm8sduino.h" //include stm8suduino defs #define LED PB5 //LED attached to pin 13 (=PB5 on STM8Sblue) #define LED_DLY 500 //waste some time, in ms //user setup void setup(void) { pinMode(LED, OUTPUT); //set LED as output } //user loop void loop(void) { digitalWrite(LED, !digitalRead(LED)); //flip LED delay(LED_DLY); //waste some time }

Дэнниф
Пн 26 июня 2017 г. 14:48
PB4 и PB5 являются булавками OD и неспособны искать ток. Вы можете либо погрузить ток на этих булавках, либо перейти к другой булавке.

Кенджуцу
Вт 27 июня 2017 г. 7:41
[Дэнниф - Пн 26 июня 2017 г. 14:48] - PB4 и PB5 являются булавками OD и неспособны искать ток. Вы можете либо погрузить ток на этих булавках, либо перейти к другой булавке.
Используя ваш первоначальный выпуск (версия: v0.10) и IAR EMSTM8, все компилируется, и светодиод на PB5 мигает. Однако с последним релизом и IAR EMSTM8, светодиод на PB5 не мигает. Я подключу светодиод к другой булавке и попробую еще раз ;)

Дэнниф
Пт, 07 июля 2017 г., 10:59
Я только начал переносить Armduino в STM32F0XX - Тестирование на STM32F030F сейчас. Пока что дженерики и GPIO работают и заполнят остальное позже. Код здесь: https: // github.com/dannyf00/armduino/tr ... ER/STM32F0

Ваши комментарии / отзывы.

РЕДАКТИРОВАТЬ: Я добавил Analogread (), AttachTerrupruprrupts (), DetacherTruprrupts () и связанные с UART. ШИМ подходит дальше.

Chismicro
Пт, 07 июля 2017 г. 13:18
Это очень короткая структура.
Вероятно, таймер интервалов был бы хорошей идеей. С таким количеством периферийных устройств может быть реализовано в программном обеспечении (до тех пор, пока нет аппаратного драйвера).

Даниэффер сделал это Здесь с ШИМ, ТОНА, АНАЛОГОЗИРОВАНИЕ

Дэнниф
Пт, 07 июля 2017 г. 14:28
Это довольно легко сделать. У меня уже есть набор процедур, которые делают это.

Итак, теперь у меня есть 17 «виртуальных таймеров», которые вы можете самостоятельно устанавливать их периоды и самостоятельно установить обработчики. Я могу добавить еще несколько, но я думаю, что это нужно больше, чем для 99% приложений.

Дэнниф
Сб 8 июля 2017 г. 13:38
Я только что пришел к интересной особенности STM32F0: он имеет калибленные значения для своего датчика температуры (при 30 ° С и 110 ° С) и своего внутреннего эталона напряжения. Эти значения измеряются на заводе и хранятся в этих устройствах.

Они, очевидно, могут быть использованы для более точного измерения аналоговых значений, включая температуру или VDDA; и они также могут быть использованы в качестве другой формы UID, которую STM32F0 «недооценки», :)

STM32Cubemx :: STM32F030F4