Флаб
Вторник, 1 мая 2018 г., 17:02
Привет! Я пытаюсь портировать/использовать следующую библиотеку с Baite Maple Mini STM32F103C8T6.
https: // github.com/madworm/mbi5030_demo ... BI5030.CPP
Первая ошибка, которую я получаю
https: // github.com/madworm/mbi5030_demo ... BI5030.CPP
Первая ошибка, которую я получаю
/home/flo/Arduino/libraries/MBI5030_demo/MBI5030.cpp:22:20: fatal error: avr/io.h: No such file or directory
#include
Стивестронг
Вторник, 1 мая 2018 г., 17:23
Вам не нужна эта линия, просто удалите ее:
#include
Флаб
Вторник, 1 мая 2018 г., 17:34
Я использую Arduino IDE на Ubuntu 16.04
Я удалил #include <avr/io.час> от MBI5030.CPP, теперь я снова получаю эту ошибку.
Я удалил #include <avr/io.час> от MBI5030.CPP, теперь я снова получаю эту ошибку.
/home/flo/Arduino/libraries/MBI5030_demo/MBI5030.cpp: In constructor 'MBI5030::MBI5030(uint8_t, uint8_t, uint8_t, uint8_t)':
/home/flo/Arduino/libraries/MBI5030_demo/MBI5030.cpp:34:64: error: 'portModeRegister' was not declared in this scope
_spi_out_DIR = portModeRegister(digitalPinToPort(_spi_out_pin));
Стивестронг
Вторник, 1 мая 2018 г., 17:53
Вы должны изменить функции прямого доступа к регисту, такие как это:
volatile uint32_t *pin1_io_port, *pin2_io_port;
uint16_t pin1_bitmask, pin2_bitmask;
...
#define PIN1 PA1
#define PIN2 PA2
#define pin1_set (*pin1_io_port = pin1_bitmask)
#define pin1_clear (*pin1_io_port = (pin1_bitmask<<16))
#define pin2_set (*pin2_io_port = pin2_bitmask)
#define pin2_clear (*pin2_io_port = (pin2_bitmask<<16))
...
(in setup):
pin1_io_port = portSetRegister(PIN1);
pin2_io_port = portSetRegister(PIN2)
pin1_bitmask = digitalPinToBitMask(PIN1);
pin2_bitmask = digitalPinToBitMask(PIN2);
...
(in main loop):
pin1_set;
pin2_clear;
...
Флаб
Вторник, 1 мая 2018 г., 17:55
Вау круто, я надеюсь, что это сработает. Куда мне это вставить? Или какой файл является адаптированием?
Тогда я могу увидеть, смогу ли я кодировать его в отношении структуры, которую вы дали.
MH, возможно, мне нужно немного подумать. Как я видел из вашего редактирования: я должен как -то отредактировать основной файл в Arduino IDE вместо MBI5030.CPP...
Тогда я могу увидеть, смогу ли я кодировать его в отношении структуры, которую вы дали.
MH, возможно, мне нужно немного подумать. Как я видел из вашего редактирования: я должен как -то отредактировать основной файл в Arduino IDE вместо MBI5030.CPP...
Флаб
Ср. 02 мая 2018 г., 7:16 утра
_spi_out_DIR = portModeRegister(digitalPinToPort(_spi_out_pin));
_spi_out_PORT = portOutputRegister(digitalPinToPort(_spi_out_pin));
_spi_out_pinmask = digitalPinToBitMask(_spi_out_pin);
Стивестронг
Ср. 02 мая 2018 г., 11:20
Забудьте об определениях AVR, просто замените настройку PIN -кода высокую и низкую определения, как я предложил.
Вам не нужны определения DIR.
Вам не нужны определения DIR.
Флаб
Ср. 02 мая 2018 г., 11:47
Таким образом, с pin1_set вы имели в виду PIN1 = высокий и с PIN1_CLEAR, вы имели в виду PIN1 = низкий ?
А как насчет ввода штифта тогда?
Я попытался воспроизвести пример мига с вашим кодом, но он не сработал... Вы знаете, почему?
А как насчет ввода штифта тогда?
Я попытался воспроизвести пример мига с вашим кодом, но он не сработал... Вы знаете, почему?
volatile uint32_t *pin1_io_port, *pin2_io_port;
uint16_t pin1_bitmask, pin2_bitmask;
#define PIN1 PB1
#define PIN2 PA2
#define pin1_set (*pin1_io_port = pin1_bitmask)
#define pin1_clear (*pin1_io_port = (pin1_bitmask<<16))
#define pin2_set (*pin2_io_port = pin2_bitmask)
#define pin2_clear (*pin2_io_port = (pin2_bitmask<<16))
void setup(void) {
pin1_io_port = portSetRegister(PIN1);
pin2_io_port = portSetRegister(PIN2);
pin1_bitmask = digitalPinToBitMask(PIN1);
pin2_bitmask = digitalPinToBitMask(PIN2);
}
void loop(void) {
pin1_set;
delay(1000);
pin1_clear;
delay(1000);
}
Флаб
Ср 2 мая 2018 г., 21:02
Большое спасибо за вашу помощь !!!
Я мог бы заставить это работать как -нибудь сейчас. Я использовал
Я мог бы заставить это работать как -нибудь сейчас. Я использовал
gpio_set_mode(PIN_MAP[_spi_out_pin].gpio_device, PIN_MAP[_spi_out_pin].gpio_bit, GPIO_OUTPUT_PP);
Rogerclark
Ср. 02 мая 2018 г., 21:28
Я не уверен, почему вам нужно сделать внутренние вызовы API, специфичные для ядра Libmaole.
Можете ли вы попробовать заменить их на обычные вызовы API ARDUINO, такие как Pinmode и DigitalWrite, это было бы более портативным, а скорость не будет проблемой, так как STM32 работает как минимум в 5 раз быстрее, чем AVR
На самом деле я сомневаюсь, что скорость была проблемой для AVR, так как эта функция выглядит как конструктор
Можете ли вы попробовать заменить их на обычные вызовы API ARDUINO, такие как Pinmode и DigitalWrite, это было бы более портативным, а скорость не будет проблемой, так как STM32 работает как минимум в 5 раз быстрее, чем AVR
На самом деле я сомневаюсь, что скорость была проблемой для AVR, так как эта функция выглядит как конструктор
Стивестронг
Ср 2 мая 2018 г., 21:56
Вы должны заменить все эти функции
gpio_set_mode(PIN_MAP[_spi_out_pin].gpio_device, PIN_MAP[_spi_out_pin].gpio_bit, GPIO_OUTPUT_PP);
Rogerclark
Ср 2 мая 2018 г., 22:49
Да
Флаб
Чт, 3 мая 2018 г., 5:51
Спасибо ! Я заменил вызовы API стандартным кодом Arduino, и он работает. Но мне интересно, как получить или установить различные поведения, установленные в GPIO.H со стандартным кодом Arduino?
typedef enum gpio_pin_mode {
/** Output push-pull. */
GPIO_OUTPUT_PP = GPIO_CR_CNF_OUTPUT_PP | GPIO_CR_MODE_OUTPUT_50MHZ,
/** Output open-drain. */
GPIO_OUTPUT_OD = GPIO_CR_CNF_OUTPUT_OD | GPIO_CR_MODE_OUTPUT_50MHZ,
/** Alternate function output push-pull. */
GPIO_AF_OUTPUT_PP = GPIO_CR_CNF_AF_OUTPUT_PP | GPIO_CR_MODE_OUTPUT_50MHZ,
/** Alternate function output open drain. */
GPIO_AF_OUTPUT_OD = GPIO_CR_CNF_AF_OUTPUT_OD | GPIO_CR_MODE_OUTPUT_50MHZ,
/** Analog input. */
GPIO_INPUT_ANALOG = GPIO_CR_CNF_INPUT_ANALOG | GPIO_CR_MODE_INPUT,
/** Input floating. */
GPIO_INPUT_FLOATING = GPIO_CR_CNF_INPUT_FLOATING | GPIO_CR_MODE_INPUT,
/** Input pull-down. */
GPIO_INPUT_PD = GPIO_CR_CNF_INPUT_PU_PD | GPIO_CR_MODE_INPUT,
/** Input pull-up. */
GPIO_INPUT_PU, /* (treated a special case, for ODR twiddling) */
} gpio_pin_mode;
Стивестронг
Чт, 3 мая 2018 г., 7:32 утра
Посмотрите здесь: https: // github.com/rogerclarkmelbourne/ ... H#L43-L100
Rogerclark
Чт, 3 мая 2018 г., 21:39
Примечание.
Некоторые из этих режимов являются нашим собственным расширением API ARDUINO
Я помню, как обсуждал, как Ардуино расширил свой API, чтобы включить такие вещи (возможно, конкретно не PinMode)
Тем не менее, люди, которые управляют arduino don’Кажется, заинтересован в продвижении API вперед, несмотря на доступность оборудования, значительно расширяющуюся за последние 5 лет, E.g с большим количеством MCU, которые теперь засыпаны ядрами 3 -й части.
Особенно устройства, такие как ESP8266 и ESP32, Teensy и т. Д
Некоторые из этих режимов являются нашим собственным расширением API ARDUINO
Я помню, как обсуждал, как Ардуино расширил свой API, чтобы включить такие вещи (возможно, конкретно не PinMode)
Тем не менее, люди, которые управляют arduino don’Кажется, заинтересован в продвижении API вперед, несмотря на доступность оборудования, значительно расширяющуюся за последние 5 лет, E.g с большим количеством MCU, которые теперь засыпаны ядрами 3 -й части.
Особенно устройства, такие как ESP8266 и ESP32, Teensy и т. Д