1 | // I2C1 configuration-----------------------------------------------------
|
2 |
|
3 | I2C_DeInit(I2C1);
|
4 | I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
|
5 | I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
|
6 | I2C_InitStructure.I2C_OwnAddress1 = I2C1_SLAVE_ADDRESS7;
|
7 | I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
|
8 | I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
|
9 | I2C_InitStructure.I2C_ClockSpeed = 100000; //ClockSpeed;
|
10 | I2C_Init(I2C1, &I2C_InitStructure);
|
11 |
|
12 | //Remap I2C1
|
13 | // GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
|
14 |
|
15 | // Configure I2C1 pins: SCL and SDA
|
16 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
|
17 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
18 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
|
19 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
20 |
|
21 | I2C_Cmd(I2C1, ENABLE);
|
22 |
|
23 | while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
|
24 | // I2C_AcknowledgeConfig(I2C1, ENABLE);
|
25 |
|
26 | // Kompassmodul auslesen
|
27 |
|
28 | while(1)
|
29 | {
|
30 | I2C_GenerateSTART(I2C1, ENABLE);
|
31 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
|
32 |
|
33 | I2C_Send7bitAddress(I2C1, 0xC0, I2C_Direction_Transmitter);
|
34 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
|
35 |
|
36 | I2C_SendData(I2C1, 0x02); //Register 2 ; Auflösung 0-3599
|
37 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
|
38 |
|
39 | I2C_GenerateSTART(I2C1, ENABLE);
|
40 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
|
41 |
|
42 | I2C_Send7bitAddress(I2C1, 0xC1, I2C_Direction_Receiver);
|
43 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); //keine Rückgabe von ADDR von Kompassmodul???
|
44 |
|
45 | posHB = I2C_ReceiveData(I2C1);
|
46 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
|
47 |
|
48 | posLB = I2C_ReceiveData(I2C1);
|
49 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
|
50 |
|
51 | I2C_GenerateSTOP(I2C1, ENABLE);
|
52 |
|
53 | pos_ist = (((uint16)posHB) << 8 | posLB);
|
54 | }
|