Frage

Ich möchte Daten vom ADXL345 Accelerometer abrufen, scheint es aber fälschlicherweise verbinde.

SCL-PC6 (mit 10k Widerstand)

SDA-PC7 (mit 10K-Widerstand)

Sdo- gnd

CS - VCC

GND - GND

3,3 V - VCC

Hier ist mein Code zur Initalisierung:

void I2CG_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    I2C_InitTypeDef  I2C_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        // I2CG clock enable
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2CG, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_APB1Periph_I2CG, ENABLE);
    // GPIOB clock enable
    // I2CG SCL and SDA configuration
    GPIO_InitStructure.GPIO_Pin = SCL|SDA;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    // Enable I2CG reset state
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2CG, ENABLE);
       // Release I2CG from reset state
       RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2CG, DISABLE);
    I2C_DeInit(I2C1);
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;
    I2C_InitStructure.I2C_OwnAddress1 =  1;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = ClockSpeed;


    I2C_Init(I2CG, &I2C_InitStructure);
    I2C_Cmd(I2CG, ENABLE);
    I2C_AcknowledgeConfig(I2CG, ENABLE);
}

In einem Beispiel habe ich gesehen

GPIO_PinAFConfig(GPIOC,SCLSource,GPIO_AF_I2CG);

GPIO_PinAFConfig(GPIOC,SDASource,GPIO_AF_I2CG);

Aber ich habe diese API nicht zur Verfügung.

Bitte hilf mir. Ich habe viele Lösungen ausprobiert und versucht, mich über SPI zu verbinden, aber kein Erfolg :( Bitte helfen Sie mit I2C.

War es hilfreich?

Lösung

SCL-PC6 (mit 10k Widerstand)

SDA-PC7 (mit 10K-Widerstand)

SCL und SDA sollten direkt angeschlossen werden. Sie sollten Pull-up-Widerstände wie bei diesem Schema verwenden: http://en.wikipedia.org/wiki/file:i2c.svg

Ihr Initialisierungscode sieht in Ordnung aus, also ist Hardwarekabel falsch?

Andere Tipps

Mir ist klar, dass dies ein alter Beitrag ist, aber es lohnt sich, darauf hinzuweisen. Sie sollten keine APB -Flags verwenden, um den AHB -Bus zu konfigurieren. Überprüfen Sie das Programmiererhandbuch RM0008 (vorausgesetzt, Sie verwenden ein STM32F10X -Gerät) für die entsprechenden Einstellungen.

Ich hatte das gleiche Problem wie du. Die Startbedingung wurde generiert, aber das i2cx_sr1.sb -Bit wird nicht eingestellt. Ich dachte, ich musste die alternative I2C -Funktion aktivieren, aber ich musste auch alle anderen Funktionen im PIN deaktivieren. In meinem Fall war es UART3 -Funktion, die mit I2C widerspricht.

Es gibt Beispielcode- und App -Notizen für den STM32 von jemandem, der behauptet, I2C hier zum Laufen zu bringen:

http://www.stm32Challenge.com/node/143

Vielleicht versuchen Sie, etwas bekannt zu machen, wie ein serielles EEPROM funktioniert, bevor Sie den unbekannten Beschleunigungsmesser ausprobieren. Sobald Sie sicher sind, dass das Mikrocontroller -Ende funktioniert, können Sie den Beschleunigungsmesser anschließen und sehen, was Sie erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top