STM32F0 I2C Error

OP #3994301
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)
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.