一、Little VGL(LVGL)图形库简介

  1. LVGL是一个开源图形库,提供完善的GUI开发组件,具有易于使用的图形元素,绚丽的界面和占用内存低等特点。LVGL官网
  2. 几乎所有的MCU都能够支持LVGL的运行,显然您的MCU至少要满足以下参数:
  • 1.16, 32 或 64 位微控制器或处理器
  • Clock: >=16MHz主频
  • Flash/ROM:至少> 64 kB (> 180 kB 可运行大部分显示库组件)
  • Stack: 至少> 2kB (推荐> 8 kB)
  • Dynamic data (heap): > 4 KB (如果工程使用多个组件,建议> 32 kB )。在 in lv_conf.h头文件中设置LV_MEM_SIZE参数。
  • Display buffer: > “Horizontal resolution” pixels (> 10 × “Horizontal resolution” is recommended)
  • One frame buffer in the MCU or in an external display controller
  • 编译器支持C99 ,keil5中在c/c++选项框中勾选C99。Mountain River编译器无需额外设置。
  • 以上的内存推荐设置是官方给定的,实际开发无需拘泥于具体的参数设置,要根据实际的工程灵活调整。另外,同一工程使用不同架构的编译器编译,其存储空间的使用量及分配也有一定差异。
  1. 官方提供了众多Demo,多变的风格,总能找到它的应用场景。

二、CH32V307单片机简介

  1. 单片机使用了RISC-V内核,遵循BSD License开源协议,使用RISC-V内核无需另外支付授权费用,是一个非常有前景的开源处理器架构。
  2. 使用Mountain River IED软件辅助开发

三、TFT LCD显示屏简介

  1. TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。(显示原理,请自行搜索)大概长相为下图所示。

  1. TFT LCD接受8080端口时序控制(自行学习),重要引脚如下表所示
引脚名称 引脚性质
D0-D15 16bit数据引脚
CS 片选
RS 1:数据;0:命令
WR 写数据
RD 读数据
RST 复位

这里需要注意的一点是,对于TFT LCD显示器,其工作原理决定了需要背光,背光引脚在购买到的模块中,有的标注“BL”,有的直接连接vcc。RST引脚可以连接在单片机复位引脚,也可以连接一个GPIO口,实现软复位(初始化:推挽输出-SetBits,主程序:ResetBits+Delay_Ms(100)+SetBits)。

  1. 显示屏驱动程序由厂家提供,您可以找到屏幕制造商,拨打技术电话索要例程。或者,您购买某一款stm32开发板,可参照开发板例程学习驱动程序的使用。

四、FSMC简介

  1. FSMC(Flexible Static Memory Controller,可变静态存储控制器)是一种新型的存储器扩展技术,应用在外扩存储器(SRAM等),自动生成匹配外扩存储器的控制时序,降低了外扩驱动编写的难度。
  2. FSMC模块框图(左)与存储块(右),FSMC可以控制8bit或16bit的SRAM,这个速度相比用GPIO模拟时序控制SRAM是非常快的。FSMC一些重要引脚如下表所示

引脚名称 引脚性质
D0-D15 16bit数据引脚
NEx 片选
A16-A23 地址
NWE 写数据
NOE 读数据
  1. 接下来,将分析如何使用FSMC控制TFT LCD。要实现一个系统控制另一个系统,重要的是如何实现引脚的对接。注意到TFT LCD与FSMC的引脚有些类似,需要处理两个有差异的引脚
TFT LCD FSMC
RS: ( 1:数据;0:命令) A16-A23(地址)

对于TFT LCD而言,RS引脚高电平表示读写数据,低电平表示读写命令;对于FSMC而言A16-A23引脚表示读写地址。那么怎样实现用FSMC地址引脚控制RS呢?这要从FSMC与AHB总线地址的映射关系说起。

FSMC挂接在AHB总线上,AHB总线地址是按照8位寻址。当FSMC外接16位器件(TFT LCD)时,FSMC需要在程序中设置为16位,需要将AHB总线地址重新映射到FSMC。如下表所示

AHB总线地址 FSMC地址
0000 0000 0000 0000
0000 0001
0000 0010 0000 0001
0000 0011
0000 0100 0000 0010
0000 0101
0000 0110 0000 0011
0000 0111
… … … …
… …
011 1111 1111 1111 1110 00 1 1111 1111 1111 1111
011 1111 1111 1111 1111
100 0000 0000 0000 0000 01 0 0000 0000 0000 0000
100 0000 0000 0000 0001
… … … …
… …

这种映射关系可以理解为一种约定,有点像结构体。即在FSMC看来的地址为“AHB结构体”的首地址,“AHB结构体”有两个8位成员。另一个有趣的现象是,FSMC地址为AHB总线地址右移一位。我们在程序中操作的地址实际上是AHB总线地址,所以要设置FSMC地址为001 1111 1111 1111 1111,在程序中应该设置地址为011 1111 1111 1111 1110 。
在数字电路中操作指令,例如操作FSMC的某个地址Ax引脚(x=16~23),一般有高(1)低(0)两种状态,这恰能与TFT LCD 中RS引脚(0:命令,1:数据)的二态性对应起来。若,我们将A17引脚接RS端口,通过控制A17引脚高低来控制RS引脚高低,实现FSMC与TFT LCD端口的对接,引脚对应如下表所示

FSMC端口 TFT LCD端口
NEx CS
A17 RS
NWE WR
NOE RD

CH32V307只有NE1,所以表中的NEx应为NE1。

我们想让RS引脚为零(命令),则A17引脚必须为零;RS引脚为1(数据),则A17引脚必须为1。FSMC地址中A17引脚电平被横杠标识了,因为程序中的代码为AHB总线对应的地址。所以,FSMC令A17引脚为0的地址(00 1 1111 1111 1111 1111),在程序中应写为AHB对应地址(011 1111 1111 1111 1110),即0x3FFFE;FSMC令A17引脚为1的地址( 01 0 0000 0000 0000 0000),在程序中应写为AHB对应地址(100 0000 0000 0000 0000),即0x40000。在程序中实现A17与RS对应的代码片段如下

/* LCD addr */
typedef struct
{vu16 LCD_REG;vu16 LCD_RAM;
} LCD_TypeDef;/* A17, Bank1, sector1 */
#define LCD_BASE        ((u32)(0x60000000 | 0x0003FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

由FSMC存储块图可知,块1的起始绝对地址为0x60000000,A17引脚相较于0x60000000的偏移量为 0x0003FFFE(AHB总线地址),所以LCD_BASE表示的是A17引脚的绝对偏移量。定义LCD为LCD_TypeDef类型结构体,并将LCD_BASE地址强制赋给LCD_TypeDef首成员LCD_REG。又因为LCD_TypeDef结构体成员类型为16位,所以成员地址LCD_REG:0x6003FFFE,LCD_RAM:0x60040000。在程序中通过调用结构体成员,就能控制RS了。
到此为止,FSMC与TFT LCD对应关系已经讲完了,以上属于个人理解,欢迎交流。
下一篇文章将分享移植一个LVGL案例到CH32V307单片机的操作过程。

Little VGL(LVGL)图形库移植到CH32V307单片机(一)相关推荐

  1. Little VGL(LVGL)图形库移植到CH32V307单片机(二)

    一.下载需要的移植库及开发环境 下载LVGL主代码+Demo代码,防止GitHub地址更换,请直接访问LVGL官网地址:LVGL官网直通GitHub.我们需要下载LVGL移植库与demo例程两个文件. ...

  2. LVGL v7移植到ARM平台

    本次移植的是LVGL v7.110 硬件平台:野火IMX6ULL 参考博客: 实践分享 | 基于framebuffer的lvgl的移植使用_嵌入式大杂烩-CSDN博客 ⭐建立一个lvgl项目 - 百问 ...

  3. 基于arduino的ESP32 学习笔记(六)LVGL文件系统移植,中文字库和图片显示

    前言 本文的目的是为了给将要制作的ESP32手环做技术储备 记录移植LVGL文件系统,制作LVGL中文字库,将图片和字库放在SD卡里,通过移植好的LVGL文件系统,读取SD卡中的中文字库和图片,并显示 ...

  4. 《安富莱嵌入式周报》第312期:开源磁场照相机,仿生神经元PCB,开源无线耳机,手机系统PalmOS移植到各种单片机,开放系统组装协议OSAP

    周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...

  5. 基于国产CH32V307单片机的图像混沌加密

    技术报告 基于国产CH32V307单片机的图像混沌加密 作者: 夏明 李佩冉 学校: 南京信息工程大学 时间: 2022年12月18日 目录 第一章 开发应用背景 1.1混沌图像加密.混沌系统简介 1 ...

  6. 沁恒CH32V307单片机入门(01):基础说明与流程体验

    文章目录 目的 基础说明 芯片介绍 资料与工具 开发环境 流程体验 开发 调试 下载 总结 目的 工作这几年单片机主要就接触过 Atmel.Renesas.Microchip.ST 这些厂家的,最近几 ...

  7. 沁恒CH32V307单片机入门(02):官方库与工程模板介绍

    文章目录 目的 官方库 工程模板 使用例程 总结 目的 现在开发单片机大多数时候都是面向库开发的,这里将简单介绍下CH32V307的官方库. 在开发过程中新建项目时通常会从某些模板开始,模板包含了库和 ...

  8. STemwin图形库移植与运用(基于STM32)(完成QQ界面设计、局域网聊天)

    一.环境介绍 主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 硬件包含:  一块STM32F ...

  9. HLK-W801开发-LVGL图像库移植,并驱动GC9A01圆形屏幕

    移植后的效果如上图所示,采用的LVGL版本是8.2,接下来是详细的移植过程. 项目来源简单介绍 某天在某宝瞎逛时,突然发现一款单片机,最小系统板只有9.9,这不正好戳中老夫穷逼的心,想到就现在就一块F ...

最新文章

  1. 【c语言】求两数之和
  2. ISA2006标准版安装及无人值守安装
  3. 隐藏键盘_三星新专利:带有隐藏键盘的三折叠屏手机
  4. flutter 国际化_Flutter 开发实战资源推荐
  5. C语言,为什么动态内存分配申请后,还要再释放?
  6. 黑马程序员—多线程,单线程
  7. vue+uwsgi+nginx部署路飞学城
  8. WebService学习笔记系列(四)
  9. 老将回归,英特尔的复兴之路
  10. 中国脑与语言认知领域研究学者
  11. 苹果上传闪退 php,苹果手机app频繁闪退原因以及解决方法
  12. Python——fitter包:拟合样本数据的分布
  13. SpringBoot通过自定义注解实现模板方法设计模式
  14. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
  15. Nginx反向代理与系统参数配置conf
  16. Domino的SMTP设置【外出】
  17. C/C++班主任管家系统
  18. 郑州商品交易所:数智一体化助力交易所数字化转型
  19. 判断一个数是不是Sky数
  20. AUTOSAR架构的CAN通讯学习(一)——整体概述

热门文章

  1. 12年经验老程序员的5次转型
  2. shopify 结账_是自我结账的机器邪恶化身
  3. ar面部识别_增强现实(AR)结合人脸识别技术在手机产品的应用
  4. 百度的搜索下拉菜单数据接口
  5. android native 相册,React Native手动实现调用原生相机相册(Android端)
  6. 学习QT之模型(Model)
  7. JS高级—call(),apply(),bind()
  8. B站与快手之间,还差了一个YY?
  9. 现代电子技术与计算机应用分析的论文提纲,计算机及应用论文提纲范文大全 计算机及应用论文提纲如何写...
  10. AXURE RP8 - 实战手册 网站和APP原型制作案例精粹