AnsweredAssumed Answered

SPI2 Not active

Question asked by lee.sc.001 on Nov 16, 2011
Latest reply on Nov 16, 2011 by lee.sc.001

#define SPI2_GPIO_CLK     RCC_APB2Periph_GPIOB
#define SPI2_PORT      GPIOB
#define SPI2_CLK                     RCC_APB1Periph_SPI2
#define SPI2_SCK_PIN               GPIO_Pin_13               
#define SPI2_MISO_PIN                GPIO_Pin_14               
#define SPI2_MOSI_PIN                GPIO_Pin_15               
#define SPI2_NSS_PIN                    GPIO_Pin_12               
#endif /* USE_SPI2 */
#define DUMMY_DATA      0x11
#define F_RAM_SPI_ID     SPI2_ID
#define F_RAM_PORT      SPI2_PORT
#define F_RAM_SCK_PIN     SPI2_SCK_PIN
#define F_RAM_MISO_PIN     SPI2_MISO_PIN                             
#define F_RAM_MOSI_PIN     SPI2_MOSI_PIN                             
#define F_RAM_NSS_PIN     SPI2_NSS_PIN     

#define __SPI_HW__ 1

void SPI_Low_DeInit(void)
{
 SPI_Cmd(SPI2,DISABLE);
 SPI_I2S_DeInit(SPI2);
}

 

 

void RCC_Configuration_SPI(void)
{
  /*!< F_RAM_SPI_CS_GPIO, F_RAM_SPI_MOSI_GPIO, F_RAM_SPI_MISO_GPIO
       and F_RAM_SPI_SCK_GPIO Periph clock enable */
#ifdef USE_SPI2
 RCC_APB2PeriphClockCmd(SPI2_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);
 RCC_APB1PeriphClockCmd(SPI2_CLK, ENABLE);
#endif

}

 

void GPIO_Configuration_SPI(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 
 
#ifdef USE_SPI2
 /*!< Configure F_RAM_SPI pins: SCK */
#ifdef __SPI_HW__
 GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN | SPI2_MOSI_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(SPI2_PORT, &GPIO_InitStructure);
#elif __SPI_SW__
 GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN | SPI2_MOSI_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(SPI2_PORT, &GPIO_InitStructure);
#endif /* __SPI_HW__ */

 GPIO_InitStructure.GPIO_Pin = SPI2_MISO_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(SPI2_PORT, &GPIO_InitStructure);
 
 /*!< Configure F_RAM_CS_PIN pin: F_RAM Card CS pin */
 GPIO_InitStructure.GPIO_Pin = SPI2_NSS_PIN;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(SPI2_PORT, &GPIO_InitStructure);
#endif /* USE_SPI2 */

}
void SPI_Configuration(void)
{
#ifdef __SPI_HW__
 SPI_InitTypeDef  SPI_InitStructure;
 
 /*!< Deselect the F-RAM: Chip Select high */
 //F_RAM_HOLD_HIGH();
 
 F_RAM_CS(Bit_SET);

#ifdef USE_SPI2
 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
#if 0
 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
#else
 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
#endif
 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
#if 0
 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
#else
 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
#endif
#if 0
 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
#else
 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
#endif
 SPI_InitStructure.SPI_CRCPolynomial = 7;

 SPI_Init(SPI2, &SPI_InitStructure);

 /*!< Enable the sFLASH_SPI  */
 SPI_Cmd(SPI2, ENABLE);
#endif /* USE_SPI2 */
#endif /* __SPI_HW__ */
}

 

 

void main(void)

{

 SPI_Low_DeInit();
 GPIO_Configuration_SPI();
 RCC_Configuration_SPI();

 SPI_Configuration();
}

 

u8 F_RAM_SendByte(u8 byte)
{
 u8 ret;

   /*!< Loop while DR register in not emplty */
   while (SPI_I2S_GetFlagStatus(F_RAM_SPI, SPI_I2S_FLAG_TXE) == RESET);

   /*!< Send byte through the SPI1 peripheral */
   SPI_I2S_SendData(F_RAM_SPI,(u16)byte);
 
 /*!< Wait to receive a byte */
 while (SPI_I2S_GetFlagStatus(F_RAM_SPI, SPI_I2S_FLAG_RXNE) == RESET);

 /*!< Return the byte read from the SPI bus */
 ret = (u8)SPI_I2S_ReceiveData(F_RAM_SPI);
 return ret;
}

===============================================================

Outcomes