将SPI发送函数放到for循环里程序就出问题。
用STM32的SPI和一个芯片通信,发现从设备的片选信号总是导通很短的时间,然后才有SCLK脉冲。后发现,SPI发送函数不放在for循环里就没事。
unsigned char SPI_Read(unsigned char slaveDeviceId,
unsigned char* data,
unsigned char bytesNumber)
{
u8 i;
u8 retry = 0;
while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET) //µÈ´ý·¢ËÍÈ¥¿Õ
{
retry++;
if(retry > 200)
return 0;
}
for(i = 0; i < bytesNumber; i++)
{
SPI_I2S_SendData(SPI3, *data); //ͨ¹ýÍâÉèSPIx·¢ËÍÒ»¸öÊý¾Ý
retry = 0;
while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET) //µÈ´ý½ÓÊÕÍêÒ»¸öbyte
{
retry++;
if(retry > 200)
return 0;
}
}
*data = SPI_I2S_ReceiveData(SPI3); //·µ»ØÍ¨¹ýSPIx×î½ü½ÓÊܵÄÊý¾Ý
}
页:
[1]