
![]() ![]() 上面是lmh6401的spi波形图 spi读取id失败,大家帮忙分析下问题: 下面是关键的源码: //初始化 void SPI_FLASH_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable SPI1 and GPIO clocks */ /*!< SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO, SPI_FLASH_SPI_MISO_GPIO, SPI_FLASH_SPI_DETECT_GPIO and SPI_FLASH_SPI_SCK_GPIO Periph clock enable */ /*!< SPI_FLASH_SPI Periph clock enable */ macSPI_APBxClock_FUN ( macSPI_CLK, ENABLE ); /*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin */ macSPI_CS_APBxClock_FUN ( macSPI_CS_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macSPI_CS_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(macSPI_CS_PORT, &GPIO_InitStructure); /*!< Configure SPI_FLASH_SPI pins: SCK */ macSPI_SCK_APBxClock_FUN ( macSPI_SCK_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macSPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(macSPI_SCK_PORT, &GPIO_InitStructure); /*!< Configure SPI_FLASH_SPI pins: MISO */ macSPI_MISO_APBxClock_FUN ( macSPI_MISO_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macSPI_MISO_PIN; GPIO_Init(macSPI_MISO_PORT, &GPIO_InitStructure); /*!< Configure SPI_FLASH_SPI pins: MOSI */ macSPI_MOSI_APBxClock_FUN ( macSPI_MOSI_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = macSPI_MOSI_PIN; GPIO_Init(macSPI_MOSI_PORT, &GPIO_InitStructure); /* Deselect the FLASH: Chip Select high */ macSPI_FLASH_CS_DISABLE(); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;//128 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7;//7 SPI_Init(macSPIx , &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(macSPIx , ENABLE); } //主函数循环读取id . . . . while(1) { macSPI_FLASH_CS_ENABLE(); Delay( 1 ); while (SPI_I2S_GetFlagStatus(macSPIx , SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(macSPIx , 0x0); while (SPI_I2S_GetFlagStatus(macSPIx , SPI_I2S_FLAG_RXNE) == RESET); DeviceID=SPI_I2S_ReceiveData(SPI1); Delay(1); macSPI_FLASH_CS_DISABLE(); } spi波形图如下: 四线已经在图中标注,发送0x00,典型值应为0x30,但sdo毫无反应,无论发什么都是这样. ![]() |
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI1);
sdi ,sdo 引脚都配置了 sdi 发送的0x00 所以一直是低电平,sdo没有返回