[学习资料] SPI的DC和CS讲解

[复制链接]
2203|6
 楼主| huahuagg 发表于 2024-7-20 15:09 | 显示全部楼层 |阅读模式
CS, spi, pi, dc
先看一段代码

  1. void ST7735_Reset(void)
  2. {
  3.   HAL_GPIO_WritePin(ST7735_RST_GPIO_Port, ST7735_RST_Pin, GPIO_PIN_RESET);
  4.   HAL_Delay(100);
  5.   HAL_GPIO_WritePin(ST7735_RST_GPIO_Port, ST7735_RST_Pin, GPIO_PIN_SET);
  6.   HAL_Delay(100);
  7. }

  8. void ST7735_WriteCommand(uint8_t cmd)
  9. {
  10.   HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET);
  11.   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);
  12.        
  13. //  HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, &cmd, 1, HAL_MAX_DELAY);
  14.         ST7735_SPI_SendByte(cmd);

  15.   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
  16. }

  17. void ST7735_WriteByte(uint8_t data)
  18. {
  19.   HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);
  20.   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);

  21. //  HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, &data, 1, HAL_MAX_DELAY);
  22.         ST7735_SPI_SendByte(data);
  23.        
  24.   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
  25. }

  26. void ST7735_WriteData(uint8_t *data, size_t data_size)
  27. {
  28.   HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);       
  29.   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);
  30.        
  31. //  HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, data, data_size, HAL_MAX_DELAY);
  32.        
  33.         for(int i=0;i<data_size;i++) ST7735_SPI_SendByte(*(data+i));
  34.        
  35.   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
  36. }
注意到这里面多次出现的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电阻位置到地。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

159

主题

1430

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部