#include void initI2C(I2C_TypeDef* i2cx , uint32_t speed, uint16_t own_address) { GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; // Enable GPIOB clocks RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // Configure I2C clock and GPIO GPIO_StructInit (& GPIO_InitStructure); if (i2cx == I2C1){ // I2C1 clock enable RCC_APB1PeriphClockCmd (RCC_APB1Periph_I2C1 , ENABLE); // I2C1 SDA and SCL configuration GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD ; GPIO_Init(GPIOB, &GPIO_InitStructure ); // I2C1 Reset RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); } else { // I2C2 ... } // I2C configuration I2C_StructInit(&I2C_InitStructure); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = own_address; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = speed; I2C_Init(i2cx, &I2C_InitStructure); I2C_Cmd(i2cx, ENABLE); } //uint8_t pingI2C (I2C_TypeDef* i2cx, uint8_t SlaveAddress) //{ // __IO uint32_t Timeout = 0; // Timed ( I2C_GetFlagStatus (I2Cx , I2C_FLAG_BUSY )); // // Intiate Start Sequence // I2C_GenerateSTART (I2Cx , ENABLE ); // Timed (! I2C_CheckEvent (I2Cx , I2C_EVENT_MASTER_MODE_SELECT)); // // Send Address EV5 // I2C_Send7bitAddress (I2Cx , SlaveAddress, I2C_Direction_Transmitter); // Timed (! I2C_CheckEvent (I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // return 0; //}