Как правильно назначить пины для STM32
- Войдите на сайт для отправки комментариев
Пт, 10/04/2020 - 15:29
Всем привет! Столкнулся с, казалось бы, простой задачей, которая ввела меня в ступор... Пишу программу для STM32F103C8T6 в среде Arduino. Обычно пины я объявляю так:
int LED = PC13; void setup() { pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); }
Либо же объявляю пины через #define
Сейчас мне необходимо создать массив с указанием на пины для работы в цикле. Но как это правильно написать не пойму. Если написать вот так:
byte Variable1[4]; byte Variable2[4]; byte Variable3[4]; Variable1[0] = PA0; Variable2[0] = PA1; Variable3[0] = PA15; ... Variable1[3] = PB9; Variable2[3] = PB8; Variable3[3] = PB
То получаю ошибку "does not name a type":
Blink:5:1: error: 'Variable1' does not name a type Variable1[0] = PA0; ^ Blink:6:1: error: 'Variable2' does not name a type Variable2[0] = PA1; ^ Blink:7:1: error: 'Variable3' does not name a type Variable3[0] = PA15; ^ Blink:9:1: error: 'Variable1' does not name a type Variable1[3] = PB9; ^ Blink:10:1: error: 'Variable2' does not name a type Variable2[3] = PB8; ^ Blink:11:1: error: 'Variable3' does not name a type Variable3[3] = PB7; ^ exit status 1 'Variable1' does not name a type
Если же сразу задавать значение:
byte Variable1[0] = PA0; byte Variable2[0] = PA1; byte Variable3[0] = PA15; byte Variable1[3] = PB9; byte Variable2[3] = PB8; byte Variable3[3] = PB7;
То получаю сразу несколько ошибок: "error: array must be initialized with a brace-enclosed initializer" и "conflicting declaration"
Blink:1:21: error: array must be initialized with a brace-enclosed initializer byte Variable1[0] = PA0; ^ Blink:2:21: error: array must be initialized with a brace-enclosed initializer byte Variable2[0] = PA1; ^ Blink:3:21: error: array must be initialized with a brace-enclosed initializer byte Variable3[0] = PA15; ^ Blink:5:17: error: conflicting declaration 'byte Variable1 [3]' byte Variable1[3] = PB9; ^ Blink:1:6: error: 'Variable1' has a previous declaration as 'byte Variable1 [0]' byte Variable1[0] = PA0; ^ Blink:6:17: error: conflicting declaration 'byte Variable2 [3]' byte Variable2[3] = PB8; ^ Blink:2:6: error: 'Variable2' has a previous declaration as 'byte Variable2 [0]' byte Variable2[0] = PA1; ^ Blink:7:17: error: conflicting declaration 'byte Variable3 [3]' byte Variable3[3] = PB7; ^ Blink:3:6: error: 'Variable3' has a previous declaration as 'byte Variable3 [0]' byte Variable3[0] = PA15; ^ exit status 1 array must be initialized with a brace-enclosed initializer
Подскажите, как правильно это сделать?
byte
Variable1[] = {
PA0,
PB9, ...
};То получаю ошибку "does not name a type":
у вас проблема не с "пинами СТМ", а с тем что вы у вас неверная структура программы.
Судя по всему, процитированный выше код вы размещаете в глобальной области - то есть до любых процедур и функций? - по стандарту Си тут может размещаться только описание и (одновременная) инициализация переменных.
Строчка Variable1[0] = PA0; - это не то и не другое, в глобальной области ее размещать нельзя.
Сделайте либо так, как написал rkit. либо выполните присвоение элементов массива внутри какой-то функции. например setup
Из этих вариантов более короткий и правильный - вариант rkit. но и мой тоже иногда бывает полезным
Спасибо!