Определения выводов в arduino_core_stm32

Андисимоны
Вт 20 ноября 2018 г. 12:56
Недавно я сделал определение платы, адаптируя код с аналогичной платы, как предполагают инструкции, но неясно, как используются определения. Основные модули PINS_ARDUINO.час и PINS_ARDUINO.в Кажется, что делает все карты.

Например, цифровые контакты D0 к DMAX перечисляются как нулевые вверх; Означает ли это, что имена PIN -код в вариант.час и вариант.в должен начать PA0, PA1 и т. Д. до PA15, затем на PB0 и т. Д.? Примеры, которые я смотрел. Как инициализация GPIO узнает порт и PIN -код, соответствующий числу, как PB6?

Я также вижу, что аналоговые контакты A0 к Amax перечислены последовательно из заданной отправной точки num_analog_first. Это может работать с ATMEGA328, но для STM это неверно, если сами выводы не пронумерованы особым образом. Например, для STM32F103 PA0-7 соответствуют IN0-7, тогда PB0-1-IN8-9, а PC0-5-в 10-15.

Конечно, этой проблемы избегается, если кто-то не использует D0-DMAX или A0 для AMAX, а имена STM32, такие как PA0 (PA_0), PB1 (PB_1), PC2 (PC_2) и т. Д. Для меня имеет смысл использовать старые имена Arduino D0-DMAX и A0-Amax, если они напечатаны как таковые на доске. Есть ли доски, которые делают это? Если это так, было бы не более надежным поместить определения d0-dmax и a0-amax в определениях платы -- вариант.час и вариант.в ?

С уважением, Энди

fpistm
Вт 20 ноября 2018 г. 13:52
[Андисимоны - Вторник 20 ноября 2018 г. 12:56 вечера] - основные модули PINS_ARDUINO.H и PINS_ARDUINO.C, кажется, делает все картирование.
Нет, это только базовое отображение Arduino Naming Ax/DX.
[Андисимоны - Вторник 20 ноября 2018 г. 12:56 вечера] - Например, цифровые контакты D0 к DMAX перечисляются как нулевые вверх; Означает ли это, что имена PIN -код в варианте.H и вариант.C должен начать PA0, PA1 и т. Д. до PA15, затем на PB0 и т. Д.? Примеры, которые я смотрел. Как инициализация GPIO узнает порт и PIN -код, соответствующий числу, как PB6?
В Arduino D0 всегда равен 0. Как DigitalRead (D0) эквивалентен DigitalRead (0). Итак, dx = x.
Пин определяет в вариант.час это номер PIN -кода. Это позволяет совместимо с большинством API ARDUINO, используя номер PIN в качестве аргумента.
Таким образом, Pyn можно определить как равное DX.
Он также используется в качестве индекса для массива PinName, определенного в вариант.CPP.
Pinname - это тип, содержащий порт и контакт с GPIO.
Бывший: PB_6 = (PortB << 4) + 0x06,

Андисимоны
Чт 22 ноября 2018 г. 22:10
Спасибо за эти пояснения.

Когда вы говорите Аналоговые булавки должны быть смежными, чтобы позволить цикл: , Я полагаю, вы имеете в виду, что они должны быть смежными где -то в Const pinname DigitalPin [] Таблица, которая была бы возможно, нет в порядке физических булавок, которые невозможно?

Таким образом, если плата помечена D0-DN, с некоторыми булавками (также или альтернативно) A0-AN, то это должно быть упорядочение Const pinname DigitalPin [] стол; Однако, если плата не так маркирована, тогда любой заказ может использоваться в Const pinname DigitalPin []?

Например, доска Diomrue отмечена именами STM32, а не именами Arduino, такими как DX и AX, поэтому обсуждение является спорным. В этом случае было бы лучше, если бы DX и AX не были определены вообще - но это не вариант на данный момент. Возможно, было бы больше смысла, если бы они были определены конкретно в вариантах?

То, как я настроил его на Diymroe, они могут быть определены неправильно, но, поскольку они не имеют значения с этой платой, пользователь никогда не будет их использовать. Я предполагаю, что PinMode, DigitalRead/Write и Analogread/Write всегда будут правильно работать с именами STM (PA1, PB2 и т. Д.), При условии, что #Defines в варианте.H Сопоставьте заказ внутри Const pinname DigitalPin []?

Я думаю, я начинаю получать это!

fpistm
Пт 23 ноября 2018 г. 8:13
DX и AX не важны. Я не понимаю, почему ты сосредоточишься на них.
Это для совместимости Arduino, и пользователь должен использовать его или нет, это не рост размера кода.
Все API совместимы с названием PIN STM PIN.
В зависимости от варианта, чтобы определить порядок вывода единственным ограничением состоит в том, чтобы аналоговые контакты были смежными, а первая должна быть выше, чем количество аналогов, которое вы определяете.

Беннебой
Чт 10 января 2019 г., 16:52
Извините, что Piggyback в этой теме, особенно с учетом 2 месяцев... но...

Кажется, я не могу получить аналоги, чтобы работать над двумя вариантами Genf4, к которым у меня есть доступ (Diymroe & Black407vet6)

Они предварительно зафигурированы, если включены в аналоговый PINMAP или требуется некоторая настройка PIN-кода?

fpistm
Чт 10 января 2019 г., 17:16
Нет особого дела. Если они четко определены, они должны работать просто с помощью: int sensorValue = analogRead(A0);

fpistm
Пт 11 января 2019 г., 7:57 утра
Хорошо, я сделал тест и думаю, я думаю, почему вы спросили, работает ли это.
#define Serial SerialUSB // Arduino Due, Maple // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // print out the value you read: Serial.print("A0 (PA0)= "); Serial.print(analogRead(A0)); Serial.print("\t"); Serial.print(analogRead(0)); Serial.print("\t"); Serial.println(analogRead(PA0)); delay(1); // delay in between reads for stability Serial.print("A1 (PA1)= "); Serial.print(analogRead(A1)); Serial.print("\t"); Serial.print(analogRead(1)); Serial.print("\t"); Serial.println(analogRead(PA1)); delay(1); // delay in between reads for stability Serial.print("A2 (PA2)= "); Serial.print(analogRead(A2)); Serial.print("\t"); Serial.print(analogRead(2)); Serial.print("\t"); Serial.println(analogRead(PA2)); delay(1); // delay in between reads for stability Serial.print("A3 (PA3)= "); Serial.print(analogRead(A3)); Serial.print("\t"); Serial.print(analogRead(3)); Serial.print("\t"); Serial.println(analogRead(PA3)); delay(1); // delay in between reads for stability Serial.print("A4 (PA4)= "); Serial.print(analogRead(A4)); Serial.print("\t"); Serial.print(analogRead(4)); Serial.print("\t"); Serial.println(analogRead(PA4)); delay(1); // delay in between reads for stability Serial.print("A5 (PA5)= "); Serial.print(analogRead(A5)); Serial.print("\t"); Serial.print(analogRead(5)); Serial.print("\t"); Serial.println(analogRead(PA5)); delay(1); // delay in between reads for stability Serial.print("A6 (PB0)= "); Serial.print(analogRead(A6)); Serial.print("\t"); Serial.print(analogRead(6)); Serial.print("\t"); Serial.println(analogRead(PB0)); delay(1); // delay in between reads for stability Serial.print("A7 (PB1)= "); Serial.print(analogRead(A7)); Serial.print("\t"); Serial.print(analogRead(7)); Serial.print("\t"); Serial.println(analogRead(PB1)); delay(1); // delay in between reads for stability Serial.print("A8 (PC0)= "); Serial.print(analogRead(A8)); Serial.print("\t"); Serial.print(analogRead(8)); Serial.print("\t"); Serial.println(analogRead(PC0)); delay(1); // delay in between reads for stability Serial.print("A9 (PC1)= "); Serial.print(analogRead(A9)); Serial.print("\t"); Serial.print(analogRead(9)); Serial.print("\t"); Serial.println(analogRead(PC1)); delay(1); // delay in between reads for stability Serial.print("A10 (PC2)= "); Serial.print(analogRead(A10)); Serial.print("\t"); Serial.print(analogRead(10)); Serial.print("\t"); Serial.println(analogRead(PC2)); delay(1); // delay in between reads for stability Serial.print("A11 (PC3)= "); Serial.print(analogRead(A11)); Serial.print("\t"); Serial.print(analogRead(11)); Serial.print("\t"); Serial.println(analogRead(PC3)); delay(1); // delay in between reads for stability Serial.print("A12 (PC4)= "); Serial.print(analogRead(A12)); Serial.print("\t"); Serial.print(analogRead(12)); Serial.print("\t"); Serial.println(analogRead(PC4)); delay(1); // delay in between reads for stability Serial.print("A13 (PC5)= "); Serial.print(analogRead(A13)); Serial.print("\t"); Serial.print(analogRead(13)); Serial.print("\t"); Serial.println(analogRead(PC5)); delay(1000); // delay in between reads for stability Serial.println("#################"); }

Беннебой
Пт 11 января 2019 г. 10:42
Хорошо, спасибо, это имеет смысл.

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

fpistm
Пт 11 января 2019 12:26
В настоящее время я пишу эскиз для тестирования варианта когерентности. Я поделюсь этим сегодня днем.

Беннебой
Пт 11 января 2019 14:13
[fpistm - Пт 11 января 2019 12:26] - В настоящее время я пишу эскиз для тестирования варианта когерентности. Я поделюсь этим сегодня днем.
Отлично, спасибо.

fpistm
Пт 11 января 2019 г., 17:00
[Беннебой - Пт 11 января 2019 г. 14:13] -
[fpistm - Пт 11 января 2019 12:26] - В настоящее время я пишу эскиз для тестирования варианта когерентности. Я поделюсь этим сегодня днем.
Отлично, спасибо.
Первый выстрел. Я добавлю еще немного чека.

https: // Gist.GitHub.com/fpistm/93f26012 ... 6383E4F314

Беннебой
Пт 11 января 2019 г., 18:01
Хороший.

Хотя я думаю, что получение правильных рефери pxy может быть слишком большим.

Этот инструмент пока поможет, я думаю.

Беннебой
Солнце 13 января 2019 г. 11:54
@fpistm

Является ли ADC, настроенный на совместимость ADC только 10 бит для совместимости Arduino AVR?

Любой способ иметь полные 12 бит?

Беннебой
Солнце 13 января 2019 12:11
Только что посмотрел на wiling_analog.в

Предположительно, мы могли бы как -то сделать _readresolution?

В настоящее время он зафиксирован в 10:
static int _readResolution = 10;

Беннебой
Солнце 13 января 2019 12:24
Из того, что я могу сказать, ESP имеет код в их HAL, чтобы справиться с разрешением (до 12 бит H/W или 16 -битного S/W).

fpistm
Солнце 13 января 2019 14:18
Гул, на самом деле есть смещение, так как на самом деле это разрешение 12b:

https: // github.com/stm32duino/arduino_c ... бревно.C#L550
И определено также здесь:
https: // github.com/stm32duino/arduino_c ... Ино.H#L279

На самом деле, я думаю, это должно быть: static int _readResolution = ADC_RESOLUTION;

Беннебой
Солнце 13 января 2019 г. 14:45
Протестирован & Работаю, я отправлю пиар, как только смогу :ржу не могу:

fpistm
Солнце 13 января 2019 г. 15:03
Гул, на самом деле это не проблема.
https: // www.Ардуино.cc/reference/en/lan ... Esolution/
По умолчанию разрешение хорошо 10 бит.
Преобразование выполняется в 12 битах, но нанесло на карту 10.
Как упомянуто в ссылке API ARDUINO: Семейные доски Zero и MKR имеют 12-разрядные возможности АЦП, которые можно получить Изменив разрешение на 12. Это вернет значения из анализа () от 0 до 4095. Таким образом, пользователь должен явно запросить 12 бит. // change the resolution to 12 bits analogReadResolution(12);

Беннебой
Солнце 13 января 2019 г. 15:26
Мой плохой, спасибо, что указали на это.

Fredbox
Пт 15 февраля 2019 г., 23:26
После прочтения этой темы, я все еще запутался.

Примеры: digitalWrite(PC13,0) turns on the LED on a blue pill. digitalWrite(PC_13,0) does not. Serial.print(PC13) prints 17. Serial.print(PC_13) prints 45. digitalWriteFast(PC13,0) gives a compile error digitalWriteFast(PC_13,0) compiles but does not turn on the LED

fpistm
Сб 16 февраля 2019 г. 14:54
PXN - это пин -номер, как во всех API Arduino API.
Py_n - это тип pinname, он представляет порт GPIO и бит.

Вот почему они не имеют такой же значения.
digitalWrite(PC13,0); // turns on the LED on a blue pill. --> ok as this API use the pin number digitalWrite(PC_13,0); // does not. --> not ok as this is the piname while it waits the pin number. digitalWriteFast(PC13,0); // gives a compile error --> compiler wait a pinname type not a pin number so this is ok digitalWriteFast(PC_13,0); // compiles but does not turn on the LED --> this should while the pin has been configured before using pinmode(PC13, OUTPUT);

Fredbox
Сб 16 февраля 2019 г. 16:36
Я использовал PinMode (PC_13, вывод) для тестирования DigitalWriteFast ().

Он работает, как вы описываете для PinMode (PC13, Output), за которым следует цифровая writhwrite (PC_13, x).

Было бы больше смысла, если бы pinmode () понял оба формата.

Fredbox
Сб 16 февраля 2019 г., 17:34
Я нашел макрос в pins_arduino.H, чтобы сделать конверсию: #define digitalPinToPinName(p) ...

fpistm
Сб 16 февраля 2019 г. 18:36
[Fredbox - Сб 16 февраля 2019 г. 16:36] -
Было бы больше смысла, если бы pinmode () понял оба формата.
К сожалению, это нельзя было сделать, так как Pinmode - это C API и официальный API Arduino API.
Может быть, преобразование цифрового API в C ++ может быть решением.

USB HID и состав