STM32F103RC 设置TFT屏的分辨率和色深,并最终打开TFT屏 分几个部分写代码
时间: 2024-04-29 07:22:26 浏览: 101
STM32TFT屏幕驱动代码
好的,为了清晰明了,我将代码分为以下几个部分:
1. 初始化TFT屏幕所需的GPIO口、SPI口,以及时钟等相关设置。
2. 配置TFT屏幕的参数,包括分辨率、颜色深度等。
3. 按照TFT屏幕的协议,发送指令和数据,设置TFT屏幕。
4. 最终打开TFT屏幕,显示所需内容。
下面是主要代码:
```c
// 初始化TFT屏幕所需的GPIO口、SPI口,以及时钟等相关设置
void TFT_GPIO_SPI_init(void)
{
// 打开GPIOA、GPIOB、GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
// 打开SPI2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
// 设置SPI口的SCK、MISO、MOSI引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 设置TFT屏幕的CS、RS、RST引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置SPI口
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);
}
// 配置TFT屏幕的参数,包括分辨率、颜色深度等
void TFT_init(void)
{
// 设置TFT屏幕的分辨率为240*320
TFT_send_command(0x2A); // 设置列地址
TFT_send_data(0x00);
TFT_send_data(0x00);
TFT_send_data(0x00);
TFT_send_data(0xEF);
TFT_send_command(0x2B); // 设置行地址
TFT_send_data(0x00);
TFT_send_data(0x00);
TFT_send_data(0x01);
TFT_send_data(0x3F);
TFT_send_command(0x3A); // 设置颜色模式
TFT_send_data(0x05); // RGB565模式
// ...
}
// 按照TFT屏幕的协议,发送指令和数据,设置TFT屏幕
void TFT_send_command(uint8_t cmd)
{
TFT_RS_LOW(); // RS置低,表示发送的是指令
TFT_CS_LOW(); // 使能CS,开始传输
SPI_I2S_SendData(SPI2, cmd);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET); // 等待传输完成
TFT_CS_HIGH(); // 关闭CS
}
void TFT_send_data(uint8_t data)
{
TFT_RS_HIGH(); // RS置高,表示发送的是数据
TFT_CS_LOW(); // 使能CS,开始传输
SPI_I2S_SendData(SPI2, data);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET); // 等待传输完成
TFT_CS_HIGH(); // 关闭CS
}
// 最终打开TFT屏幕,显示所需内容
void TFT_on(void)
{
TFT_send_command(0x29); // 打开TFT屏幕
}
```
需要注意的是,这里的`TFT_RS_LOW()`和`TFT_RS_HIGH()`分别是将TFT屏幕的RS引脚置低和置高的函数,`TFT_CS_LOW()`和`TFT_CS_HIGH()`分别是将TFT屏幕的CS引脚置低和置高的函数,具体实现可以根据自己的硬件进行修改。
阅读全文