Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103 и I2S
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
zemlemer
Добрый день.

Возникла следующая проблема: I2S в режиме slave не работает.
Вроде пишу все по правилам:


CODE

I2S_InitTypeDef I2S_InitStructure;
#define I2S_CODEC SPI2

// 1. Clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

// 2. Pins
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15; // wclk | bclk | sd
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

// 4. I2S setup
SPI_I2S_DeInit(I2S_CODEC);
I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveRx; //I2S_Mode_SlaveTx;
I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; // I2S_DataFormat_16bextended
I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_Default;
I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
I2S_Init(I2S_CODEC, &I2S_InitStructure);
I2S_Cmd(I2S_CODEC, ENABLE);

setTerminalMessage(info, "Starting test DAC");
SPI_I2S_ReceiveData(I2S_CODEC);

for(;;) {
setTerminalMessage(info, "Tp0");
while (SPI_I2S_GetFlagStatus(I2S_CODEC, SPI_I2S_FLAG_RXNE) == RESET);
setTerminalMessage(info, "Tp1");
setTerminalMessage(info, "Data received - %04x", SPI_I2S_ReceiveData(I2S_CODEC));
}


Программа взвисает на приеме: SPI_I2S_FLAG_RXNE не выставляется.
При этом кодек испавно подает WCLK и BCLK и выглядят они как phillips прописал: ровно 16 BCLK на каждый перепад WCLK.
Никто с подобным не сталкивался?
Genadi Zawidowski
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
DrGluck
APB1_peripheral

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.