因為你沒有放上SD_SPI_ReadWriteByte函式主體,我參考網路上的大概是這樣
u8 SD_SPI_ReadWriteByte(u8 data)
{
#ifdef STM32F407
return SPI1_ReadWriteByte(data);
#endif
}
uint8_t SPI1_ReadWriteByte(uint8_t data)
{
#ifdef STM32F407
SPI1->DR = data; // write data to be transmitted to the SPI data register
while( !(SPI1->SR & SPI_I2S_FLAG_TXE) ); // wait until transmit complete
while( !(SPI1->SR & SPI_I2S_FLAG_RXNE) ); // wait until receive complete
while( SPI1->SR & SPI_I2S_FLAG_BSY ); // wait until SPI is not busy anymore
return SPI1->DR; // return received data from SPI data register
#endif
}
不難看出收發是都要使用到這個函數,而您的例子而言,SD_Wait_Ready函數只是用來釋放MOSI或者MISO,對於發送或者接收都只有一條會工作,另一條閒置,所以只要確定是釋放狀態即可
而SD_SendCmd函數,則是要去接收Slave回傳的響應值並作分析,跟上例目的就不同,上例只有釋放/非釋放的情況
以上供參考