正点原子学习小组
直播中

知之为知之zhl

4年用户 99经验值
擅长:可编程逻辑 电源/新能源
私信 关注

【正点原子STM32战舰V4开发板免费试用】4.3寸并口屏驱动,显示

用正点原子战舰V4开发板驱动4.3寸的LCD屏幕

用cubemx配置FSMC驱动 LCD

FSMC管脚较多,使用cubemx可以加速配置,先打开战舰V4的原理图查看开发板上屏幕接口。

-

LCD的片选管脚连接到了FSMC的NE4端口,RS管脚是用的A10,16位的并口,在cubemx中配置一下,时序配置(NOR/PSRAM timing)为1;15;0;A,写时序配置(NOR/PSRAM timing for write accesses)为0;3;0;A

-

背光管脚是PB0,初始化为输出模式,加一段渐变色生成的代码和RGB888转RGB565的宏

static uint16_t color_buf[480 * 800] __attribute__((section(".ext_sram")));
// 分配到外部1MB sram的最起始处

#define WIDTH 480
#define HEIGHT 800
#define RGB16(R, G, B) ((uint16_t)(((R << 8) & 0xF800) | ((G << 3) & 0x07E0) | ((B>>3) & 0x001f)))

typedef struct {
    unsigned char r;
    unsigned char g;
    unsigned char b;
} RGB;

RGB gradient(float t) {
    RGB color;
    float f = (1 + cos(t * 2 * M_PI)) / 2;
    color.r = (unsigned char)(255 * f);
    color.g = (unsigned char)(255 * (1 - f));
    color.b = (unsigned char)(128 * (1 - f));
    return color;
}

在主函数中调用这个代码

LCD_Init();
  LCD_Fill(0, 0, 480, 800, 0x0000);
  PBout(0) = 1;

  for (int y = 0; y < HEIGHT; y++) {
      for (int x = 0; x < WIDTH; x++) {
          float t = (float)x / WIDTH;
          RGB tem = gradient(t);
          color_buf[y * WIDTH + x] = RGB16(tem.r, tem.g, tem.b);
      }
  }
  LCD_Color_Fill(0, 0, 480, 800, color_buf);

显示效果

-

更多回帖

发帖
×
20
完善资料,
赚取积分