用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×î½ü½ÓÊܵÄÊý¾Ý
- }
复制代码
|