Пытаюсь настроить SPI в режиме Slave. Пересылки идут пачками по 16 бит.
Настройки SPI:
Код: Выделить всё
GPIO_Init_TypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
/* A2 - TXD */
GPIO_InitStruct.GPIO_AltFunc = GPIO_AltFunc_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AltFunc;
GPIO_InitStruct.GPIO_Out = GPIO_Out_En;
GPIO_InitStruct.GPIO_Dir = GPIO_Dir_Out;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(NT_GPIOA, &GPIO_InitStruct);
/* Перенастройка PB0-PB2 для последующей нормальной настройки SPI1 (errarta п.6) */
GPIO_InitStruct.GPIO_AltFunc = GPIO_AltFunc_3;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_Init(NT_GPIOB, &GPIO_InitStruct);
/* E8 - FSS */
/* E9 - CLK */
GPIO_InitStruct.GPIO_AltFunc = GPIO_AltFunc_3;
GPIO_InitStruct.GPIO_Out = GPIO_Out_Dis;
GPIO_InitStruct.GPIO_Dir = GPIO_Dir_In;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_Init(NT_GPIOE, &GPIO_InitStruct);
/* G2 - RXD */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(NT_GPIOG, &GPIO_InitStruct);
/* Обратное подключение JTAG */
GPIO_InitStruct.GPIO_AltFunc = GPIO_AltFunc_1;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_Init(NT_GPIOB, &GPIO_InitStruct);
/* Настройка SPI */
NT_SPI_TypeDef *spi = NT_SPI1;
SPI_DeInit(spi);
RCC_SPIClkSel(spi, RCC_SPIClk_SYSCLK);
RCC_SPIClkDivConfig(spi, 2, ENABLE);
RCC_SPIClkCmd(spi, ENABLE);
SPI_Init_TypeDef SPI_InitStruct;
SPI_StructInit(&SPI_InitStruct);
SPI_InitStruct.SPI_CPSDVSR = 2;
SPI_InitStruct.SPI_SCR = 0;
SPI_InitStruct.SPI_Mode = SPI_ModeSlave;
SPI_InitStruct.SPI_SPH = SPI_SPH_1Edge;
SPI_InitStruct.SPI_SPO = SPI_SPO_Low;
SPI_InitStruct.SPI_WordLength = SPI_WordLength16b;
SPI_InitStruct.SPI_FRF = SPI_FRF_SPI_Motorola;
SPI_InitStruct.SPI_TX_Slave = SPI_TX_Slave_Disable;
SPI_Init(spi, &SPI_InitStruct);
SPI_Cmd(spi, ENABLE);
Подскажите, пожалуйста, в чём может быть проблема и как её исправить?
- Диаграмма работы SPI | Показать
- Драйвер SPI | Показать