1、原理图分析,在原理图的接口中我使用ardunio标准接口CN5来连接LCD。

2、打开stm32cubeMX分配SP1如下:

修改参数为8bit,高位在前,分频2,CPOL为Low,CPHA 为1Edge,禁用硬件CS

3、为LCD的RST、DC、CS分配GPIO如下:

4、生成工程后,移植一个st7735的驱动,将驱动添加到工程中:

5、修改发送命令、数据的代码如下:
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);
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);
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
}
void ST7735_WriteData(uint8_t *data, size_t data_size)
{
HAL_StatusTypeDef spi_state;
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);
spi_state = HAL_SPI_Transmit(&ST7735_SPI_INSTANCE, data, data_size, HAL_MAX_DELAY);
//spi_state = HAL_SPI_Transmit_DMA(&ST7735_SPI_INSTANCE, data, data_size);
if(spi_state != HAL_OK)
{
printf("spi_send err:%d", spi_state);
}
HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
}
6、在主程序中添加测试函数:
/* USER CODE BEGIN 2 */
printf("start\r\n");
ST7735_Init();
ST7735_DrawString(10, 10, "STM32C092", ST7735_BLACK, ST7735_WHITE, &Font_11x18);
ST7735_DrawString(10, 32, "ST7735LCD", ST7735_BLACK, ST7735_WHITE, &Font_11x18);
/* USER CODE END 2 */
【效果】

大佬下一篇就是移植touchgfx的了嘛
TFT的TouchGFX内存不够呀,搞了个OLED的。