【CH32V307测评】FSMC驱动LCD
CH32V307具有可配置的静态存储器控制器(FSMC),没有LDTC。FSMC 接口主要提供了同步或异步存储器接口,支持 SRAM、PSRAM、NOR 及 NAND 等器件。内部 HB传输信号被转换成合适的外部通讯协议,允许 8/16/32 位数据的连续访问。并灵活可配置采样延迟时间以满足不同器件时序。FSMC 也可用于多数图形 LCD 控制器接口,它支持 Intel 8080 和 Motorola 6800 的模式,很方便地构建简易的图形应用环境,或用于专用加速控制器的高性能方案。FSMC:通常采用类 8080 并行接口,需要连接外部的 LCD 控制器芯片,如 ILI9341 等。FSMC 将 TFTLCD 当成 SRAM 设备来用,通过地址线、数据线、读写信号、片选信号等进行控制,其中 TFTLCD 的 RS 信号用于区分数据和命令,可将其连接到 FSMC 的地址线上。可以复用 GPIO 引脚,对专用引脚的需求较少,在一些资源有限的微控制器中,如果不需要高分辨率和高刷新率的显示,FSMC 是一种较为经济的选择。主要功能是实现对外部存储器的控制,对于 TFT 显示器的控制主要是通过模拟其读写时序来实现,缺乏专门的图形处理功能,在显示复杂图形或进行图像混合等操作时,需要软件进行大量的计算和处理。适用于简单显示场景,如显示固定的字符、图标等,或者在对成本和资源占用要求较高,对显示性能要求不高的项目中使用。
LTDC:是专门用于驱动 RGB 接口液晶屏的图形处理外设,采用 RGB 并行接口,可直接驱动 LCD,无需额外的 LCD 控制器芯片,能够直接与 TFT 显示器的 RGB 引脚相连。具有硬件加速功能,如支持多图层混合显示,可高效地做出背景和前景分离的显示效果,还可与 DMA2D 图形加速器配合使用,实现图像填充、数据复制、格式转换等功能,能够减轻 CPU 的负担,提高图形显示的效率。适用于需要高分辨率、高刷新率和丰富色彩表现的场景,如智能手持设备、工业人机界面等对显示效果要求较高的应用。
CH32V307 FSMC 驱动原子的4.3寸屏
/*
LCD!!PIN�
PD11!!FSMC_A16
PD12!!FSMC_A17
PD5 !!FSMC_NEW
PD4 !!FSMC_NOE
PA15!!LCDRST#
PD14!!FSMC_D0
PD15!!FSMC_D1
PD0 !!FSMC_D2
PD1 !!FSMC_D3
PE7 !!FSMC_D4
PE8 !!FSMC_D5
PE9 !!FSMC_D6
PE10!!FSMC_D7
PE11!!FSMC_D8
PE12!!FSMC_D9
PE13!!FSMC_D10
PE14!!FSMC_D11
PE15!!FSMC_D12
PD8 !!FSMC_D13
PD9 !!FSMC_D14
PD10!!FSMC_D15
PB14!!IO_BLCTR
PA8 !!IO_MISO_NC
PB3 !!IO_MOSI_SDA
PB15!!IO_TKINT
PC13!!IO_BUSY_NC
PC0 !!IO_TKRST#
PB4 !!IO_CLK
*/
#include "debug.h"
#include "lcd.h"
/*********************************************************************
* @fn LCD_Reset_GPIO_Init
*
* @brief Init LCD reset GPIO.
*
* @returnnone
*/
void LCD_Reset_GPIO_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure={0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
}
int main(void)
{
u8 x=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
LCD_Reset_GPIO_Init();
//LCD reset
GPIO_ResetBits(GPIOA,GPIO_Pin_15);
Delay_Ms(100);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
LCD_Init();
POINT_COLOR=RED;
while(1)
{
switch(x)
{
case 0:LCD_Clear(WHITE);break;
case 1:LCD_Clear(BLACK);break;
case 2:LCD_Clear(BLUE);break;
case 3:LCD_Clear(RED);break;
case 4:LCD_Clear(MAGENTA);break;
case 5:LCD_Clear(GREEN);break;
case 6:LCD_Clear(CYAN);break;
case 7:LCD_Clear(YELLOW);break;
case 8:LCD_Clear(BRRED);break;
case 9:LCD_Clear(GRAY);break;
case 10:LCD_Clear(LGRAY);break;
case 11:LCD_Clear(BROWN);break;
}
POINT_COLOR=RED;
LCD_ShowString(30,40,210,24,24,"CH32V307");
LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
LCD_ShowString(30,90,200,16,16,"WCH");
x++;
if(x==12)x=0;
Delay_Ms(1000);
}
}
下一步 移植RTT+LVGL
页:
[1]