STM32duino & SPI
Подсоедините датчик к отладочной плате по следующей схеме:
VCC 5V
GND GND
SCL(SCK) PA5
SDA(MOSI) PA7
CSB(CS) PA4
SDO(MISO) PA6

Теперь откроем тестовый скетч:
Нажмите «Файл», затем «Примеры > Adafruit BMP280 Library > bmp280test».
Чтобы выбрать интерфейс SPI и настроить использование правильных ножек микроконтроллера, найдите следующие строки:
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
и приведите их к виду:
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS PA4
//Adafruit_BMP280 bmp; // I2C
Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
Мы готовы загружать скетч! Нажмите кнопку «загрузить», дождитесь окончания компиляции и загрузки, откройте Монитор порта. В нем вы должны увидеть примерно следующее:
Temperature = 24.08 *C
Pressure = 99341.86 Pa
Approx altitude = 166.43 m
Если датчик не присылает данные, или присылает явно не корректные - например, показывает высоту 3 км, или температуру воздуха -30 *С, попробуйте предпринять следующие шаги:
Вызовите из setup() функцию SPI.setClockDivider(divider):
Serial.begin(9600);
Serial.println(F("BMP280 test"));
SPI.setClockDivider(SPI_CLOCK_DIV16); // нужная функция
//if (!bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID)) {
if (!bmp.begin()) {
Иногда предыдущий совет не приносит результата, в этом случае можно попробовать изменить параметры компиляции скетча:
Нажмите «Инструменты > Optimize: ... > Debug (-g)»
Если и это не помогает - хреново, чо.
Last updated