久芯网

stm32 SPI 关于NSS片选问题,小白求问

avatar GS_66 提问时间: 2023-07-19 13:59:23 / 未解决
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; //软控

如需获得 stm32 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

3个回答
  • avatar GS_66
    回答时间: 2023-07-19 14:19:53

  • avatar yklstudent
    回答时间: 2023-07-19 14:51:23

    直接参照官方给的demo写吧

  • avatar butterflyspring
    回答时间: 2023-07-19 15:10:03

    TEX 发送为空的标志位是表明发送寄存器为空,可以写进新的发送值,但这时之前的数据在总线的移位寄存器上,还没有完全发送出去,因为发送出去需要一定的时间。 因此,楼主可以改为判断BUSY的寄存器,保证总线发送完成后再拉高片选线。如手册中截图所描述。

会员中心 微信客服
客服
回到顶部