huahuagg 发表于 2024-7-20 15:09

SPI的DC和CS讲解

先看一段代码

void ST7735_Reset(void)
{
HAL_GPIO_WritePin(ST7735_RST_GPIO_Port, ST7735_RST_Pin, GPIO_PIN_RESET);
HAL_Delay(100);
HAL_GPIO_WritePin(ST7735_RST_GPIO_Port, ST7735_RST_Pin, GPIO_PIN_SET);
HAL_Delay(100);
}

void ST7735_WriteCommand(uint8_t cmd)
{
HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);
       
//HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, &cmd, 1, HAL_MAX_DELAY);
        ST7735_SPI_SendByte(cmd);

HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
}

void ST7735_WriteByte(uint8_t data)
{
HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);

//HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, &data, 1, HAL_MAX_DELAY);
        ST7735_SPI_SendByte(data);
       
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
}

void ST7735_WriteData(uint8_t *data, size_t data_size)
{
HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);       
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);
       
//HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, data, data_size, HAL_MAX_DELAY);
       
        for(int i=0;i<data_size;i++) ST7735_SPI_SendByte(*(data+i));
       
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
}
注意到这里面多次出现的DC和CS。
CS是片选,拉低有效,在操作时候先拉低。操作结束在拉高。
DC呢,就是数据与命令选择的意思,注意D和C,Data;C,Command
DC对应高低电平
当DC为高电平时候表示当前发送数据(D)
当DC为低电平时候表示当前发送命令(C)
这么一说是不是很容易理解了。

mintspring 发表于 2024-7-21 20:17

那么发送数据该用哪个函数呢

dongnanxibei 发表于 2024-7-24 21:59

看着像32的代码。

LEDyyds 发表于 2024-7-25 10:27

有DC这玩意吗,只听过CS

小明的同学 发表于 2024-7-27 17:22

CS其实直接拉低就行了,根本不用浪费一个IO。

小明的同学 发表于 2024-7-27 17:22

DC就是切换数据和指令的

小明的同学 发表于 2024-7-27 17:23

所以我有个建议,就是可以给CS一个预留直接拉低的选项。
放给0电阻位置到地。
页: [1]
查看完整版本: SPI的DC和CS讲解