[单片机芯片] 【CH32V307测评】FSMC驱动LCD

[复制链接]
381|0
abner_ma 发表于 2025-8-31 23:23 | 显示全部楼层 |阅读模式
   CH32V307具有可配置的静态存储器控制器(FSMC),没有LDTC。FSMC 接口主要提供了同步或异步存储器接口,支持 SRAM、PSRAM、NOR 及 NAND 等器件。内部 HB传输信号被转换成合适的外部通讯协议,允许 8/16/32 位数据的连续访问。并灵活可配置采样延迟时间以满足不同器件时序。FSMC 也可用于多数图形 LCD 控制器接口,它支持 Intel 8080 和 Motorola 6800 的模式,很方便地构建简易的图形应用环境,或用于专用加速控制器的高性能方案。


1.png
2.png
3.png

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寸屏


  1. /*

  2.   LCD!!PIN�
  3.     PD11!!FSMC_A16
  4.     PD12!!FSMC_A17
  5.     PD5 !!FSMC_NEW
  6.     PD4 !!FSMC_NOE
  7.     PA15!!LCDRST#
  8.     PD14!!FSMC_D0
  9.     PD15!!FSMC_D1
  10.     PD0 !!FSMC_D2
  11.     PD1 !!FSMC_D3
  12.     PE7 !!FSMC_D4
  13.     PE8 !!FSMC_D5
  14.     PE9 !!FSMC_D6
  15.     PE10!!FSMC_D7
  16.     PE11!!FSMC_D8
  17.     PE12!!FSMC_D9
  18.     PE13!!FSMC_D10
  19.     PE14!!FSMC_D11
  20.     PE15!!FSMC_D12
  21.     PD8 !!FSMC_D13
  22.     PD9 !!FSMC_D14
  23.     PD10!!FSMC_D15
  24.     PB14!!IO_BLCTR
  25.     PA8 !!IO_MISO_NC
  26.     PB3 !!IO_MOSI_SDA
  27.     PB15!!IO_TKINT
  28.     PC13!!IO_BUSY_NC
  29.     PC0 !!IO_TKRST#
  30.     PB4 !!IO_CLK
  31. */

  32. #include "debug.h"
  33. #include "lcd.h"

  34. /*********************************************************************
  35. * @fn      LCD_Reset_GPIO_Init
  36. *
  37. * [url=/u/brief]@brief[/url]   Init LCD reset GPIO.
  38. *
  39. * [url=/u/return]@return[/url]  none
  40. */
  41. void LCD_Reset_GPIO_Init(void)
  42. {
  43.     GPIO_InitTypeDef  GPIO_InitStructure={0};

  44.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  45.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  46.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  47.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  48.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  49.     GPIO_SetBits(GPIOA,GPIO_Pin_15);
  50. }


  51. int main(void)
  52. {
  53.         u8 x=0;

  54.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  55.         Delay_Init();
  56.         USART_Printf_Init(115200);
  57.         printf("SystemClk:%d\r\n",SystemCoreClock);

  58.         LCD_Reset_GPIO_Init();
  59.         //LCD reset
  60.         GPIO_ResetBits(GPIOA,GPIO_Pin_15);
  61.         Delay_Ms(100);
  62.         GPIO_SetBits(GPIOA,GPIO_Pin_15);

  63.     LCD_Init();
  64.         POINT_COLOR=RED;               
  65.          
  66.     while(1)
  67.         {                 
  68.                 switch(x)
  69.                 {
  70.                         case 0:LCD_Clear(WHITE);break;
  71.                         case 1:LCD_Clear(BLACK);break;
  72.                         case 2:LCD_Clear(BLUE);break;
  73.                         case 3:LCD_Clear(RED);break;
  74.                         case 4:LCD_Clear(MAGENTA);break;
  75.                         case 5:LCD_Clear(GREEN);break;
  76.                         case 6:LCD_Clear(CYAN);break;

  77.                         case 7:LCD_Clear(YELLOW);break;
  78.                         case 8:LCD_Clear(BRRED);break;
  79.                         case 9:LCD_Clear(GRAY);break;
  80.                         case 10:LCD_Clear(LGRAY);break;
  81.                         case 11:LCD_Clear(BROWN);break;
  82.                 }
  83.                 POINT_COLOR=RED;          
  84.                 LCD_ShowString(30,40,210,24,24,"CH32V307");
  85.                 LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
  86.                 LCD_ShowString(30,90,200,16,16,"WCH");
  87.             x++;
  88.                 if(x==12)x=0;                                            
  89.                 Delay_Ms(1000);       

  90.         }

  91. }







下一步 移植RTT+LVGL

66666.png






您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

104

主题

190

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部