any_014 发表于 2015-11-27 16:03:57

将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]
查看完整版本: 将SPI发送函数放到for循环里程序就出问题。