1 | void InitI2C(void)
|
2 | {
|
3 | RCC_AHBPeriphClockCmd (RCC_AHBPeriph_GPIOB, ENABLE);
|
4 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
|
5 |
|
6 | GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_1);
|
7 | GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_1);
|
8 |
|
9 |
|
10 | //Configure pins: SCL and SDA ------------------
|
11 | GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_6 | GPIO_Pin_7);
|
12 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
13 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
14 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
15 | GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
|
16 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
17 |
|
18 | I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
|
19 | I2C_InitStructure.I2C_OwnAddress1 = 0x00;
|
20 | I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
|
21 | I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
|
22 | //I2C_InitStructure.I2C_Timing = 0xA0120227;
|
23 | I2C_InitStructure.I2C_Timing = 0x20310A0D;
|
24 | I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
|
25 |
|
26 | I2C_Init(I2C1, &I2C_InitStructure);
|
27 |
|
28 | I2C_Cmd(I2C1, ENABLE);
|
29 | }
|
30 |
|
31 | uint8_t WRiteReg(uint8_t data,uint8_t RegAdd)
|
32 | {
|
33 |
|
34 | //while(I2C_GetFlagStatus(I2C1, I2C_ISR_BUSY) != RESET)
|
35 |
|
36 | I2C_GenerateSTART(I2C1, ENABLE);
|
37 |
|
38 | I2C_SendData(I2C1, 0xA2);
|
39 |
|
40 | I2C_SendData(I2C1, (uint8_t)RegAdd);
|
41 |
|
42 | //while(I2C_GetFlagStatus(I2C1, I2C_ISR_TC) == RESET)
|
43 |
|
44 | I2C_SendData(I2C1, (uint8_t)data);
|
45 |
|
46 | //while(I2C_GetFlagStatus(I2C1, I2C_ISR_TC) == RESET)
|
47 |
|
48 | I2C_GenerateSTOP(I2C1, ENABLE);
|
49 |
|
50 | //while(I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF));
|
51 |
|
52 | return SUCCESS;
|
53 | }
|