Первый проход в варианте BluePill

Рик Кимбалл
Сб 17 сентября 2016 г. 1:00
https: // github.com/rickkimball/arduino_core_stm32f1

Это требует гораздо больше работы. Что работает. Вы можете моргнуть светодиод, и часы используют xtal и запускаются @ 72 МГц

Blinkwitoutdelay Hal Style для чертежа: /* Blink without Delay Turns on and off a light emitting diode (LED) connected to a digital pin, without using the delay() function. This means that other code can run at the same time without being interrupted by the LED code. The circuit: * LED attached from pin 13 to ground. * Note: on most Arduinos, there is already an LED on the board that's attached to pin 13, so no hardware is needed for this example. created 2005 by David A. Mellis modified 8 Feb 2010 by Paul Stoffregen modified 11 Nov 2013 by Scott Fitzgerald This example code is in the public domain. http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay */ // constants won't change. Used here to set a pin number : const int ledPin = PC13; // the number of the LED pin // Variables will change : int ledState = LOW; // ledState used to set the LED // Generally, you should use "unsigned long" for variables that hold time // The value will quickly become too large for an int to store unsigned long previousMillis = 0; // will store last time LED was updated // constants won't change unsigned long interval = 100; // interval at which to blink (milliseconds) const long i_low = 100; const long i_high = 900; void setup() { // set the digital pin as output: pinMode(ledPin, OUTPUT); volatile unsigned long clockfcpu = SystemCoreClock; (void)clockfcpu; __asm__ volatile("nop"); HAL_RCC_MCOConfig(RCC_MCO, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1); // PA8 shows clock } void loop() { // here is where you'd put code that needs to be running all the time. // check to see if it's time to blink the LED; that is, if the // difference between the current time and last time you blinked // the LED is bigger than the interval at which you want to // blink the LED. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (ledState == LOW) { ledState = HIGH; interval = i_high; } else { ledState = LOW; interval = i_low; } // set the LED with the ledState of the variable: digitalWrite(ledPin, ledState); } }

Rogerclark
Сб 17 сентября 2016 г. 1:24
Спасибо, Рик

Я просто публиковал о лучшем способе рефакторирования папки Libstm32f1, чтобы приспособиться к такому изменению

Я вижу, ты сделал это с помощью #ifdefs

Но мне интересно, было бы лучше разделить hw_config.C / .H (и сборка GCC) и т. Д. В отдельные папки

эн.глин. System/Variants/Bluepill будет содержать источник и включать и build_cc и (с файлами hw_config в этих источниках и включайте папки)

Или, возможно, положите папку вариантов в Libstm32f1

Я не отчаянно не заинтересован в ifdef's, так как я видел, что он стал очень грязным E.глин. Для некоторых библиотек Arduino, где они пытаются поддерживать несколько платформ

Рик Кимбалл
Сб 17 сентября 2016 г. 14:51
Я действительно просто пробую что -то здесь, чтобы почувствовать базу кода. С последними изменениями я переместил hw_config.C для каждой из папки вариантов. Это кажется работоспособным подходом.

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

Rogerclark
Солнце 18 сентября 2016 г. 12:29
Рик

Я попробовал ваш репо, и это работает нормально, просто с движущейся hw_config.в

Я пытался также переместить hw_config.h, но это не сработало, так как некоторые из файлов в Libstm32f1

Я думаю, что, возможно, мы должны пойти с этим методом в качестве первого прохода и посмотреть, есть ли какие -либо проблемы с ним, E.глин. Будут ли какие -либо изменения, которые требуют hw_config.H должен измениться.


Я подозреваю, что мы узнаем очень скоро, так как добавление USB Serial (USB CDCACM) - это то, что понадобится дальше, и я уверен, что он подчеркнет любые проблемы ;-)

Пса.

Я также скопировал все инструменты из репозитория Libmaple, чтобы я мог непосредственно загрузить из IDE через Stlink, и они работали нормально (неудивительно)

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

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

Rogerclark
Солнце 18 сентября 2016 г. 11:34
Рик

На самом деле

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

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

Ну, не загрузка загрузчика, так как у нас еще нет сериала USB.

Рик Кимбалл
Солнце 18 сентября 2016 г. 15:00
Я создал запрос на тягу. Примечание: это действительно нуждается в сортировке карты PIN. Я еще не делал этого. Единственной булавки, которую я на самом деле проверил, была светодиода.

https: // github.com/stm32duino/arduino_c ... 2f1/pull/2


Я отменил этот запрос, пока не зафиксировал карту штифта

Сжимать
Солнце 18 сентября 2016 г., 17:47
ИМО, мы можем сейчас жить без ардуино... пусть он катится...

Рик Кимбалл
Солнце 18 сентября 2016 г., 19:52
Сламмер написал:ИМО, мы можем сейчас жить без ардуино... пусть он катится...

Rogerclark
Солнце 18 сентября 2016 г., 8:51 вечера
Что не так с картой булавки ?

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

Рик Кимбалл
Солнце 18 сентября 2016 г., 21:34
Я не думаю, что аналоговые функции будут работать

Rogerclark
Солнце 18 сентября 2016 г., 21:49
Рик

ХОРОШО.

Спасибо.

Я только что посмотрел на объявления PIN в варианте.CPP и увидите, вы определили PC13.

Интересно, почему у них был "arduino_id" на карте штифтов
typedef struct _PinDescription { uint32_t arduino_id; uint32_t ulPin ; GPIO_TypeDef * ulPort; uint32_t mode; bool configured; } PinDescription ;

Rogerclark
Солнце 18 сентября 2016 г. 22:53
Re: аналог

Я понимаю, что ты имеешь в виду

Есть несколько булавок E.а. PA6, PA7 и т. Д., Которые могут иметь ADC, но в «режиме» не указано АЦП для этих булавок

Но я не могу найти ничего в коде, который на самом деле использует определение gpio_pin_adc

Единственные «режимы», которые, кажется, активно используются в коде, - это gpio_pin_pwm и gpio_pin_dac, хотя я смотрю только в F1 (но, поскольку они являются самостоятельными ядрами, это все, что имеет значение.


Редактировать

Я заметил, что вы изменили max_digital_ios

И я заметил, что нам нужно изменить любую ссылку на arduino_pin_xx, когда я удалил их и заменил определениями PXX

Редактировать 2

Я думаю, что лучшее, что можно сделать, это притянуться к новой ветке, а затем внести эти изменения. @slammer и т. Д. Может затем проверить эту ветвь, прежде чем она объединится в мастер

Сжимать
Солнце 18 сентября 2016 11:36
Arduino_pins - это соответствующие контакты на ядрах (у них есть разгона arduino uno). Они используются только для совместимости с программами Arduino (когда это возможно). В синей таблетках они не нужны, так как нет отношения с нумерацией Arduino. Лучше сохранить стандартное корм для штифта STM32 (PA1, PA2, PA3 и т. Д...) и если у варианта есть «булавки Arduino», чтобы сделать некоторые дополнительные определения для этого.
Например, можно сохранить предопределенный тип нумерации, например:

PA0 = порт A, PIN 0 = номер 0x00
PA1 = порт A, вывод 1 = номер 0x01
.
.
PB0 = порт B, контакт 0 = номер 0x10
PB1 = порт B, вывод 1 = номер 0x11

Первый щит = порт
Второй Nibble = номер PIN -кода
Эта схема была бы полезна в качестве количества PIN -кода, хранит информацию о положении порта и вывода (это поможет оптимизировать некоторые функции и/или уменьшить размер некоторых структур)

Rogerclark
Пн 19 сентября 2016 г. 12:07
@slammer

PIN_ARDUINO_XXX, по -видимому, используется в некоторых других макросах в одном файле, поэтому все это должно быть обновлено для Bluepill и т. Д

Я занят работой сегодня утром, но я затянут Рикс, изменения в новой ветви arduino_core_stm32f1 Repo, сегодня днем ​​(или вечером), и попытаться изменить все в варианте.c, чтобы завтра вы, ребята, можете попробовать.

Примечание. Нам нужно также получить сериал USB.

Я знаю, что @Vassilis получил работу с ядром HAL MX, которое создал @sheepdoll, поэтому я надеюсь, что мы сможем повторно использовать или использовать много его кода.

(Хотя нам также может потребоваться реэкспортировать код HAL из куба, так как я не уверен, были ли все необходимые функции HAL экспортированы, поскольку не требовались для платы Nucleo :-(

evge.05
Пн 19 сентября 2016 г., 5:04
Привет! Попробуйте использовать кнопку на PC13. Но эскиз не компилируется. Чем Роджерс ясен все в порядке, но что это ядро, некоторые неверны. Как я понимаю, мы можем использовать только Arduino Pins A0-A5, D0-D15? Порт C не определен в этом ядре? Я прав?

Rogerclark
Пн 19 сентября 2016 г., 5:17 утра
Рик определил PC13, но я попробовал только для вывода, в коде может быть что -то еще, что предотвращает его использование в качестве входа

evge.05
Пн 19 сентября 2016 г., 7:40 утра
HAL_GPIO:5: error: 'PC13' was not declared in this scope

Rogerclark
Пн 19 сентября 2016 г., 7:44 утра
Какое ядро ​​вы используете? Тот в репо Рике ?

evge.05
Пн 19 сентября 2016 г., 7:49
Да. На вашем ядро ​​в том же эскиза.

Rogerclark
Пн 19 сентября 2016 г. 8:28 утра
Как вы установили ядро ?

evge.05
Пн 19 сентября 2016 г., 9:45 утра
Как ваше ядро. Просто скопируйте файлы в/arduino/harpware/

Rogerclark
Пн 19 сентября 2016 г., 10:01
ХОРОШО

Можете ли вы подтвердить, какой URL вы загрузили его с ?

evge.05
Пн 19 сентября 2016 г., 10:24
https: // github.com/rickkimball/arduino_core_stm32f1

Rogerclark
Пн 19 сентября 2016 г., 11:21
Гм

Это странно

Я не получаю эту ошибку

Какую версию IDE вы используете ?

evge.05
Пн 19 сентября 2016 г., 11:51
Последняя версия 1.6.11

Рик Кимбалл
Пн 19 сентября 2016 12:05
https: // github.com/rickkimball/arduino_ ... /вариант.час
PC13 находится в этом файле.

Вы выбрали синюю доску таблеток или нуклео?

evge.05
Пн 19 сентября 2016 12:08
Выберите доску Nucleo

Рик Кимбалл
Пн 19 сентября 2016 12:09
Тогда вам нужно использовать любой PIN -код для светодиода на этой плате вместо PC13.

Рик Кимбалл
Пн 19 сентября 2016 12:16
Я предполагаю, что я должен был использовать Define LED_BUILTIN, однако, как я написал код, он был специфичен для синей таблетки, когда он включает светодиод, установив его низко на 100 мс, затем выключает его на 900 мс, установив высокий штифт. Если вы попробуете это на доске Nucleo, это будет в основном в 90% случаев.

evge.05
Пн 19 сентября 2016 12:26
Я только что переустановил Arduino IDE и снова скопировал ядро. Но Arduino Ide не видит нового ядра, как доски ядрев. Rogers Core работает нормально. Очень странные вещи.
извини. Может быть, я сделал что -то не так, но это ядро ​​работает только в том случае, если он копирует в папку, как ядро ​​Роджерс https: // github.com/rogerclarkmelbourne/arduino_stm32 В другом случае Arduino Ide не видит Rick Core.

Рик Кимбалл
Пн 19 сентября 2016 г., 13:09
Я извлечен к:
Arduino/Adware/ST/STM32F1

Следуя модели поставщика/архитектуры от

https: // github.com/arduino/arduino/wiki ... 1.0 к 1.6

evge.05
Пн 19 сентября 2016 г., 13:19
Что ж, я извлек в/документы/arduino/hardware/stm32f1 -master - не работает. Чем я извлек Rogers Core To/Documents/Arduino/Adware/STM32F1 - все работает. Чем я скопировал Rick Core в/Documents/Arduino/Admarwware/STM32F1/и появляется в Arduino IDE.

Рик Кимбалл
Пн 19 сентября 2016 г., 13:29
Наверное, правильное место будет:

$ pwd
/home/kimballr/arduino/hardware/stm32duino/stm32f1
$ ls
доски.TXT Cores Library Platform.TXT программисты.txt readme.MD Системные варианты

где STM32duino является продавец
и STM32F1 является архитектура

Для Linux это выглядит так: $ mkdir -p $HOME/Arduino/hardware/stm32duino $ cd $HOME/Arduino/hardware/stm32duino $ git clone https://github.com/RickKimball/Arduino_Core_STM32F1.git stm32f1 $ ls stm32f1 boards.txt cores libraries platform.txt programmers.txt README.md system variants

evge.05
Пн 19 сентября 2016 г., 13:35
Я пользователь Win10.

Рик Кимбалл
Пн 19 сентября 2016 г., 13:40
Так что я думаю, что это должно оказаться в:

C: \ someUserdir \ documents \ arduino \ hardware \ stm32duino \ stm32f1 \ oards.текст ?

evge.05
Пн 19 сентября 2016 г., 13:57
C: \ users \ evgen \ documents \ arduino \ hardware \ arduino_stm32-master \ arduinostm32f1 \ boards.TXT - этот вариант работа.
C: \ users \ evgen \ documents \ arduino \ hardware \ arduinostm32f1 \ boards.TXT - этот вариант не работает.

Рик Кимбалл
Пн 19 сентября 2016 г., 19:31
Rogerclark написал: ...
Интересно, почему у них был "arduino_id" на карте штифтов

Рик Кимбалл
Пн 19 сентября 2016 г., 19:36
Прежде чем я потрачу на это слишком много времени, я подожду, пока команда ST объявит победу и укажу, что они сделаны. Планируете ли вы что -нибудь делать с кодом STM32F1 @FPISTM ?

-рик

Rogerclark
Пн 19 сентября 2016 г., 8:28 вечера
Рик, вы видели пост от wi6labs?

Я переместил его в этот раздел.

Рик Кимбалл
Пн 19 сентября 2016 г., 8:30 вечера
Я не видел этого поста. Спасибо.

Rogerclark
Вторник 20 сентября 2016 г. 8:28 утра
Рик

Я отправил по электронной почте Фредерику и Лорану @ STM, и Фредерик подтвердил, что они не собираются вносить какие -либо изменения в выпущенные ядра.

И, как вы можете видеть из поста Wi6lab, они изменили бы код F1, только если сообщили об ошибке.

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

Глядя на файлы, я думаю, что нам, вероятно, придется жить с определенным количеством дублирования, поскольку вариантам могут потребоваться изменения практически во всех файлах в папке Libstm32f1/Source

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

Возможно, @Slammer и несколько других людей также смогут посмотреть на это (возможно, @sheeepdoll и т. Д.), Поскольку это, мы надеемся, увидят какие -либо потенциальные проблемы

Даниэфф
Вторник 20 сентября 2016 г., 9:01
Что если вы только поместите структуры периферии (G_ANALOG_CONFIG, SPI_INIT_INFO, G_UART_CONFIG, ...) в файл варианта?

Rogerclark
Вторник 20 сентября 2016 г., 10:00 утра
Я быстро посмотрел на аналог.c и это выглядит так, как будто это просто эта структура, которая содержит варианты определений, однако в

Hal_dac_mspinit ()

Есть этот код
if(g_analog_config[g_current_init_id].port == GPIOA) { __GPIOA_CLK_ENABLE(); } else if(g_analog_config[g_current_init_id].port == GPIOB){ __GPIOB_CLK_ENABLE(); } else if(g_analog_config[g_current_init_id].port == GPIOC){ __GPIOC_CLK_ENABLE(); }

Рик Кимбалл
Вторник 20 сентября 2016 г. 13:05
Даниэфф написал:Что если вы только поместите структуры периферии (G_ANALOG_CONFIG, SPI_INIT_INFO, G_UART_CONFIG, ...) в файл варианта?

Рик Кимбалл
Вторник 20 сентября 2016 г. 13:08
Rogerclark написал: if(g_analog_config[g_current_init_id].port == GPIOA) { __GPIOA_CLK_ENABLE(); } else if(g_analog_config[g_current_init_id].port == GPIOB){ __GPIOB_CLK_ENABLE(); } else if(g_analog_config[g_current_init_id].port == GPIOC){ __GPIOC_CLK_ENABLE(); }

Сжимать
Вторник 20 сентября 2016 г. 15:33
Можно изменить на что -то подобное: if(port == GPIOA) { __GPIOA_CLK_ENABLE(); } else if(port == GPIOB){ __GPIOB_CLK_ENABLE(); } else if(port == GPIOC){ __GPIOC_CLK_ENABLE(); } #ifdef GPIOD } else if(port == GPIOD){ __GPIOD_CLK_ENABLE(); } #endif #ifdef GPIOE } else if(port == GPIOE){ __GPIOE_CLK_ENABLE(); } #endif

rreignier
Вторник 20 сентября 2016 г., 17:35
Сламмер написал:Можно изменить на что -то подобное: if(port == GPIOA) { __GPIOA_CLK_ENABLE(); } else if(port == GPIOB){ __GPIOB_CLK_ENABLE(); } else if(port == GPIOC){ __GPIOC_CLK_ENABLE(); } #ifdef GPIOD } else if(port == GPIOD){ __GPIOD_CLK_ENABLE(); } #endif #ifdef GPIOE } else if(port == GPIOE){ __GPIOE_CLK_ENABLE(); } #endif

Rogerclark
Вторник 20 сентября 2016 г., 8:55 вечера
Я думаю, что Libmaple имеет аналогичный код, основанный на «плотности MCU»

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

Rogerclark
Чт 22 сентября 2016 г., 21:49
Ребята

Просто чтобы заставить мяч двигаться, я собираюсь дублировать Libstm32f1, чтобы сделать Libbluepill, я вручную объединить изменения Рика

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

Мы всегда можем оптимизировать проблему дублирования файла позже.

Я также должен загрузить все остальные инструменты E.глин. stlink загрузка

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

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

Rogerclark
Ср 28 сентября 2016 г. 11:30
К вашему сведению

Информация из Wi6labs, они используют эти версии «прошивки» в кубе
1.4.0 STM32Cubef1 и 1.4.0 STM32Cubel4. Таким образом, удалили некоторые старые версии «прошивки» из моего куба и убедились, что у меня были только это.... Как иногда мне нужно экспортировать файлы e.глин. USB и т. Д. Из куба для использования в этом ядре

Даниэфф
Вт 11 октября 2016 г., 7:37 утра
Даниэфф написал:Что если вы только поместите структуры периферии (G_ANALOG_CONFIG, SPI_INIT_INFO, G_UART_CONFIG, ...) в файл варианта?

Rogerclark
Вт 11 октября 2016 г. 8:39 утра
Спасибо

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

Я помню, как смотрел на нечто подобное в Либмапле, и это не тратило так много места, но это, вероятно, другое

Re: конфигурация PIN между вариантами

Я думаю, что Libmaple Intits все возможные GPIOS даже для самого низкого варианта. Возможно, технически не верно, но он экономит много дублированного кода и, похоже, не причиняет никакого вреда, если у устройства на самом деле нет этого оборудования

Стивестронг
Вт 11 октября 2016 г. 9:07
Даниэфф написал:Размер структур может быть значительно уменьшен. Скорость штифта/режим вытягивания может быть удалена в SPI/I2C/UART, я не думаю, что они меняются. Gpio_clkx_enable можно удалить, вызывая Digital_io_init () вместо hal_gpio_init ().

Даниэфф
Вт 11 октября 2016 г. 9:26 утра
Стивестронг написал:Даниэфф написал:Размер структур может быть значительно уменьшен. Скорость штифта/режим вытягивания может быть удалена в SPI/I2C/UART, я не думаю, что они меняются. Gpio_clkx_enable можно удалить, вызывая Digital_io_init () вместо hal_gpio_init ().

Даниэфф
Солнце 23 октября 2016 г. 18:56
Эти структуры могут быть автоматически сгенерированы с использованием файлов XML Cubemx Data. Я написал сценарий Python, который может извлечь данные SPI в C -код: http: // pastebin.com/85jcvk9k , Использование: установите переменную cubemx_dir и запустите ее как: python cubemx_data_export.PY STM32F103C8
Примеры сгенерированного кода: STM32F103C8, STM32L476RG, STM32F746BE

UART/I2C (или даже список GPIO в варианте) можно легко сделать. ADC/DAC/PWM, может быть, немного сложнее. Таймеры ... Я не изучал это.
Он генерирует булавки по умолчанию. Внизу есть «Remaps», чтобы помочь настроить альтернативные булавки.

Даниэфф
Солнце 13 ноября 2016 г. 9:40
А вот несколько сгенерированных файлов для досок: https: // github.com/danieleff/arduino_co ... n_examples
В то время как первый SPI/i2c... булавки в основном одинаковы, если вы когда-нибудь хотите использовать альтернативные булавки / множественные SPI-S и т. Д... это будет легче генерировать, чем настройка всех из них вручную.
Это просто примеры, но они являются структурой, используемыми в этом ядре.

Rogerclark
Солнце 13 ноября 2016 г. 9:51
Отличный...

Спасибо

Олли
Солнце 13 ноября 2016 г., 17:15
Даниэль,

Ранее я не посещал ваш GitHub, и теперь я должен сказать, что мне очень нравится ваш стиль программирования. Информация, на которой у вас есть

https: // github.com/danieleff/arduino_core_stm32f1

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

Ура, Олли

Rogerclark
Солнце 13 ноября 2016 г., 19:23
Я объединю репонирование Даниэля в репо STM32 сегодня.

Как я уже сделал местное слияние предыдущего стабильного коммита, и это хорошо для меня работало

Даниэфф
Пн 14 ноября 2016 г., 7:58 утра
Олли написал:Даниэль,

Ранее я не посещал ваш GitHub, и теперь я должен сказать, что мне очень нравится ваш стиль программирования. Информация, на которой у вас есть

https: // github.com/danieleff/arduino_core_stm32f1

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

Ура, Олли

Rogerclark
Пн 14 ноября 2016 г. 8:18 утра
Видеть

ViewTopic.PHP?f = 16&t = 1553&начало = 20

Это в основном работает.

Единственная проблема на данный момент заключается в том, что библиотека Valueline Discovery F100 не будет компилироваться из -за USB -файлов