用的芯片
STM32F103C8T6,3天了一直没读出正确的数据,终于发现是被延迟了一个发送周期;
/* SPI1 configura
tion */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI1设置为两线全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI1为主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI 发送接收16 位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行时钟在不操作时,时钟为高电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //第二个时钟沿开始采样数据
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS 信号由软件(使用SSI 位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 定义波特率预分频的值:波特率预分频值为8
//注意
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB 位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC 值计算的多项式
SPI_Init(SPI1, SPI_InitStructure);
/* Enable SPI1 */
SPI_Cmd(SPI1, ENABLE); //使能SPI1 外设
/////////////////////////////////////////////////////////////////////////////////////
下面是上图的发送代码
GPIO_ResetBits(NCS_GPIO_PORT,NCS_PIN); //片选低
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x50);//写
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
t = SPI_I2S_ReceiveData(SPI1);
cnt = 0x150;//37us
while(cnt--);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xff);//读
while ((SPI1->SR SPI_I2S_FLAG_RXNE) == RESET);
t = SPI_I2S_ReceiveData(SPI1);
while ((SPI1->SR SPI_I2S_FLAG_TXE) == RESET);
SPI1->DR = t;
while ((SPI1->SR SPI_I2S_FLAG_RXNE) == RESET);
t = SPI1->DR;
while ((SPI1->SR SPI_I2S_FLAG_TXE) == RESET);
SPI1->DR = t;
while ((SPI1->SR SPI_I2S_FLAG_RXNE) == RESET);
t = SPI1->DR;
0