+
+ i2c->hw = &i2c_stm32_hw[dev];
+ i2c->vt = &i2c_stm32_vt;
+
+ RCC->APB2ENR |= RCC_APB2_GPIOB;
+ RCC->APB1ENR |= i2c->hw->clk_i2c_en;
+
+ /* Set gpio to use I2C driver */
+ stm32_gpioPinConfig((struct stm32_gpio *)GPIOB_BASE, i2c->hw->pin_mask,
+ GPIO_MODE_AF_OD, GPIO_SPEED_50MHZ);
+
+ /* Clear all needed registers */
+ i2c->hw->base->CR1 = 0;
+ i2c->hw->base->CR2 = 0;
+ i2c->hw->base->CCR = 0;
+ i2c->hw->base->TRISE = 0;
+ i2c->hw->base->OAR1 = 0;
+
+ /* Set PCLK1 frequency accornding to the master clock settings. See stm32_clock.c */
+ i2c->hw->base->CR2 |= CR2_FREQ_36MHZ;
+
+ /* Configure spi in standard mode */
+ ASSERT2(clock >= 100000, "fast mode not supported");
+
+ i2c->hw->base->CCR |= (uint16_t)((CR2_FREQ_36MHZ * 1000000) / (clock << 1));
+ i2c->hw->base->TRISE |= (CR2_FREQ_36MHZ + 1);
+
+ i2c->hw->base->CR1 |= CR1_PE_SET;