STM32F407, I2S3 I2C3'ü bozuyor.

Başlatan isoment01, 18 Mayıs 2020, 14:28:19

isoment01

Arkadaşlar şöyle bir kodum var elimde.
MX_GPIO_Init();
  MX_DMA_Init();
  MX_I2S3_Init();
  MX_CAN1_Init();
  MX_I2C3_Init();
  /* USER CODE BEGIN 2 */
  USER_CAN_FilterConfig();
  USER_CAN_Start();
  DEVICE_TAS1_Init(hi2c3,DEVICE_TAS1);
  DEVICE_TAS2_Init(hi2c3,DEVICE_TAS2);
  PCT2075GVX_Init(&hi2c3, DEVICE_PTC);
burası initialize kısmı ve hepsi başarılı i2c de bir problem olmuyor. Daha sonra ana döngüde
EngineSoundPlayer();
adında bir fonksiyon koşturuyorum.
Bu fonksiyon bir array olan sound sample örneğini
HAL_I2S_Transmit_DMA(&hi2s3, SoundPack, SIZE);
DMA üzerinden gönderiyor ve hoparlörlerde ses alıyorum. DMA fonksiyonundan sonra can hattından gelen bilgiye göre
if(SimRxData.SpeakerModeSelect== FRONT_REAR)
		{
			SetVolumeFR(TempVolume); //WARNING: CHECK MAX VAL. for 
		}
		else if(SimRxData.SpeakerModeSelect== RIGHT_LEFT)
		{
			SetVolumeRL(TempVolume);
		}
I2C üzerinden ses ayarlamalarını yapıyorum. Tam bu noktada dma fonksiyonundan sonra ı2c hattında hat busy hatası alıyorum.. sebebi ne olabilir. ?
-HAL_I2S_Transmit_DMA fonksiyonunu commentleyip çalıştırırsam i2c de bir hata almıyorum.
- Hatayı bir kaç tur sonra veriyor. İlk ses ayarlamasını yapıyor sistem.

isoment01

#1
Pull up lari internal kullandim. VDD 3.3V olmasina rağmen sda gerilimi 2.9V civari sanki akım çeken birşey var. SDA SCK da bir kisa devre saptamadim.



I2C SDA hattinin I2S transmit dma fonksiyonundan önceki ve sonraki goruntuleri ekran gorüntülerinde mevcut. Biraz parazit biniyor ama çok sıkıntı olacağını düşünmüyorum. Siz ne dersiniz ?

isoment01

Sorun çözüldü. I2C hattındaki pull up direncinin yeterli olmamasindan kaynakli bir sorunmuş. Herzaman hattin VDD ye tam çekilip çekilmediğini kontrol etmek gerek. Fakat i2s dma yi kapattigimda neden bu sorunu almadigimi çozebilmis degilim.