Question

Je veux obtenir des données de l'accéléromètre ADXL345, mais il semble que je me connecte de manière incorrecte, il.

Scl-PC6 (avec résistance 10k)

SDA PC7 (avec résistance de 10k)

SDO GND

CS - CCV

GND - GND

3.3v - CCV

Voici mon code à initialiser:

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);
}

Dans un exemple, j'ai vu

GPIO_PinAFConfig(GPIOC,SCLSource,GPIO_AF_I2CG);

GPIO_PinAFConfig(GPIOC,SDASource,GPIO_AF_I2CG);

Mais je n'ai pas cette API disponible.

S'il vous plaît aidez-moi. J'ai essayé beaucoup de solutions et a également essayé de se connecter via SPI, mais sans succès :( S'il vous plaît aide I2C.

Était-ce utile?

La solution

Scl-PC6 (avec résistance 10k)

SDA PC7 (avec résistance de 10k)

SCL et SDA doivent être connectés directement. Vous devez utiliser des résistances pull-up comme sur ce schéma: http://en.wikipedia.org /wiki/File:I2C.svg

Votre code d'initialisation semble correct, peut-être le câblage du matériel est erroné?

Autres conseils

Je sais que c'est un ancien poste mais il est intéressant de souligner. Vous ne devriez pas utiliser des drapeaux pour configurer le APB bus AHB. Vérifiez les programmeurs RM0008 manuel (en supposant que vous utilisez un dispositif de STM32F10x) pour les réglages appropriés.

J'ai eu le même problème que vous. La condition de démarrage a été généré, mais le bit I2Cx_SR1.SB ne soit pas défini. Je pensais que je devais activer la fonction alternative I2C, mais je devais désactiver la goupille toutes les autres fonctions aussi. Dans mon cas, il était en conflit avec la fonction UART3 I2C.

par une personne qui prétend avoir obtenu I2C travailler ici Il y a des exemples de code et notes app pour le STM32:

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

Peut-être essayer d'obtenir quelque chose de connu comme un travail EEPROM série avant d'essayer l'accéléromètre inconnu. Une fois que vous êtes sûr la fin du microcontrôleur fonctionne, vous pouvez connecter l'accéléromètre et de voir ce que vous obtenez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top