Forum: Mikrocontroller und Digitale Elektronik STM320F I2C RTC


von Jan H. (janiiix3)


Lesenswert?

Guten Abend,


da ich ein Quereinsteiger bin (AVR8 zu STM32), habe ich direkt mal eine 
Frage an euch STM32 Spezis.

An einem AVR konnte ich meine RTC (CLK_Out auf 1Hz schalten) erfolgreich 
in Betrieb nehmen via. I2C.

Nun bekomme ich das mit dem STM320F noch nicht hin.
Hier ist mein Code.
Angeschlossen habe ich SDA an PB7 und SCL an PB6.

Was mache ich falsch?
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
}

Danke schon mal im vorraus ;)

von Jan H. (janiiix3)


Lesenswert?

Habe es zum laufen bekommen.

von Dirk K. (dekoepi)


Lesenswert?

Wo war denn dein Fehler?  Löse doch mal auf, mit lauffähigen Funktionen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.