void TM_I2C_Init(I2C_TypeDef* I2Cx, TM_I2C_PinsPack_t pinspack, uint32_t clockSpeed) { I2C_InitTypeDef I2C_InitStruct; I2C_InitStruct.I2C_ClockSpeed = clockSpeed; #ifdef I2C1 if (I2Cx == I2C1) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); TM_I2C1_InitPins(pinspack); I2C_InitStruct.I2C_AcknowledgedAddress = TM_I2C1_ACKNOWLEDGED_ADDRESS; I2C_InitStruct.I2C_Mode = TM_I2C1_MODE; I2C_InitStruct.I2C_OwnAddress1 = TM_I2C1_OWN_ADDRESS; I2C_InitStruct.I2C_Ack = TM_I2C1_ACK; I2C_InitStruct.I2C_DutyCycle = TM_I2C1_DUTY_CYCLE; } #endif #ifdef I2C2 if (I2Cx == I2C2) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE); TM_I2C2_InitPins(pinspack); I2C_InitStruct.I2C_AcknowledgedAddress = TM_I2C2_ACKNOWLEDGED_ADDRESS; I2C_InitStruct.I2C_Mode = TM_I2C2_MODE; I2C_InitStruct.I2C_OwnAddress1 = TM_I2C2_OWN_ADDRESS; I2C_InitStruct.I2C_Ack = TM_I2C2_ACK; I2C_InitStruct.I2C_DutyCycle = TM_I2C2_DUTY_CYCLE; } #endif #ifdef I2C3 if (I2Cx == I2C3) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C3, ENABLE); TM_I2C3_InitPins(pinspack); I2C_InitStruct.I2C_AcknowledgedAddress = TM_I2C3_ACKNOWLEDGED_ADDRESS; I2C_InitStruct.I2C_Mode = TM_I2C3_MODE; I2C_InitStruct.I2C_OwnAddress1 = TM_I2C3_OWN_ADDRESS; I2C_InitStruct.I2C_Ack = TM_I2C3_ACK; I2C_InitStruct.I2C_DutyCycle = TM_I2C3_DUTY_CYCLE; } #endif I2C_Init(I2Cx, &I2C_InitStruct); I2C_Cmd(I2Cx, ENABLE); }
void TM_I2C_Init(I2C_TypeDef* I2Cx, TM_I2C_PinsPack_t pinspack, uint32_t clockSpeed) { I2C_InitTypeDef I2C_InitStruct; /* Set default I2C GPIO settings */ GPIO_I2C_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_I2C_InitStruct.GPIO_OType = GPIO_OType_OD; GPIO_I2C_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_I2C_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; if (I2Cx == I2C1) { /* Enable clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); /* Enable pins */ TM_I2C1_InitPins(pinspack); /* Check clock */ if (clockSpeed < TM_I2C_INT_Clocks[0]) { TM_I2C_INT_Clocks[0] = clockSpeed; } /* Set values */ I2C_InitStruct.I2C_ClockSpeed = TM_I2C_INT_Clocks[0]; I2C_InitStruct.I2C_AcknowledgedAddress = TM_I2C1_ACKNOWLEDGED_ADDRESS; I2C_InitStruct.I2C_Mode = TM_I2C1_MODE; I2C_InitStruct.I2C_OwnAddress1 = TM_I2C1_OWN_ADDRESS; I2C_InitStruct.I2C_Ack = TM_I2C1_ACK; I2C_InitStruct.I2C_DutyCycle = TM_I2C1_DUTY_CYCLE; } else if (I2Cx == I2C2) { /* Enable clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE); /* Enable pins */ TM_I2C2_InitPins(pinspack); /* Check clock */ if (clockSpeed < TM_I2C_INT_Clocks[1]) { TM_I2C_INT_Clocks[1] = clockSpeed; } /* Set values */ I2C_InitStruct.I2C_ClockSpeed = TM_I2C_INT_Clocks[1]; I2C_InitStruct.I2C_AcknowledgedAddress = TM_I2C2_ACKNOWLEDGED_ADDRESS; I2C_InitStruct.I2C_Mode = TM_I2C2_MODE; I2C_InitStruct.I2C_OwnAddress1 = TM_I2C2_OWN_ADDRESS; I2C_InitStruct.I2C_Ack = TM_I2C2_ACK; I2C_InitStruct.I2C_DutyCycle = TM_I2C2_DUTY_CYCLE; } else if (I2Cx == I2C3) { /* Enable clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C3, ENABLE); /* Enable pins */ TM_I2C3_InitPins(pinspack); /* Check clock */ if (clockSpeed < TM_I2C_INT_Clocks[2]) { TM_I2C_INT_Clocks[2] = clockSpeed; } /* Set values */ I2C_InitStruct.I2C_ClockSpeed = TM_I2C_INT_Clocks[2]; I2C_InitStruct.I2C_AcknowledgedAddress = TM_I2C3_ACKNOWLEDGED_ADDRESS; I2C_InitStruct.I2C_Mode = TM_I2C3_MODE; I2C_InitStruct.I2C_OwnAddress1 = TM_I2C3_OWN_ADDRESS; I2C_InitStruct.I2C_Ack = TM_I2C3_ACK; I2C_InitStruct.I2C_DutyCycle = TM_I2C3_DUTY_CYCLE; } /* Disable I2C first */ I2C_Cmd(I2Cx, DISABLE); /* Initialize I2C */ I2C_Init(I2Cx, &I2C_InitStruct); /* Enable I2C */ I2C_Cmd(I2Cx, ENABLE); }