STM32的SPI启动不了,苦呀……

2019-12-20 21:41发布

  1. //------------------------------SPI2------------------------------
  2.         
  3.     SPI_Cmd(SPI2, DISABLE);                                            //必须先禁能,才能改变MODE
  4.     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //两线全双工
  5.     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;            //主
  6.     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;       //8bit
  7.     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;              //时钟悬空为低
  8.     SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;            //数据捕获于第1个时钟沿
  9.     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;               
  10.     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;//主频64分步
  11.     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;      ////高位在前
  12.     SPI_InitStructure.SPI_CRCPolynomial = 7;
  13.     SPI_Init(SPI2,&SPI_InitStructure);

  14.     SPI_Cmd(SPI2,ENABLE);
复制代码
  1. unsigned char SPI_WriteByte(unsigned char data)
  2. {
  3.     unsigned char Data = 0;
  4.    
  5.     //Wait until the transmit buffer is empty
  6.     while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
  7.     // Send the byte
  8.     SPI_I2S_SendData(SPI2,data);
  9.    
  10.     //Wait until a data is received
  11.     while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
  12.     // Get the received data
  13.     Data = SPI_I2S_ReceiveData(SPI2);
  14.    
  15.     // Return the shifted data
  16.     return Data;
  17. }
复制代码
  1.     GPIO_InitStructure.GPIO_Pin = SPI2_CS_PIN | SPI2_SCK_PIN | SPI2_MISO_PIN | SPI2_MOSI_PIN;
  2.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  3.     GPIO_Init(GPIOB, &GPIO_InitStructure);
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。