Forum: Mikrocontroller und Digitale Elektronik STM32F0 I2C Error


von Mach F. (machfax)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe einen STM32F0 und möchte von einem Board (Master) zu einem 
anderen Board (Slave) Daten senden, der Slave gibt aber keine Antwort 
und erhält auch keinen Interrupt, was ist da in der Initialisierung 
falsch? Die Routine
"void I2CSend(void)" wird nur beim Master ausgeführt:
1
void I2CInit(void)
2
{
3
  GPIO_InitTypeDef GPIO_InitStructure;
4
  I2C_InitTypeDef I2C_InitStructure;
5
  NVIC_InitTypeDef NVIC_InitStructure;
6
7
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);
8
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
9
10
  //RCC_APB1Periph_I2C2
11
  //RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK);
12
13
  GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_1);
14
  GPIO_PinAFConfig(GPIOF, GPIO_PinSource7, GPIO_AF_1);
15
16
  //Configure pins: SCL and SDA ------------------
17
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
18
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
19
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
20
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
21
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
22
  GPIO_Init(GPIOF, &GPIO_InitStructure);
23
24
  I2C_DeInit(I2C2);
25
  I2C_Cmd(I2C2, DISABLE);
26
  I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
27
  I2C_InitStructure.I2C_DigitalFilter = 0x05;
28
  I2C_InitStructure.I2C_OwnAddress1 = 0x30;//0x40;
29
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
30
  I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
31
  I2C_InitStructure.I2C_Timing =0x00805C87; //100KHz (see page 529 - table 73 in the manual reference)
32
  I2C_InitStructure.I2C_AcknowledgedAddress = 0x30;//I2C_AcknowledgedAddress_7bit;
33
  I2C_Init(I2C2, &I2C_InitStructure);
34
  
35
  I2C_AcknowledgeConfig(I2C2, ENABLE);
36
  
37
  I2C_Cmd(I2C2, ENABLE);
38
 
39
  I2C_ITConfig(I2C2, I2C_IT_RXI, ENABLE);
40
  I2C_ITConfig(I2C2, I2C_IT_TXI, ENABLE);
41
  I2C_ITConfig(I2C2, I2C_IT_TCI, ENABLE);
42
  
43
  NVIC_InitStructure.NVIC_IRQChannel = I2C2_IRQn;
44
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
45
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
46
  NVIC_Init(&NVIC_InitStructure);
47
}
48
49
void I2CSend(void)
50
{
51
    I2C_SlaveAddressConfig(I2C2, 0x30);
52
53
    I2C_GenerateSTART(I2C2, ENABLE);
54
    //I2C_MasterRequestConfig(I2C2, I2C_Direction_Transmitter);
55
    
56
    I2C_NumberOfBytesConfig(I2C2, 8);
57
    
58
    I2C_SendData(I2C2, 0x55);
59
    
60
    I2C_GenerateSTOP(I2C2, ENABLE);
61
}
Im Anhang das Oszi Bild wenn der Slave nicht angeschlossen ist, sobald 
der Slave angeschlossen ist bekomme ich kein ACK (Bild Slave an)

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.