关于STM32的SPI单线只发送模式SPI_Direction_1Line_Tx

最近用硬件SPI来驱动TFTLCD屏幕,平常用SPI都是双向传输,实际上硬件SPI是支持单线只发送模式的。直接将SPI发送模式配置为SPI_Direction_1Line_Tx。然后修改SPI的发送函数为以下,发现并不能直接使用。

void SPI2_WR_Byte(u8 data)
{
    while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==0){;} //等待发送完成
    SPI2->DR = data;

}

然后在网上查找相关硬件SPI单线只发送模式,有人说在SPI写入DR寄存器后还是会有两个APB1的时钟周期,那我等待忙BSY位为0时在发送第二个数据可以吗。

while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空  
SPI2->DR=TxData; //通过外设SPIx发送一个byte  数据 while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_BSY)== SET){}

还是不行。因为想到双线的时候需要读接收标志位。加上一个读接收标志位的操作试试看。

void SPI2_WR_Byte(u8 TxData)
{
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空  
    SPI2->DR=TxData; //通过外设SPIx发送一个byte  数据
    SPI2->SR&=(1<<0);
    while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_BSY)== SET){}
}

唉,果然LCD就可以电亮了。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值