конвертировать порт в int

астер
Пн 26 июня 2017 г. 9:55 вечера
привет,

Я переношу библиотеку в STM, которая использует модуль Bluetooth для общения с приложением Android
Мне нужно назначить порт переменной, что -то вроде:
int a = pb1;
Мне было интересно, какой тип я должен использовать правильный тип?

Кстати, я проверил Int, и это работает, но это привело меня к другому вопросу:

Используя это на Maple Mini и на черной таблетках, я получаю различные значения от печати, почему? while (spi_is_tx_empty(dev)

Rogerclark
Пн 26 июня 2017 г. 22:08
Если вы хотите прочитать весь порт (16 бит), на данный момент вам нужно будет использовать встроенный ссылку на структуру порта (устройство) и его входной регулятор.

Я уверен, что другие люди опубликовали несколько фрагментов кода. Попробуйте Googling для быстрого доступа GPIO или доступа к порту

астер
Пн 26 июня 2017 г. 22:29
[Rogerclark - Пн 26 июня 2017 г. 22:08] - Если вы хотите прочитать весь порт (16 бит)
Я не должен читать весь порт. Я просто хотел бы знать, какую переменную я должен использовать, чтобы назначить пин -код переменной.
И тогда почему на другой плате (практически с тем же MCU) соответствующее значение int для PAX отличается

Rogerclark
Вт 27 июня 2017 г. 1:20 утра
Булавки - это просто указатель в массив PIN_MAP

Я думаю, что вы могли бы использовать один байт, но, поскольку MCU - это изначально 32 бита, как правило, лучше всего использовать Int для целых чисел, если вам не нужно сделать какое -то конкретное смещение битов или маскирование, которое требует 8 -битного значения

Так... использовать

инт

Стивестронг
Вт 27 июня 2017 г. 12:30
Различные портовые булавки являются частью перечисления, как это:
https: // github.com/rogerclarkmelbourne/ ... орд.H#176
Ну, на самом деле они должны быть идентичны, но я не знаю логики, почему булавки не принимаются в одном и том же порядке для каждого варианта...

Rogerclark
Вт 27 июня 2017 12:49
[Стивестронг - Вт 27 июня 2017 г. 12:30]] - Различные портовые булавки являются частью перечисления, как это:
https: // github.com/rogerclarkmelbourne/ ... орд.H#176
Ну, на самом деле они должны быть идентичны, но я не знаю логики, почему булавки не принимаются в одном и том же порядке для каждого варианта...
Причина, по которой карты PIN не находятся в одном и том же порядке, заключается в том, что все они получены из кленовых плат, и эти платы имеют странные отображения PIN, так как их выводы пронумерованы, а не используют букву порта и номер, E.G PB5.

Первоначально общее картирование F103C было таким же, как и Maple Mini, но я подумал. Хотя я, возможно, не очищал все доски, а некоторые другие платы могут использовать номера пин.

астер
Вт 27 июня 2017 г. 13:06
[Rogerclark - Вт 27 июня 2017 г. 12:49 -
Причина, по которой карты PIN не находятся в одном и том же порядке, заключается в том, что все они получены из кленовых плат, и эти платы имеют странные отображения PIN, так как их выводы пронумерованы, а не используют букву порта и номер, E.G PB5.

Первоначально общее картирование F103C было таким же, как и Maple Mini, но я подумал. Хотя я, возможно, не очищал все доски, а некоторые другие платы могут использовать номера пин.
Отлично сейчас это имеет смысл, у меня была такая же мысль, что и Стевестронг: «На самом деле они должны быть идентичными»

Дэнниф
Вт 27 июня 2017 г. 13:12
Если исходный код сделан правильно, он должен определить тип прихоти для выводов.

Если нет, вы можете увидеть это дискретно определено .

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

Стивестронг
Вт 27 июня 2017 г. 13:48
[Дэнниф - Вторник 27 июня 2017 г. 13:12] - Это не хорошая практика для кодирования их через переменную. Вместо этого я использую макросы.
К сожалению, большинство оригинальных эскизов Arduino используют версию «int» (переменная).
Я, я также предпочитаю макросы, так что, когда я переносит эскиз для STM32, первое, что я делаю, это заменить «int» на макрос.

Rogerclark
Вт 27 июня 2017 г. 9:37 вечера
Афик

const int, тоже будет в порядке,

Zoomx
Ср 28 июня 2017 г., 6:29
На форуме Arduino есть пост о различиях между использованием const int vs #define.
Комбинированная препроцессор/компиляр не делает различий, он будет использоваться в одном и том же пространстве памяти.
В любом случае кажется, что const int лучше, потому что, если вы совершаете ошибки, возникнут ошибки
например, это while (spi_is_tx_empty(dev)

астер
Пт, 07 июля 2017 г., 7:48
Интересно спасибо Zoomx! Я всегда использую макросы, но теперь я буду использовать константу в той же ситуации :)

ZMEMW16
Пт, 07 июля 2017 г., 11:00 утра
void setup() { // Set up the built-in LED pin as an output: pinMode(PB13, OUTPUT); pinMode(PA5, OUTPUT); } void loop() { digitalWrite(PA5,!digitalRead(PA5));// Turn the LED from off to on, or on to off digitalWrite(PB13,!digitalRead(PB13));// Turn the LED from off to on, or on to off delay(1000); // Wait for 1 second (1000 milliseconds) }

астер
Пт, 07 июля 2017 12:06
Это был пример возможной ошибки ;)

ZMEMW16
Пт, 07 июля 2017 12:35
Я рад, что тогда это понял :ржу не могу:
О, это щекотало
Стивен

астер
Ср. 12 июля 2017 г. 14:08
Мне было интересно, можно ли сделать наоборот: преобразовать вывод (например, встроенный Maple Mini Inder = 33) в порт (i.эн. PB1)

Я посмотрел на ядро ​​Роджера, но я не нашел способ сделать это, это единственная информация, которую я мог бы найти похожей на то, что я ищу
#define ledpin 13 boolean flip=0; void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); Serial1.begin(9600); Serial2.begin(9600); pinMode(ledpin,OUTPUT); } void loop() { flip=!flip; digitalWrite(ledpin,flip); Serial.println("Serial0"); delay(100); Serial1.println("Serial1"); delay(100); Serial2.println("Serial2"); delay(100); // delay in between reads for stability }

астер
Чт 13 июля 2017 г., 21:04
Мне не удалось извлечь из структуры порт, но это лучше, чем нет: #define ledpin 13 boolean flip=0; void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); Serial1.begin(9600); Serial2.begin(9600); pinMode(ledpin,OUTPUT); } void loop() { flip=!flip; digitalWrite(ledpin,flip); Serial.println("Serial0"); delay(100); Serial1.println("Serial1"); delay(100); Serial2.println("Serial2"); delay(100); // delay in between reads for stability }