راه اندازی I2S در stm32f103ret <br>دوتا مثال رو دیدم ولی جواب ندیدم
راه اندازی I2S در stm32f103ret <br>دوتا مثال رو دیدم ولی جواب ندیدم
داخل همون مثالی که میگید STM32F10x_StdPeriph_Examples\I2S\SPI_I2S_Switch
اومده یه i2s slave و master تعریف کرده و از مستر میفرسته برای slave .
مشکل کجاست؟
خوب من همون مثال رو انجام دادم و سخت افزارم هم بستم ولی هیچی ارسال نمیکنه واقعا احتیاج به کمک دارم خواهشا جواب بدید و
سیم از پین مستر به سلیو کشیدم جواب نگرفتم
بعداشم من در نهایت میخوام یک سخت افزاری که دارم max9860 که خروجی دیجیتال صوت رو بصورت i2s میفرسته رو بخونم که پالس دارم از سخت افزارم ولی هیچی نمیخونه این میکرو در زمینه stm هم تازه واردم خواهشا جواب بدید وقت هم ندارم حتی حاضرم اگر آمزشگاهی جایی باشه که بدونید با این روش کار کردن و تسلط دارن برم در عرض این هفته
خواهشا جواب بدید اینجوری سر سری نه خیلی مطالعه و تلاش کردو
پین هاش که نبایدد pull up pull down بشه؟
و به پایه mclk احتیاج داره.شما تو زمینه arm stm وواردید؟
من تا حالا باi2s کار نکردم
یه نگاهی به دیتاشیت max9860 انداختم . ریجستر برای تنظیم زیاد داره و قبل از اینکه دیتا رو بگیرید باید اونها رو تنظیم کنید
شما Stm رو باید در مد slave قرار بدید مد 16 بیتی و طبق استاندارد فیلیپس. وقتی Slave دستگاه کار میکنه احتیاجی به mck ندارید.پینی هم نباید پول اپ بشه .
کد باید همچین چیزی باشه. CPOL باید طبق ABCI تعریف بشه.
خود max هم در مد مستر و تنظیمات صدا و Add متناسب.مخصوصا در ریجیستر صفحه 19 دیتاشیت دقت کنید .
کد:/* I2S peripheral configuration */ I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable; I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_48k; I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; /* I2S2 configuration */ I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveRx; I2S_Init(SPI2, &I2S_InitStructure); /* Enable the I2S2 */ I2S_Cmd(SPI2, ENABLE); /* Wait the Rx buffer to be full */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {} /* Store the I2S2 received data in the relative data table */ I2S2_Buffer_Rx[RxIdx++] = SPI_I2S_ReceiveData(SPI2);
خیلی ممنون از راهنمایی اتون کدی که گذاشتید من نوشتم جواب نگرفتم ولی الان من میکرومو از max9860 جدا کردم I2S3 رو به I2S2 وصل کردم هیچی دریافت ندارم ببخشید من میتونم ایمیلتون رو داشته باشتم تا سریعتر به جواب برسم ممنون
پروژه رو اپلود کنید تا چکش کنم.احتمالا gpio تنظیم نشده
من این کد رو مینویسم و مد GPIO را AF_PP قرار میدم پالسی که از max9860 میاد رو صفر میکنه و پالس من از دست میرهvoid I2S_Configuration(void){
I2S_InitTypeDef I2S_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphResetCmd(RCC_APB2Periph_GPIOB |RCC_APB1Periph_SPI2, ENABLE);
/* Configure SPI2 pins: CK, WS and SD ---------------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* I2S peripheral configuration */
I2S_InitStructure.I2S_Mode=I2S_Mode_SlaveRx;
I2S_InitStructure.I2S_Standard =I2S_Standard_Phillips ;
I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_48k;
I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
I2S_Init(SPI2, &I2S_InitStructure);
/* Enable the I2S2 RxNE interrupt */
SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE);
/* Enable the I2S2 */
I2S_Cmd(SPI2, ENABLE);
}
لطفا پاسخ گو باشید
این dma چیه برای این پورت تعریف کرده تو دیتا شیت اش؟