I2C на STM32F103C8T6

Финголин
Ср 17 мая 2017 г. 13:49
Привет,
В настоящее время я работаю над проектом Чтокоптера. Я начал это с доски Arduino, но с момента более высокой скорости я перешел на эту доску.
Мне удалось поднять наброски, и все, кажется, пока работает довольно солидно.
Теперь я хочу импортировать свой эскиз на эту доску, начиная с IMU (6050), который контролируется i2c.
Я использовал это https: // Разработчик.Mbed.org/users/hudakz ... 8t6_hello/ В качестве ссылки для разгонов.
Там я получил первые проблемы:
- Есть два порта i2c1? Работа с первым (PB_9 и 8) была довольно медленной.
Почему это? : D И как мне использовать I2C в Generall на этом устройстве (скажем, если я хочу использовать 3 порта)
-Могу ли я использовать I2C так же, как и на доске Arduino, или я должен рассмотреть определенные вещи?

Спасибо за вашу поддержку!

ZMEMW16
Ср 17 мая 2017 г. 14:25
Это Arduino_stm32
Полезная информация о вики http: // wiki.STM32duino.com/index.PHP?title = main_page
Mbed != Arduino_stm32; более правильно imho mbed <<<<< Arduino_stm32
Скорость, понятия не имею, кроме, может быть, mbed
кстати
PB6 PB7 - i2c1.
PB8 PB9 - i2c2.
SRP

Финголин
Ср 17 мая 2017 г. 14:39
Спасибо за быстрый ответ и разъяснение, я не знал об этом : D
Я нажму Thorugh The Wiki и, возможно, вернусь с еще несколькими вопросами : D

Финголин
Солнце 21 мая 2017 г. 14:48
Это может быть действительно глупый вопрос, но кто -нибудь может сказать мне, где провод.H для STM32 находится?

ZMEMW16
Солнце 21 мая 2017 г. 15:01
~/sketchbook/hardware/Arduino_STM32/STM32F1/libraries/Wire

AG123
Солнце 21 мая 2017 г. 15:33
Не знакомый с mbed, но я думаю, что Mbed - это просто еще одна реализация Arduino Like ', только эта рука управляет и делает это, вероятно, несколько иначе
казалось, что mbed -gundles re rtos
https: // github.com/armmbed/mbed-os
Взгляните на коды API, я думаю, что это, вероятно, не совместимо с Arduino '
Я не слишком уверен, можно ли просто построить MBBE, используя инструмент Arm-GCC. Видимо, mbed readme конкретно утверждает Начало работы для разработчиков
Вам нужен MBed CLI для построения MBED OS. Для получения более подробной информации прочитайте справочник MBED OS.
Есть некоторые конкретные упоминания о «прошивке MBED»
https: // Разработчик.Mbed.org/cookbook/ecl ... -отладка
Я не слишком уверен, что это означает, что определенные вещи будут распространяться только как бинарные капли на устройствах

Rogerclark
Солнце 21 мая 2017 г. 22:33
По умолчанию I2C управляется «программным обеспечением», а скорость - не менее 100 тыс

Аппаратное обеспечение i2c теперь должно работать нормально, и будет быстрее, но вам нужно будет создать экземпляр класса Adwarmware i2c, чтобы использовать его.

Поиск на форуме, есть много сообщений об использовании оборудования i2c


Примечание. Причина, по которой я не переключился на ядро, по умолчанию, заключается в том, что скорости программного обеспечения I2C достаточно для большинства людей, и я думаю, что, по крайней мере, эквивалентна платам AVR.

Программное обеспечение I2C может работать на любом PIN -код.

Программное обеспечение I2C было протестировано и используется множеством людей и стабильно.


Аппаратное обеспечение i2c теперь работает, но не тестируется.

Финголин
Пн 22 мая 2017 г. 9:41
Спасибо за всю вашу поддержку, оказалось, что i2c не работает для меня, так как мои кабели были сломаны : oops: .
У меня есть еще один вопрос: возможно ли, что преобразование из байтов в Float/int отличается на плате STM?
Это код, о котором я говорю: //Reading Raw: Wire.beginTransmission(this->Adress); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(); Wire.requestFrom(this->Adress,14); // request a total of 14 registers this->x_accel=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) this->y_accel=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) this->z_accel=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) Serial.print(" ax: "); Serial.print(this->x_accel); Serial.print(" ay: "); Serial.print(this->y_accel); Serial.print(" az: "); Serial.print(this->z_accel); this->x_accel=(float)this->x_accel*this->AccelMultipl/32767*this->correction[0] + this->bias[0]; this->y_accel=(float)this->y_accel*this->AccelMultipl/32767*this->correction[1] + this->bias[1]; this->z_accel=(float)this->z_accel*this->AccelMultipl/32767*this->correction[2] + this->bias[2];

Rogerclark
Пн 22 мая 2017 г. 10:05
Какие типы данных вы используете для хранения начальных значений x y и z?

Тип данных «int» на STM32 составляет 32 бита, но на AVR его только 16 бит

Таким образом, ваша математика, которая имеет значение 32768, не будет работать на STM32, если вы не измените тип данных ваших значений x Y и z struct на 16 -битные, а не 32 -битные.

Попробуйте использовать

int16_t

как тип данных в этой структуре

Финголин
Пн 22 мая 2017 г., 10:21
Ах, я вижу!
РЕДАКТИРОВАТЬ: Нашел обходной путь, большое спасибо вам! Воул взял меня с возрастом, чтобы найти все это : D

Финголин
Вторник 23 мая 2017 г. 14:48
Программное обеспечение I2C может работать на любом PIN -код. Как изменить булавки, используемые стандартной библиотекой проводов?

Финголин
Ср 24 мая 2017 г. 9:49
Может кто -нибудь мне помочь? Я не могу заставить i2c работать над Pins PB4 и PB5 (SCL, SDA).
Я пытался: Wire=TwoWire(PB5,PB4); this->Adress=Adress; Wire.begin(); Wire.beginTransmission(Adress); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(); Wire.beginTransmission(Adress); Wire.write(0x1A); // CONFIG register byte val=B00000110; // Wire.write(val); // Set the LowPassFilter Wire.endTransmission();

Стивестронг
Ср 24 мая 2017 г. 13:16
Будьте осторожны, PB4 может быть альтернативно зарезервирован интерфейсом SWD, когда вы загружаете через серийный (PA9/10) или Stlink или любое отладочное зонд.
Только загрузка загрузчика STM32Duino, PB4 может использоваться в качестве GPIO, и, следовательно, для i2c тоже тоже.
В противном случае вы должны вручную редактировать доски.txt и удалить "-dconfig_maple_mini_no_disable_debug = 1" из соответствующих строк.
Поиск на форуме для PB4...

Финголин
Ср 24 мая 2017 г. 13:27
ОА, спасибо!
Я только что нашел это ViewTopic.PHP?f = 3&t = 2084&P = 27945&hilit = pb4#p27945
и линия отключена, что линия (); решает мою проблему!
Черт, спасибо!!

STM32F103CB Dual SPI

Другой общий STM32F103RBT6