1 | int main( void )
|
2 | {
|
3 | char zahl[3];
|
4 | GPIO_InitTypeDef GPIO_InitStructure;
|
5 | I2C_InitTypeDef I2C_InitStructure;
|
6 |
|
7 | u8 address=0xA6;
|
8 | int i=0;
|
9 |
|
10 | SystemInit(); // Taktet Cortex auf 72MHz
|
11 |
|
12 | gdm_Init(DSP_VERTICAL); // Initialisiert Touchscreen (DSP_VERTICAL -> richtige Drehung für Touchscreen
|
13 | sprintf(zahl, "%d", data1);
|
14 | gdmgraphics_print(zahl, 10, 10, BLACK, WHITE, FONT_7x11);
|
15 |
|
16 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); //Takt für I2C1 Schnittstelle aktivieren
|
17 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
|
18 |
|
19 |
|
20 | GPIO_StructInit(&GPIO_InitStructure);
|
21 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //Konfigurieren der Ausgabepins, haben aber anscheinend nix mit der I2C Schnittstelle zu tun, weil das ganz andere Pins sind
|
22 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Taktgeschwindigkeit festliegen
|
23 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //Output open Drain konfigurieren
|
24 |
|
25 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
26 |
|
27 |
|
28 | I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; //Sendet nach erhalt eines Datenbytes oder der eigenen Adresse ein ACK
|
29 | I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //legt die Bitlänge der eigenen Adresse im Slave-Mode fest
|
30 | I2C_InitStructure.I2C_ClockSpeed = 100000;
|
31 | I2C_InitStructure.I2C_OwnAddress1 = 0x00; //Festlegen der Taktgeschwindigkeit in Hz
|
32 | I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; //legt das Verhältnis von low zu high ab 100kHz fest (=2/1)
|
33 | I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
|
34 | I2C_Init(I2C1, &I2C_InitStructure);
|
35 |
|
36 | I2C_Cmd(I2C1, ENABLE);
|
37 |
|
38 | gdmgraphics_print("Generate Start", 10, 40, BLACK, WHITE, FONT_7x11);
|
39 |
|
40 | I2C_GenerateSTART(I2C1, ENABLE); //Startbedingung erzeugen bei senden
|
41 | while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
|
42 |
|
43 | gdmgraphics_print("After Start", 10, 50, BLACK, WHITE, FONT_7x11); //Diese Zeile wird noch ausgegeben
|
44 |
|
45 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //in dieser Schleife bleibt das Programm haengen
|
46 |
|
47 | gdmgraphics_print("After Checkevent", 10, 60, BLACK, WHITE, FONT_7x11);
|
48 |
|
49 | I2C_Send7bitAddress(I2C1, 0xA6, I2C_Direction_Transmitter);
|
50 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
|
51 | gdmgraphics_print(zahl, 10, 70, BLACK, WHITE, FONT_7x11);
|
52 | I2C_SendData(I2C1,DATAX0);
|
53 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
|
54 | gdmgraphics_print(zahl, 10, 80, BLACK, WHITE, FONT_7x11);
|
55 | I2C_GenerateSTART(I2C1,ENABLE);
|
56 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
|
57 | I2C_Send7bitAddress(I2C1, ACC_R, I2C_Direction_Receiver);
|
58 | while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
|
59 | while(1);
|
60 | }
|