STM320F I2C RTC

OP #4626066
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 ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren