abner_ma 发表于 2025-8-31 23:23

【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]
查看完整版本: 【CH32V307测评】FSMC驱动LCD