stm32f103c8t6 ili9341驱动代码
时间: 2023-08-25 12:07:43 浏览: 255
以下是使用STM32F103C8T6驱动ILI9341 TFT LCD的示例代码:
```
// 定义TFT显示屏的引脚
#define TFT_CS_PIN GPIO_Pin_6 // CS引脚
#define TFT_CS_GPIO_PORT GPIOA // CS所在的GPIO端口
#define TFT_DC_PIN GPIO_Pin_7 // DC引脚
#define TFT_DC_GPIO_PORT GPIOA // DC所在的GPIO端口
#define TFT_RST_PIN GPIO_Pin_8 // RST引脚
#define TFT_RST_GPIO_PORT GPIOA // RST所在的GPIO端口
// 定义SPI接口
#define TFT_SPI SPI1 // SPI接口
#define TFT_SPI_CLK RCC_APB2Periph_SPI1 // SPI时钟
// 初始化TFT显示屏
void TFT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
// 配置GPIO引脚为输出模式
GPIO_InitStructure.GPIO_Pin = TFT_CS_PIN | TFT_DC_PIN | TFT_RST_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(TFT_CS_GPIO_PORT, &GPIO_InitStructure);
// 配置SPI接口
RCC_APB2PeriphClockCmd(TFT_SPI_CLK, ENABLE);
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_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(TFT_SPI, &SPI_InitStructure);
SPI_Cmd(TFT_SPI, ENABLE);
// 初始化TFT显示屏
TFT_CS_HIGH();
TFT_DC_HIGH();
TFT_RST_LOW();
delay_ms(100);
TFT_RST_HIGH();
delay_ms(100);
// 发送初始化命令
TFT_SendCommand(0x01); // 软件复位
delay_ms(5);
TFT_SendCommand(0x28); // 关闭显示
TFT_SendCommand(0x11); // 退出睡眠模式
delay_ms(100);
TFT_SendCommand(0xCB); // 电源控制
TFT_SendData(0x39);
TFT_SendData(0x2C);
TFT_SendData(0x00);
TFT_SendData(0x34);
TFT_SendData(0x02);
TFT_SendCommand(0xCF); // 电源控制
TFT_SendData(0x00);
TFT_SendData(0XC1);
TFT_SendData(0X30);
TFT_SendCommand(0xE8); // 电源控制
TFT_SendData(0x85);
TFT_SendData(0x00);
TFT_SendData(0x78);
TFT_SendCommand(0xEA); // 电源控制
TFT_SendData(0x00);
TFT_SendData(0x00);
TFT_SendCommand(0xED); // 电源控制
TFT_SendData(0x64);
TFT_SendData(0x03);
TFT_SendData(0X12);
TFT_SendData(0X81);
TFT_SendCommand(0xF7); // 调节电流
TFT_SendData(0x20);
TFT_SendCommand(0xC0); // 电源控制
TFT_SendData(0x23); // VRH[5:0]
TFT_SendCommand(0xC1); // 电源控制
TFT_SendData(0x10); // SAP[2:0];BT[3:0]
TFT_SendCommand(0xC5); // VCM控制
TFT_SendData(0x3e); // 内部VCM供电电压
TFT_SendData(0x28);
TFT_SendCommand(0xC7); // VCM控制2
TFT_SendData(0x86); // --
TFT_SendCommand(0x36); // 修改扫描方向
TFT_SendData(0x48);
TFT_SendCommand(0x3A); // 修改像素格式
TFT_SendData(0x55);
TFT_SendCommand(0xB1); // 修改分频率
TFT_SendData(0x00);
TFT_SendData(0x18);
TFT_SendCommand(0xB6); // 修改显示方向
TFT_SendData(0x08);
TFT_SendData(0x82);
TFT_SendData(0x27);
TFT_SendCommand(0xF2); // 3Gamma控制
TFT_SendData(0x00);
TFT_SendCommand(0x26); // Gamma调整
TFT_SendData(0x01);
TFT_SendCommand(0xE0); // 逐行颜色校正
TFT_SendData(0x0F);
TFT_SendData(0x31);
TFT_SendData(0x2B);
TFT_SendData(0x0C);
TFT_SendData(0x0E);
TFT_SendData(0x08);
TFT_SendData(0x4E);
TFT_SendData(0xF1);
TFT_SendData(0x37);
TFT_SendData(0x07);
TFT_SendData(0x10);
TFT_SendData(0x03);
TFT_SendData(0x0E);
TFT_SendData(0x09);
TFT_SendData(0x00);
TFT_SendCommand(0xE1); // 逐列颜色校正
TFT_SendData(0x00);
TFT_SendData(0x0E);
TFT_SendData(0x14);
TFT_SendData(0x03);
TFT_SendData(0x11);
TFT_SendData(0x07);
TFT_SendData(0x31);
TFT_SendData(0xC1);
TFT_SendData(0x48);
TFT_SendData(0x08);
TFT_SendData(0x0F);
TFT_SendData(0x0C);
TFT_SendData(0x31);
TFT_SendData(0x36);
TFT_SendData(0x0F);
TFT_SendCommand(0x11); // 退出睡眠模式
delay_ms(100);
TFT_SendCommand(0x29); // 打开显示
}
// 发送命令到TFT显示屏
void TFT_SendCommand(uint8_t command)
{
TFT_CS_LOW();
TFT_DC_LOW();
SPI_I2S_SendData(TFT_SPI, command);
while (SPI_I2S_GetFlagStatus(TFT_SPI, SPI_I2S_FLAG_BSY) == SET);
TFT_CS_HIGH();
}
// 发送数据到TFT显示屏
void TFT_SendData(uint8_t data)
{
TFT_CS_LOW();
TFT_DC_HIGH();
SPI_I2S_SendData(TFT_SPI, data);
while (SPI_I2S_GetFlagStatus(TFT_SPI, SPI_I2S_FLAG_BSY) == SET);
TFT_CS_HIGH();
}
```
以上代码仅作为参考,具体实现方式可能会因为硬件电路和软件环境的不同而有所变化。
阅读全文