Hallo Leute, ich bins wieder.
Hab diesmal ein Problem mit I²C. Ich versuche einen Bl-Ctrl 2.0 Regler
anzusprechen, es funktioniert jedoch nicht. Die Konfiguration der I²C
Schnittstelle sollte passen, der Programmcode ebenso. Pull - Ups sind
auch vorhanden. Hier mal die Konfiguration der I²C Schnittstelle:
1 | I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
|
2 | I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
|
3 | I2C_InitStructure.I2C_OwnAddress1 = 0x52;
|
4 | I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
|
5 | I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
|
6 | I2C_InitStructure.I2C_ClockSpeed = 400000;
|
7 |
|
8 | I2C_Init(I2C1, &I2C_InitStructure);
|
9 |
|
10 | /* I2C1 SDA and SCL configuration */
|
11 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
|
12 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
13 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
14 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
15 | I2C_Cmd(I2C1, ENABLE);
|
Und das ist der Programmcode (gleich mal sorry für die Länge, weis nicht
was davon relevant ist):
1 | Timeout = 0xFFFF;
|
2 |
|
3 | myprint2("\r\nEnter...");
|
4 | I2C_GenerateSTART(I2C1, ENABLE);
|
5 | myprint2("\r\nStart");
|
6 | while ((!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) && (!stop))
|
7 | {
|
8 | if(Timeout == 0)
|
9 | {
|
10 | lEvent = I2C_GetLastEvent(I2C1);
|
11 | myprint2("\r\n Error Occured: Code %u", lEvent);
|
12 | if(IS_I2C_EVENT(lEvent)){
|
13 | myprint2("\r\n Is I2C Event");
|
14 | }
|
15 |
|
16 | stop = 1;
|
17 | }
|
18 | Timeout--;
|
19 | }
|
20 | stop = 0;
|
21 | Timeout = 0xFFFF;
|
22 | myprint2("\r\nEvent 1");
|
23 | Delay_ms(20);
|
24 | I2C_Send7bitAddress(I2C1, 0x52, I2C_Direction_Transmitter);
|
25 |
|
26 | myprint2("\r\n7b Address");
|
27 | while ((!I2C_CheckEvent(I2C1,
|
28 | I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (!stop))
|
29 | {
|
30 | if(Timeout == 0)
|
31 | {
|
32 | lEvent = I2C_GetLastEvent(I2C1);
|
33 | myprint2("\r\n Error Occured: Code %u", lEvent);
|
34 | if(IS_I2C_EVENT(lEvent)){
|
35 | myprint2("\r\n Is I2C Event");
|
36 | }
|
37 |
|
38 | stop = 1;
|
39 | }
|
40 | Timeout--;
|
41 | }
|
42 | stop = 0;
|
43 | Timeout = 0xFFFF;
|
44 | myprint2("\r\nEvent 2");
|
45 | I2C_SendData(I2C1, 100);
|
46 | myprint2("\r\nSend Data");
|
47 | while ((!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (!stop))
|
48 | {
|
49 | if(Timeout == 0)
|
50 | {
|
51 | lEvent = I2C_GetLastEvent(I2C1);
|
52 | myprint2("\r\n Error Occured: Code %u", lEvent);
|
53 | if(IS_I2C_EVENT(lEvent)){
|
54 | myprint2("\r\n Is I2C Event");
|
55 | }
|
56 |
|
57 | stop = 1;
|
58 | }
|
59 | Timeout--;
|
60 | }
|
61 | stop = 0;
|
62 | Timeout = 0xFFFF;
|
63 | myprint2("\r\nEvent 3");
|
64 | I2C_GenerateSTOP(I2C1, ENABLE);
|
65 | myprint2("\r\nStop");
|
und die Ausgabe davon in Putty:
1 | Enter...
|
2 | Start
|
3 | Event 1
|
4 | 7b Address
|
5 | Error Occured: Code 536870944
|
6 | Event 2
|
7 | Send Data
|
8 | Error Occured: Code 536870944
|
9 | Event 3
|
10 | Stop
|
Ich sitze jetzt hier schon ein paar Stunden und versuche Das Problem zu
lösen. Ich hoffe ihr könnt mir helfen.
Danke schon im vorraus!
mfg,
TDK29