From 6bb28e239f6424a9470fdb30729d2c9e8ab49058 Mon Sep 17 00:00:00 2001 From: lewisxhe Date: Sun, 15 Sep 2024 00:31:40 +0800 Subject: [PATCH] Compatible with STM32, only compatible with compilation, not tested --- src/SensorBHI260AP.hpp | 2 +- src/SensorBMM150.hpp | 2 +- src/SensorCommon.tpp | 37 +++++---------------------- src/SensorLib.h | 37 +++++++++++++++++---------- src/bosch/common/bosch_interfaces.cpp | 13 +++++++--- 5 files changed, 42 insertions(+), 49 deletions(-) diff --git a/src/SensorBHI260AP.hpp b/src/SensorBHI260AP.hpp index 2622160..aac5a7a 100644 --- a/src/SensorBHI260AP.hpp +++ b/src/SensorBHI260AP.hpp @@ -787,7 +787,7 @@ class SensorBHI260AP if (__handler.irq != SENSOR_PIN_NONE) { #if defined(ARDUINO_ARCH_RP2040) attachInterrupt((pin_size_t)(__handler.irq), handleISR, (PinStatus )RISING); -#elif defined(NRF52840_XXAA) || defined(NRF52832_XXAA) || defined(ESP32) || defined(ARDUINO_ARCH_ESP32) +#elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_STM32) attachInterrupt(__handler.irq, handleISR, RISING); #else #error "Interrupt registration not implemented" diff --git a/src/SensorBMM150.hpp b/src/SensorBMM150.hpp index 3de7fc9..fa08e62 100644 --- a/src/SensorBMM150.hpp +++ b/src/SensorBMM150.hpp @@ -316,7 +316,7 @@ class SensorBMM150 */ #if defined(ARDUINO_ARCH_RP2040) attachInterrupt((pin_size_t)(__handler.irq), handleISR, (PinStatus )RISING); -#elif defined(NRF52840_XXAA) || defined(NRF52832_XXAA) || defined(ESP32) || defined(ARDUINO_ARCH_ESP32) +#elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_STM32) attachInterrupt(__handler.irq, handleISR, RISING); #else #error "Interrupt registration not implemented" diff --git a/src/SensorCommon.tpp b/src/SensorCommon.tpp index 805a102..5bdf63d 100644 --- a/src/SensorCommon.tpp +++ b/src/SensorCommon.tpp @@ -75,7 +75,7 @@ public: __wire = &w; __sda = sda; __scl = scl; -#if defined(NRF52840_XXAA) || defined(NRF52832_XXAA) +#if defined(ARDUINO_ARCH_NRF52) if (__sda != 0xFF && __scl != 0xFF) { __wire->setPins(__sda, __scl); } @@ -115,13 +115,18 @@ public: return false; } if (mosi != -1 && miso != -1 && sck != -1) { -#if defined(NRF52840_XXAA) || defined(NRF52832_XXAA) +#if defined(ARDUINO_ARCH_NRF52) __spi->begin(); #elif defined(ARDUINO_ARCH_RP2040) __spi->setSCK(sck); __spi->setRX(miso); __spi->setTX(mosi); __spi->begin(); +#elif defined(ARDUINO_ARCH_STM32) + __spi->setSCLK(sck); + __spi->setMISO(miso); + __spi->setMOSI(mosi); + __spi->begin(); #else __spi->begin(sck, miso, mosi); #endif @@ -660,34 +665,6 @@ protected: */ protected: -// bool begin() -// { -// #if defined(ARDUINO) -// if (__has_init) return thisChip().initImpl(); -// __has_init = true; - -// if (__wire) { -// log_i("SDA:%d SCL:%d", __sda, __scl); -// #if defined(NRF52840_XXAA) || defined(NRF52832_XXAA) -// __wire->begin(); -// #elif defined(ARDUINO_ARCH_RP2040) -// __wire->end(); -// __wire->setSDA(__sda); -// __wire->setSCL(__scl); -// __wire->begin(); -// #else -// __wire->begin(__sda, __scl); -// #endif -// } -// if (__spi) { -// // int cs, int mosi = -1, int miso = -1, int sck = -1, SPIClass &spi = SPI -// begin(__cs, __mosi, __miso, __sck, *__spi); -// } - -// #endif /*ARDUINO*/ -// return thisChip().initImpl(); -// } - void end() { #if defined(ARDUINO) diff --git a/src/SensorLib.h b/src/SensorLib.h index 63c30f1..c3bb954 100644 --- a/src/SensorLib.h +++ b/src/SensorLib.h @@ -60,24 +60,31 @@ #if defined(ARDUINO_ARCH_RP2040) #define PLATFORM_SPI_TYPE SPIClassRP2040 #define PLATFORM_WIRE_TYPE TwoWire -#define SPI_DATA_ORDER SPI_MSB_FIRST -#define DEFAULT_SDA (0xFF) -#define DEFAULT_SCL (0xFF) -#define DEFAULT_SPISETTING SPISettings() -#elif defined(NRF52840_XXAA) || defined(NRF52832_XXAA) +#define SPI_DATA_ORDER SPI_MSB_FIRST +#define DEFAULT_SDA (0xFF) +#define DEFAULT_SCL (0xFF) +#define DEFAULT_SPISETTING SPISettings() +#elif defined(ARDUINO_ARCH_STM32) #define PLATFORM_SPI_TYPE SPIClass #define PLATFORM_WIRE_TYPE TwoWire -#define SPI_DATA_ORDER MSBFIRST -#define DEFAULT_SDA (0xFF) -#define DEFAULT_SCL (0xFF) -#define DEFAULT_SPISETTING SPISettings() +#define SPI_DATA_ORDER MSBFIRST +#define DEFAULT_SDA (0xFF) +#define DEFAULT_SCL (0xFF) +#define DEFAULT_SPISETTING SPISettings() +#elif defined(ARDUINO_ARCH_NRF52) +#define PLATFORM_SPI_TYPE SPIClass +#define PLATFORM_WIRE_TYPE TwoWire +#define SPI_DATA_ORDER MSBFIRST +#define DEFAULT_SDA (0xFF) +#define DEFAULT_SCL (0xFF) +#define DEFAULT_SPISETTING SPISettings() #else #define PLATFORM_SPI_TYPE SPIClass #define PLATFORM_WIRE_TYPE TwoWire -#define SPI_DATA_ORDER SPI_MSBFIRST -#define DEFAULT_SDA (SDA) -#define DEFAULT_SCL (SCL) -#define DEFAULT_SPISETTING SPISettings(__freq, __dataOrder, __dataMode); +#define SPI_DATA_ORDER SPI_MSBFIRST +#define DEFAULT_SDA (SDA) +#define DEFAULT_SCL (SCL) +#define DEFAULT_SPISETTING SPISettings(__freq, __dataOrder, __dataMode); #endif #elif defined(ESP_PLATFORM) @@ -89,6 +96,10 @@ #endif +#ifndef I2C_BUFFER_LENGTH +#define I2C_BUFFER_LENGTH (32) +#endif + enum SensorLibInterface { SENSORLIB_SPI_INTERFACE = 1, SENSORLIB_I2C_INTERFACE diff --git a/src/bosch/common/bosch_interfaces.cpp b/src/bosch/common/bosch_interfaces.cpp index f0a12cd..1dab7bc 100644 --- a/src/bosch/common/bosch_interfaces.cpp +++ b/src/bosch/common/bosch_interfaces.cpp @@ -56,7 +56,7 @@ bool SensorInterfaces::setup_interfaces(SensorLibConfigure config) config.u.i2c_dev.wire->begin(); #elif defined(NRF52840_XXAA) || defined(NRF52832_XXAA) config.u.i2c_dev.wire->end(); - config.u.i2c_dev.wire->setPins(config.u.i2c_dev.sda,config.u.i2c_dev.scl); + config.u.i2c_dev.wire->setPins(config.u.i2c_dev.sda, config.u.i2c_dev.scl); config.u.i2c_dev.wire->begin(); #else config.u.i2c_dev.wire->begin(config.u.i2c_dev.sda, config.u.i2c_dev.scl); @@ -74,11 +74,16 @@ bool SensorInterfaces::setup_interfaces(SensorLibConfigure config) config.u.spi_dev.spi->setRX(config.u.spi_dev.miso); config.u.spi_dev.spi->setTX(config.u.spi_dev.mosi); config.u.spi_dev.spi->begin(); -#elif defined(NRF52840_XXAA) || defined(NRF52832_XXAA) - config.u.spi_dev.spi->setPins(config.u.spi_dev.miso,config.u.spi_dev.sck, config.u.spi_dev.mosi); +#elif defined(ARDUINO_ARCH_NRF52) + config.u.spi_dev.spi->setPins(config.u.spi_dev.miso, config.u.spi_dev.sck, config.u.spi_dev.mosi); + config.u.spi_dev.spi->begin(); +#elif defined(ARDUINO_ARCH_STM32) + config.u.spi_dev.spi->setSCLK(config.u.spi_dev.sck); + config.u.spi_dev.spi->setMISO(config.u.spi_dev.miso); + config.u.spi_dev.spi->setMOSI(config.u.spi_dev.mosi); config.u.spi_dev.spi->begin(); #else - config.u.spi_dev.spi->begin(config.u.spi_dev.sck, config.u.spi_dev.miso, config.u.spi_dev.mosi); +config.u.spi_dev.spi->begin(config.u.spi_dev.sck, config.u.spi_dev.miso, config.u.spi_dev.mosi); #endif break; default: