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
- *
- * [url=/u/brief]@brief[/url] Init LCD reset GPIO.
- *
- * [url=/u/return]@return[/url] none
- */
- void LCD_Reset_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_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
|