一.单片机连接TFT屏幕
使用的是购买屏幕时附带的驱动文件
1.在cube中配置stm32
首先配置单片机时钟,如图
然后将时钟设置为72MHz
下面开始配置引脚,我使用的屏幕共八个引脚,所以除去电源和地之外,需要配置六个引脚,首先配置连接CS,DC,BLK和RST的引脚,分别为PB3,PB4,PB5和PB6,均为输出模式
其次,配置单片机和屏幕的通信引脚,这里使用stm32的SPI接口,屏幕的SDA引脚接SPI2_MOSI,选择工作模式并打开中断
设置DMA,点击Add后选择SPI2_TX
六个引脚就配置好了,生成keil的工程之后直接添加驱动文件
2.在keil中添加驱动
直接把驱动文件添加到用户文件夹下即可
部分代码如下
#define CS_GPIO GPIO_PIN_3
#define CS_GPIO_PORT GPIOB
#define CMD_DATA_GPIO GPIO_PIN_4
#define CMD_DATA_GPIO_PORT GPIOB
#define BACK_LED_GPIO GPIO_PIN_5
#define BACK_LED_GPIO_PORT GPIOB
#define RESET_GPIO GPIO_PIN_6
#define RESET_GPIO_PORT GPIOB
#define CS_HIGH HAL_GPIO_WritePin(CS_GPIO_PORT, CS_GPIO, GPIO_PIN_SET)
#define CS_LOW HAL_GPIO_WritePin(CS_GPIO_PORT, CS_GPIO, GPIO_PIN_RESET)
#define DATA HAL_GPIO_WritePin(CMD_DATA_GPIO_PORT, CMD_DATA_GPIO, GPIO_PIN_SET)
#define COMMAND HAL_GPIO_WritePin(CMD_DATA_GPIO_PORT, CMD_DATA_GPIO, GPIO_PIN_RESET)
#define RSTH HAL_GPIO_WritePin(RESET_GPIO_PORT, RESET_GPIO, GPIO_PIN_SET)
#define RSTL HAL_GPIO_WritePin(RESET_GPIO_PORT, RESET_GPIO, GPIO_PIN_RESET)
#define LEDH HAL_GPIO_WritePin(BACK_LED_GPIO_PORT, BACK_LED_GPIO, GPIO_PIN_SET)
#define LEDL HAL_GPIO_WritePin(BACK_LED_GPIO_PORT, BACK_LED_GPIO, GPIO_PIN_RESET)
void TFT_WRITE_DATA(uint8_t data)
{
CS_LOW;
DATA;
HAL_SPI_Transmit_DMA(&hspi2,&data,1);
CS_HIGH;
}
void TFT_WRITE_COMMAND(uint8_t command)
{
CS_LOW;
COMMAND;
HAL_SPI_Transmit_DMA(&hspi2,&command,1);
CS_HIGH;
}
void TFT_WRITE_REG(uint8_t reg,uint16_t reg_value)
{
TFT_WRITE_COMMAND(reg);
TFT_WRITE_DATA(reg_value);
}
void TFT_WRITE_u16_DATA(uint16_t temp)
{
uint8_t tempBuf[2];
tempBuf[0] = temp>>8;
tempBuf[1] = temp;
CS_LOW ;
DATA ;
HAL_SPI_Transmit_DMA(&hspi2,tempBuf, 2);
CS_HIGH ;
}
//Set of coordinate for start point
void set_windows(uint16_t xStar,uint16_t yStar,uint16_t xEnd,uint16_t yEnd)
{
TFT_WRITE_COMMAND(lcddev.setxcmd);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(xStar+lcddev.xoffset);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(xEnd+lcddev.xoffset);
TFT_WRITE_COMMAND(lcddev.setycmd);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(yStar+lcddev.yoffset);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(yEnd+lcddev.yoffset);
TFT_WRITE_COMMAND(0X2C);//写入内存 读取内存2E
}
//Clear screen to single color
void lcd_clear(uint16_t color)
{
uint16_t i,m;
set_windows(0,0,lcddev.width-1,lcddev.height-1);
DATA;
CS_LOW;
for(i=0;i<lcddev.height;i++)
{
for(m=0;m<lcddev.width;m++)
{
TFT_WRITE_u16_DATA(color);
}
}
CS_HIGH;
}
void tft_init()
{
RSTL;
Delay_us(100000);
RSTH;
Delay_us(100000);
TFT_WRITE_COMMAND(0x11);
Delay_us(120000);
TFT_WRITE_COMMAND(0xB1);
TFT_WRITE_DATA(0x01);
TFT_WRITE_DATA(0x2C);
TFT_WRITE_DATA(0x2D);
TFT_WRITE_COMMAND(0xB2);
TFT_WRITE_DATA(0x01);
TFT_WRITE_DATA(0x2C);
TFT_WRITE_DATA(0x2D);
TFT_WRITE_COMMAND(0xB3);
TFT_WRITE_DATA(0x01);
TFT_WRITE_DATA(0x2C);
TFT_WRITE_DATA(0x2D);
TFT_WRITE_DATA(0x01);
TFT_WRITE_DATA(0x2C);
TFT_WRITE_DATA(0x2D);
TFT_WRITE_COMMAND(0xB4);
TFT_WRITE_DATA(0x07);
TFT_WRITE_COMMAND(0xC0);
TFT_WRITE_DATA(0xA2);
TFT_WRITE_DATA(0x02);
TFT_WRITE_DATA(0x84);
TFT_WRITE_COMMAND(0xC1);
TFT_WRITE_DATA(0xC5);
TFT_WRITE_COMMAND(0xC2);
TFT_WRITE_DATA(0x0A);
TFT_WRITE_DATA(0x00);
TFT_WRITE_COMMAND(0xC3);
TFT_WRITE_DATA(0x8A);
TFT_WRITE_DATA(0x2A);
TFT_WRITE_COMMAND(0xC4);
TFT_WRITE_DATA(0x8A);
TFT_WRITE_DATA(0xEE);
TFT_WRITE_COMMAND(0xC5);
TFT_WRITE_DATA(0x0E);
TFT_WRITE_COMMAND(0x36);//RGB mode
TFT_WRITE_DATA(0xC0);//c0
TFT_WRITE_COMMAND(0xe0);
TFT_WRITE_DATA(0x0F);
TFT_WRITE_DATA(0x1A);
TFT_WRITE_DATA(0x0F);
TFT_WRITE_DATA(0x18);
TFT_WRITE_DATA(0x2F);
TFT_WRITE_DATA(0x28);
TFT_WRITE_DATA(0x20);
TFT_WRITE_DATA(0x22);
TFT_WRITE_DATA(0x1F);
TFT_WRITE_DATA(0x1B);
TFT_WRITE_DATA(0x23);
TFT_WRITE_DATA(0x37);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x07);
TFT_WRITE_DATA(0x02);
TFT_WRITE_DATA(0x10);
TFT_WRITE_COMMAND(0xe1);
TFT_WRITE_DATA(0x0F);
TFT_WRITE_DATA(0x1B);
TFT_WRITE_DATA(0x0F);
TFT_WRITE_DATA(0x17);
TFT_WRITE_DATA(0x33);
TFT_WRITE_DATA(0x2C);
TFT_WRITE_DATA(0x29);
TFT_WRITE_DATA(0x2E);
TFT_WRITE_DATA(0x28);
TFT_WRITE_DATA(0x30);
TFT_WRITE_DATA(0x30);
TFT_WRITE_DATA(0x39);
TFT_WRITE_DATA(0x3F);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x07);
TFT_WRITE_DATA(0x03);
TFT_WRITE_DATA(0x10);
TFT_WRITE_COMMAND(0x2A);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x7F);
TFT_WRITE_COMMAND(0x2B);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x00);
TFT_WRITE_DATA(0x9F);
TFT_WRITE_COMMAND(0xF0);
TFT_WRITE_DATA(0x01);
TFT_WRITE_COMMAND(0xF6);
TFT_WRITE_DATA(0x00);
TFT_WRITE_COMMAND(0x3A);
TFT_WRITE_DATA(0x05);
TFT_WRITE_COMMAND(0x29);
lcd_set_direction();
//TFT_WRITE_REG(0x36,(1<<6)|(1<<7));
TFT_WRITE_COMMAND(0xc0);
TFT_WRITE_DATA(0x0A);
lcd_clear(0xffe0);
LEDH;
}