GD32F330 硬件SPI CS过短问题

1. CS过短导致写SPI出现问题
  spi_i2s_data_transmit(SPI1, byte);
  while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));

LCD_CS是用户软件控制的芯片使能脚。
实际发送了1.5bit后,SPI_FLAG_TBE已置位。因此判断SPI_FLAG_TBE会导致 LCD_CS过短。

在这里插入图片描述

2. 改善
  while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));
  spi_i2s_data_transmit(SPI1, byte);
  while(SET == spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS)); //加此行,改善

在这里插入图片描述

3. 完整代码
void SPI1_SendByte(uint8_t byte)
{   
  while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));
  spi_i2s_data_transmit(SPI1, byte);
  while(SET == spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS));
}

uint8_t SPI1_ReadByte(uint8_t byte)
{  
  while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));
  spi_i2s_data_transmit(SPI1, byte);
  while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_RBNE));
  return (uint8_t)spi_i2s_data_receive(SPI1);
}

void SPI1_SendBytes(const uint8_t *buf, uint16_t length)
{
  uint16_t i;
  
  for(i=0;i<length;i++)
  {
    while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));
    spi_i2s_data_transmit(SPI1, buf[i]);
  }  
  while(SET == spi_i2s_flag_get(SPI1, SPI_FLAG_TRANS));
}

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...