Ошибка компиляции: «DigitalPinterrupt» не была объявлена ​​в этой области

клавиатура
Солнце 18 июня 2017 г. 9:10 вечера
Я пытался Скомпилируйте эскиз, который я закодировал для Arduino Для целей Maple Mini, Maple (Rev 3), Maple (Ret6) и Generic STM32F103C. Все не удалось с: In function 'void setup()': error: 'digitalPinToInterrupt' was not declared in this scope attachInterrupt ( digitalPinToInterrupt ( PulseTimeIrqPin ), InterruptPulseTime, PulseTrigger ) ;

vitor_boss
Вт 20 июня 2017 г., 4:00 утра
Попробуйте это: inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet) #define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value #define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value

клавиатура
Вт 20 июня 2017 г., 4:51 утра
Витор,

Я попробовал Код вы предложили:
inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet) #define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value #define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value #define LED 13 // Arduino #define IrqPin 7 #define Trigger RISING volatile unsigned long MSCurrent ; volatile int Detect ; // Interrupt Routine void InterruptTime() { MSCurrent = millis() ; digitalWrite ( LED, HIGH ) ; Detect = 1 ; } void setup () { Serial.begin ( 115200 ); delay ( 250 ) ; pinMode ( LED, OUTPUT ) ; pinMode ( IrqPin, INPUT ) ; attachInterrupt ( digitalPinToInterrupt ( IrqPin ), InterruptTime, Trigger ) ; } void loop() { if ( Detect == 1 ) { detachInterrupt ( digitalPinToInterrupt ( IrqPin ) ) ; Detect = 0 ; delay ( 150 ) ; digitalWrite ( LED, LOW ) ; delay ( 1500 ) ; attachInterrupt ( digitalPinToInterrupt ( IrqPin ), InterruptTime, Trigger ) ; } }

Rogerclark
Вт 20 июня 2017 г. 5:50 утра
Я не уверен, что должна делать эта функция (макро)

Для Arduino Sam (Due)
#define digitalPinToInterrupt(p) ((p) < NUM_DIGITAL_PINS ? (p) : -1)

fpistm
Вт 20 июня 2017 г. 6:43
Для STM32 есть один exti на номер PIN GPIO. Итак, 16 exti (PX0 до PX15).
Предупреждение: установите exti на PA0, а PB0 поднял тот же Exti, не узнав, какой порт GPIO это.

Rogerclark
Вт 20 июня 2017 г. 7:08
[fpistm - Вт 20 июня 2017 г. 6:43] - Для STM32 есть один exti на номер PIN GPIO. Итак, 16 exti (PX0 до PX15).
Предупреждение: установите exti на PA0, а PB0 поднял тот же Exti, не узнав, какой порт GPIO это.
Спасибо Фредерик

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

Я проверил API Arduino https: // www.Ардуино.cc/en/reference/atture Interrupt и прикрепить Interrupt не возвращает значение :-(

Таким образом, даже если проверяемое ядро ​​было ошибкой из -за PA0 и PB0 (или я предполагаю PB1, PC1 и т. Д.), То его нельзя было сообщить.

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

На самом деле нам нужно изменение API, чтобы AttactInterrupt мог вернуть Bool, но Arduino обычно не рады изменить свой API

fpistm
Вт 20 июня 2017 г. 8:44
Верно.
Вопрос: «Требуется ли для обработки этой проверки?"
Если пользователь дважды прикрепляет прерывание по номеру вывода 'x' с другим pyx gpio port, я думаю, что IRQ Handler X будет вызван только один раз (TBC).

Rogerclark
Вт 20 июня 2017 г. 9:54 утра
Даже это проверяет, он не может сообщить о проблеме, если она не активы

Так что, вероятно, не стоит даже проверять

vitor_boss
Ср 21 июня 2017 г., 19:05
[клавиатура - Вт 20 июня 2017 г. 4:51] - Витор,

Я попробовал Код вы предложили:

...
Это ожидаемый результат?


С уважением,

Джон Л. Мужчины
Торонто, Онтарио
Канада
20 июня 2017 г. 00:51 EDT
20 июня 2017 г. 00:54 EDT Добавлен код эскиза с предложенными дополнениями кода.
Да, это дает эти предупреждения, но работает здесь, твое сработало?

vitor_boss
Ср 21 июня 2017 г., 19:08
[Rogerclark - Вт 20 июня 2017 г. 7:08] -
[fpistm - Вт 20 июня 2017 г. 6:43] - Для STM32 есть один exti на номер PIN GPIO. Итак, 16 exti (PX0 до PX15).
Предупреждение: установите exti на PA0, а PB0 поднял тот же Exti, не узнав, какой порт GPIO это.
...
На самом деле нам нужно изменение API, чтобы AttactInterrupt мог вернуть Bool, но Arduino обычно не рады изменить свой API
Вы смотрели на Star Repo? Imao, они должны работать на их доске STM

Rogerclark
Пн 13 ноября 2017 г. 1:02
Давно пора, но теперь я добавил
#define digitalPinToInterrupt(pin) (pin)