F1用的官方库,SPI实现单发送驱动LCD,NSS片选不等数据发完就拉高了 GPIO_ResetBits(SPI2PORT, SPI2_NSS); //片选拉低 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); //若发送寄存器数据未发送完,循环等待 SPI_I2S_SendData(SPI2, Byte); //往发送寄存器写入要发送的数据 // while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); //此句完全没用 GPIO_SetBits(SPI2PORT, SPI2_NSS); //片选拉高 配置的: SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; //SPI设置为单线发送模式 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //软控 |
直接参照官方给的demo写吧
TEX 发送为空的标志位是表明发送寄存器为空,可以写进新的发送值,但这时之前的数据在总线的移位寄存器上,还没有完全发送出去,因为发送出去需要一定的时间。 因此,楼主可以改为判断BUSY的寄存器,保证总线发送完成后再拉高片选线。如手册中截图所描述。