summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/i2cslave.c2
-rw-r--r--ports/stm32/i2cslave.h9
2 files changed, 10 insertions, 1 deletions
diff --git a/ports/stm32/i2cslave.c b/ports/stm32/i2cslave.c
index cacc00e0c..149e105ee 100644
--- a/ports/stm32/i2cslave.c
+++ b/ports/stm32/i2cslave.c
@@ -60,7 +60,7 @@ void i2c_slave_ev_irq_handler(i2c_slave_t *i2c) {
}
}
-#elif defined(STM32F7) || defined(STM32H7)
+#elif defined(STM32F7) || defined(STM32H7) || defined(STM32WB)
void i2c_slave_init_helper(i2c_slave_t *i2c, int addr) {
i2c->CR1 = I2C_CR1_STOPIE | I2C_CR1_ADDRIE | I2C_CR1_RXIE | I2C_CR1_TXIE;
diff --git a/ports/stm32/i2cslave.h b/ports/stm32/i2cslave.h
index 55882acd8..f335c9291 100644
--- a/ports/stm32/i2cslave.h
+++ b/ports/stm32/i2cslave.h
@@ -28,6 +28,11 @@
#include STM32_HAL_H
+#if !defined(I2C2_BASE)
+// This MCU doesn't have I2C2_BASE, define it so that the i2c_idx calculation works.
+#define I2C2_BASE (I2C1_BASE + ((I2C3_BASE - I2C1_BASE) / 2))
+#endif
+
typedef I2C_TypeDef i2c_slave_t;
void i2c_slave_init_helper(i2c_slave_t *i2c, int addr);
@@ -42,6 +47,10 @@ static inline void i2c_slave_init(i2c_slave_t *i2c, int irqn, int irq_pri, int a
RCC->APB1LENR |= 1 << (RCC_APB1LENR_I2C1EN_Pos + i2c_idx);
volatile uint32_t tmp = RCC->APB1LENR; // Delay after enabling clock
(void)tmp;
+ #elif defined(STM32WB)
+ RCC->APB1ENR1 |= 1 << (RCC_APB1ENR1_I2C1EN_Pos + i2c_idx);
+ volatile uint32_t tmp = RCC->APB1ENR1; // Delay after enabling clock
+ (void)tmp;
#endif
i2c_slave_init_helper(i2c, addr);