Hallo, Ich bin neu hier und habe auch schon nach der Problemlösung hier im Forum gesucht aber leider nichts gefunden. Das Problem ist folgendes, ich benutze ein STR912F Board der Firma Hitex auf dem ein ARM9 Prozessor läuft, dieser hat zwei I2C Busse. Die µP Beinchen sind alle auf Pinleisten rausgeführt und ich habe die zwei Busse miteinander verbunden. Nun möchte ich eigentlich nicht viel mehr machen als Daten von dem einen Bus zum anderen schicken (dient nur als Test, in der Zukunft soll er einen DAC ansteuern der einen I2C Bus als Eingang besitzt). Dies funktioniert aber überhaupt nicht. Also Programmiersprache fungiert C und ich habe bisher folgendes: I2C_DeInit(I2C0); I2C_DeInit(I2C1); I2C_Cmd(I2C0, ENABLE); I2C_Cmd(I2C1, ENABLE); I2C_InitStructure.I2C_Ack = I2C_Ack_Disable; I2C_InitStructure.I2C_OwnAddress = 0x7F; I2C_InitStructure.I2C_GeneralCall = I2C_GeneralCall_Disable; I2C_InitStructure.I2C_CLKSpeed = 100000; I2C_Init(I2C0, &I2C_InitStructure); I2C_InitStructure.I2C_OwnAddress = 0x00; I2C_Init(I2C1, &I2C_InitStructure); I2C_GenerateStart(I2C0, ENABLE); I2C_GenerateStart(I2C1, ENABLE); I2C_Send7bitAddress(I2C0, 0x00, I2C_MODE_TRANSMITTER); I2C_SendData(I2C0, 0xFF); test = I2C_ReceiveData(I2C0); Delay(0x7FFFFF); test = I2C_ReceiveData(I2C0); Delay(0x7FFFFF); test = I2C_ReceiveData(I2C1); Wäre super wenn mal jemand von euch drüber schauen könnte, da ich langsam am verzweifeln bin... Vielen Dank schonmal im Voraus! Gruß Alex
Ist denn der eine als Master und der andere als Slave konfiguriert ?
Hallo Alex, auf dem Evalboard von Hitex ist auch Temperatursensor LM75 zum Test der I2C Funktion. Hier ein Beispiel zum auslesen der Temperatur (12bit): void I2C_Temp_Read_2Byte (u8 ADDRESS) { // wait for conversion u32 k = 0x00FFFFFF; while (k-->0); //I2C Interface ready? I2C_CheckEvent(I2C0, I2C_FLAG_BUSY ); //Start bit I2C_GenerateStart(I2C0, ENABLE); //Next check EV5: while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECT) ); //Send address I2C_Send7bitAddress(I2C0,ADDRESS,I2C_MODE_TRANSMITTER); //Next check EV6: while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECTED) ); //Write I2Cn_CR register TWICE with PE=1 I2C_Cmd (I2C0, ENABLE); //Next check EV8: while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //Send data Pointer Byte I2C_SendData(I2C0,0x00); //Next check EV8: while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //I2C Interface ready? I2C_CheckEvent(I2C0, I2C_FLAG_BUSY); // Start bit I2C_GenerateStart(I2C0, ENABLE); //Next check EV5: while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECT) ); //Send address I2C_Send7bitAddress(I2C0, ADDRESS, I2C_MODE_RECEIVER); //Next check EV6: while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_MODE_SELECTED) ); //Write I2Cn_CR register TWICE with PE=1 I2C_Cmd (I2C0, ENABLE); //Next check EV7 while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_RECEIVED)); //Read MSB Byte TEMP_HIGH_WERT = I2C_ReceiveData(I2C0); //Next check EV7 while(!I2C_CheckEvent(I2C0, I2C_EVENT_MASTER_BYTE_RECEIVED)); //Stop bit I2C_GenerateSTOP (I2C0, ENABLE); //Read LSB Byte TEMP_LOW_WERT = I2C_ReceiveData(I2C0); Wie sind denn Deine GPIO konfiguriert? SCU_APBPeriphClockConfig(__I2Cx ,ENABLE)? Schau mal noch im Support Forum bei STM vorbei: http://www.st.com/mcu/modules.php?name=Splatt_Forums Gruss Heiko
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.