Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: alper0017 - 16 Ocak 2013, 15:05:53

Başlık: Stm32f4discovery Keil I2C Sorunu
Gönderen: alper0017 - 16 Ocak 2013, 15:05:53
Herkese yeniden merhaba.Sayfada stm32f4 adına birçok örnek var fakat herhangi birisinde i2c kullanımı ile ilgili örnek bulamadım.I2C1 PB6/PB7 pinlerini set ederek okuma ve yazma fonksiyonlarını paylaşabilecek bir yardımsever varmıdır acaba forumda? :)
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: M_B - 16 Ocak 2013, 16:05:20
Merhaba
http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4discovery_fw.zip (http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4discovery_fw.zip)

firmware dosyasını indirip inceleyin. İcinde i2c ile ilgili ornek ve kutuphanesi var
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: alper0017 - 16 Ocak 2013, 21:04:21
Her stm kullanıcısı olarak bu dosya elimde mevcut.Fakat malesef içersinde i2c örneği yok.Baya bi aradım.Belkide bulamadım.Bulan olursa veya siz bulursanız lütfen nerde olduğunuda söylermisiniz?
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: M_B - 17 Ocak 2013, 08:20:08
firmware icerisindeki Libraries klasoru icindeki  src klasoru icerisinde  ilgili kutuphane mevcut. ( stm32f4xx_i2c )
Kutuphane icerisinde nasıl kullanacağı hakkında bilgi mevcut.

Ornek olarak :
http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_i2c_cpal.zip (http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_i2c_cpal.zip)
yalnız bunu F4 uyarlaman gerekecek.
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: alper0017 - 22 Ocak 2013, 13:49:43
Bu kodları yazıp denedim fakat.Program hala   while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); kısmında takılıyor.0x0F adresinden veri okurken sorun olmuyor fakat 0x20 adresinden 1 kere veri okuduktan sonra program o satırda takılıyor.Sensorü söküp çıkarınca bidefa daha okuyor ve yine tıkanıyor.Neyi atlıyorum hala anlayamadım.

   /*  I2C1  */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource6, GPIO_AF_I2C1);
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource7, GPIO_AF_I2C1);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_Init(GPIOB, &GPIO_InitStructure);



I2C_DeInit(I2C1);
   
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
    I2C_init.I2C_Mode = I2C_Mode_I2C;
    I2C_init.I2C_ClockSpeed = 100000;
    I2C_init.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_init.I2C_OwnAddress1 = 0;
    I2C_init.I2C_Ack = I2C_Ack_Enable;
    I2C_init.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
     I2C_Cmd(I2C1,ENABLE);
    I2C_Init(I2C1,&I2C_init);

   unsigned short int I2C1_read(uint8_t adress, uint8_t index)
   {
   uint8_t data;
   while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
    I2C_GenerateSTART(I2C1, ENABLE);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
    I2C_Send7bitAddress(I2C1, adress, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
    I2C_SendData(I2C1, index);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    I2C_GenerateSTART(I2C1, ENABLE);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
    I2C_Send7bitAddress(I2C1, adress, I2C_Direction_Receiver);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
    data=I2C_ReceiveData(I2C1);
    I2C_GenerateSTOP(I2C1, ENABLE);
      return data;
   }

    void I2C1_write(uint8_t adress, uint8_t * data) {
    uint8_t i=0;
    while (i < 7)
      {
        while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
        I2C_GenerateSTART(I2C1, ENABLE);
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
        I2C_Send7bitAddress(I2C1, adress, I2C_Direction_Transmitter);
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
        I2C_SendData(I2C1, data);
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
        I2C_SendData(I2C1,i + 1);
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
        I2C_GenerateSTOP(I2C2, ENABLE);
        i+=2;
    }
    }

int main(void)
{
   uint8_t timer_value,flag=0,i=0;
   char buffer[8];
   uint8_t deger;
   
   I2C1_Initialize();
  while (1)
  {
      deger=I2C2_read(0x3C,0x20);
      sprintf(buffer,"%d",deger);
      USART3_Write_Text(buffer);
      USART3_Write_Text("\n\r");
   }
}
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: z - 20 Ocak 2014, 03:10:39
Ne yaptin cozdun mu sorunu?

STM32F407 de I2C donanimina deli oldum. I2C yazilimini bu sekilde degil de register erisimi ile kendim yazdim.

TCM8240MD cipi ile hic sorunsuz konusabiliyorken 24LC64 de sorun yasiyorum. Eepromun herhangi bir adresine yazip tekrardan okuyabiliyorum sorun yok.

Fakat pes pese bir kac adrese yazmaya kalksam Start ardindan gonderdigim komuta ACK gelmemeye basliyor. Sorun 24LC64 demi yoksa yazilimimda mi anlayamadim. Elimde de baska 24LC64 vs yok.

Sorunu cozduyseniz ne yaptiginizi bilmek isterim.
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: z - 20 Ocak 2014, 04:20:14
Sorunu buldum.

I2C kameraya ulasirken elbette her sey gulluk gulustanlik olacak. E2ROM da yazma islemi istegi gonderildikten hemen sonra al sunu da su adrese yaz dendiginde e2rom o anda yazmakla mesgul olacagi icin yeni isteklere ack ile cevap vermez.

Mevcut yazilimim ise ACK beklemekte. Haliyle asla ACK gelmez.

Bu durumda iletisim hattini stop edip e2roma yeni bastan yazma isteginde bulunmak lazim.

Kodlarimi henuz degistirmedim ama tum olay bundan ibaret. e2romun yazma islemi icin zamana ihtiyaci oldugu tamamen aklimdan cikip gitmis.
Başlık: Ynt: Stm32f4discovery Keil I2C Sorunu
Gönderen: muhittin_kaplan - 19 Mayıs 2014, 00:16:12
Hocam Burayı Biraz Açıklarmısınız, Problemin Çözümü Nedir ?