138 GPIO_InitTypeDef gpio = {0};
139 I2C_InitTypeDef i2c = {0};
140 NVIC_InitTypeDef nvic = {0};
142 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
143 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
145 gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
146 gpio.GPIO_Mode = GPIO_Mode_AF_OD;
147 gpio.GPIO_Speed = GPIO_Speed_30MHz;
148 GPIO_Init(GPIOC, &gpio);
153 i2c.I2C_Mode = I2C_Mode_I2C;
154 i2c.I2C_DutyCycle = I2C_DutyCycle_2;
156 i2c.I2C_OwnAddress1 = (uint16_t)((uint16_t)addr << 1);
157 i2c.I2C_Ack = I2C_Ack_Enable;
158 i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
159 I2C_Init(I2C1, &i2c);
161 I2C_AcknowledgeConfig(I2C1, ENABLE);
163 nvic.NVIC_IRQChannel = I2C1_EV_IRQn;
164 nvic.NVIC_IRQChannelPreemptionPriority = 1;
165 nvic.NVIC_IRQChannelSubPriority = 0;
166 nvic.NVIC_IRQChannelCmd = ENABLE;
169 nvic.NVIC_IRQChannel = I2C1_ER_IRQn;
170 nvic.NVIC_IRQChannelPreemptionPriority = 1;
171 nvic.NVIC_IRQChannelSubPriority = 1;
172 nvic.NVIC_IRQChannelCmd = ENABLE;
175 I2C_ITConfig(I2C1, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR, ENABLE);
176 I2C_Cmd(I2C1, ENABLE);
223 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_ADDR) != RESET) {
225 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_TRA) != RESET) {
239 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE) != RESET) {
244 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF) != RESET) {
246 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE) != RESET) {
251 I2C_Cmd(I2C1, ENABLE);
254 }
while (work != 0U);
276 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_AF) != RESET) {
277 I2C_ClearFlag(I2C1, I2C_FLAG_AF);
282 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_BERR) != RESET) {
284 I2C_ClearFlag(I2C1, I2C_FLAG_BERR);
290 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_OVR) != RESET) {
292 I2C_ClearFlag(I2C1, I2C_FLAG_OVR);
298 if (I2C_GetFlagStatus(I2C1, I2C_FLAG_ARLO) != RESET) {
300 I2C_ClearFlag(I2C1, I2C_FLAG_ARLO);