本帖最后由 jinglixixi 于 2020-12-25 18:00 编辑
前文介绍了以STM32L452RE来驱动OLED屏,但它的屏幕比较小,这次就用它来驱动2.2寸TFT显示屏。
鉴于STM32L452RE开发板配有Arduino接口,因此就直接利用它来连接TFT显示屏,该显示屏与MCU的连接关系为:
CS ---PA5
RST--- PA6
D/C---PA7
SDI--- PB6
SCK---PC7
LED--- PA9
输出高低电平的语句定义为:
#define LCD_CS_High() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET) // PA5
#define LCD_CS_Low() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET)
#define LCD_REST_High() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET) // PA6
#define LCD_REST_Low() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET)
#define LCD_DC_High() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET) // PA7
#define LCD_DC_Low() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET)
#define LCD_SDI_High() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET) // PB6
#define LCD_SDI_Low() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET)
#define LCD_SCK_High() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET) // PC7
#define LCD_SCK_Low() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET)
#define LCD_LED_High() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET) // PA9
引脚输出功能的配置函数为:
void APP_TFT_init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Pin = GPIO_PIN_5;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_9;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
LCD_LED_High();
}
实现图片显示的函数为:
void show_pic(const unsigned char *p)
{
int i,j;
unsigned char picH,picL;
Address_set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
picH=*p++;
picL=*p++;
LCD_WR_DATA8(picH);
LCD_WR_DATA8(picL);
}
}
}
实现显示效果的主程序为:
int main(void)
{
HAL_Init();
/* Configure the system clock to 80 MHz */
SystemClock_Config();
APP_TFT_init();
LCD_Init();
//LCD_Clear(WHITE);
show_pic(gImage_a);
while (1);
}
经程序的编译下载,其显示效果如图所示。
显示效果
如果2.2寸TFT显示屏还显小的话,后面咱再上个2.8寸触摸屏。