Little VGL(LVGL)图形库移植到CH32V307单片机(一)
一、Little VGL(LVGL)图形库简介
- LVGL是一个开源图形库,提供完善的GUI开发组件,具有易于使用的图形元素,绚丽的界面和占用内存低等特点。LVGL官网
- 几乎所有的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编译器无需额外设置。
- 以上的内存推荐设置是官方给定的,实际开发无需拘泥于具体的参数设置,要根据实际的工程灵活调整。另外,同一工程使用不同架构的编译器编译,其存储空间的使用量及分配也有一定差异。
- 官方提供了众多Demo,多变的风格,总能找到它的应用场景。
二、CH32V307单片机简介
- 单片机使用了RISC-V内核,遵循BSD License开源协议,使用RISC-V内核无需另外支付授权费用,是一个非常有前景的开源处理器架构。
- 使用Mountain River IED软件辅助开发
三、TFT LCD显示屏简介
- TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。(显示原理,请自行搜索)大概长相为下图所示。
- 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)。
- 显示屏驱动程序由厂家提供,您可以找到屏幕制造商,拨打技术电话索要例程。或者,您购买某一款stm32开发板,可参照开发板例程学习驱动程序的使用。
四、FSMC简介
- FSMC(Flexible Static Memory Controller,可变静态存储控制器)是一种新型的存储器扩展技术,应用在外扩存储器(SRAM等),自动生成匹配外扩存储器的控制时序,降低了外扩驱动编写的难度。
- FSMC模块框图(左)与存储块(右),FSMC可以控制8bit或16bit的SRAM,这个速度相比用GPIO模拟时序控制SRAM是非常快的。FSMC一些重要引脚如下表所示
引脚名称 | 引脚性质 |
---|---|
D0-D15 | 16bit数据引脚 |
NEx | 片选 |
A16-A23 | 地址 |
NWE | 写数据 |
NOE | 读数据 |
- 接下来,将分析如何使用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单片机(一)相关推荐
- Little VGL(LVGL)图形库移植到CH32V307单片机(二)
一.下载需要的移植库及开发环境 下载LVGL主代码+Demo代码,防止GitHub地址更换,请直接访问LVGL官网地址:LVGL官网直通GitHub.我们需要下载LVGL移植库与demo例程两个文件. ...
- LVGL v7移植到ARM平台
本次移植的是LVGL v7.110 硬件平台:野火IMX6ULL 参考博客: 实践分享 | 基于framebuffer的lvgl的移植使用_嵌入式大杂烩-CSDN博客 ⭐建立一个lvgl项目 - 百问 ...
- 基于arduino的ESP32 学习笔记(六)LVGL文件系统移植,中文字库和图片显示
前言 本文的目的是为了给将要制作的ESP32手环做技术储备 记录移植LVGL文件系统,制作LVGL中文字库,将图片和字库放在SD卡里,通过移植好的LVGL文件系统,读取SD卡中的中文字库和图片,并显示 ...
- 《安富莱嵌入式周报》第312期:开源磁场照相机,仿生神经元PCB,开源无线耳机,手机系统PalmOS移植到各种单片机,开放系统组装协议OSAP
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...
- 基于国产CH32V307单片机的图像混沌加密
技术报告 基于国产CH32V307单片机的图像混沌加密 作者: 夏明 李佩冉 学校: 南京信息工程大学 时间: 2022年12月18日 目录 第一章 开发应用背景 1.1混沌图像加密.混沌系统简介 1 ...
- 沁恒CH32V307单片机入门(01):基础说明与流程体验
文章目录 目的 基础说明 芯片介绍 资料与工具 开发环境 流程体验 开发 调试 下载 总结 目的 工作这几年单片机主要就接触过 Atmel.Renesas.Microchip.ST 这些厂家的,最近几 ...
- 沁恒CH32V307单片机入门(02):官方库与工程模板介绍
文章目录 目的 官方库 工程模板 使用例程 总结 目的 现在开发单片机大多数时候都是面向库开发的,这里将简单介绍下CH32V307的官方库. 在开发过程中新建项目时通常会从某些模板开始,模板包含了库和 ...
- STemwin图形库移植与运用(基于STM32)(完成QQ界面设计、局域网聊天)
一.环境介绍 主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 硬件包含: 一块STM32F ...
- HLK-W801开发-LVGL图像库移植,并驱动GC9A01圆形屏幕
移植后的效果如上图所示,采用的LVGL版本是8.2,接下来是详细的移植过程. 项目来源简单介绍 某天在某宝瞎逛时,突然发现一款单片机,最小系统板只有9.9,这不正好戳中老夫穷逼的心,想到就现在就一块F ...
最新文章
- 【c语言】求两数之和
- ISA2006标准版安装及无人值守安装
- 隐藏键盘_三星新专利:带有隐藏键盘的三折叠屏手机
- flutter 国际化_Flutter 开发实战资源推荐
- C语言,为什么动态内存分配申请后,还要再释放?
- 黑马程序员—多线程,单线程
- vue+uwsgi+nginx部署路飞学城
- WebService学习笔记系列(四)
- 老将回归,英特尔的复兴之路
- 中国脑与语言认知领域研究学者
- 苹果上传闪退 php,苹果手机app频繁闪退原因以及解决方法
- Python——fitter包:拟合样本数据的分布
- SpringBoot通过自定义注解实现模板方法设计模式
- 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
- Nginx反向代理与系统参数配置conf
- Domino的SMTP设置【外出】
- C/C++班主任管家系统
- 郑州商品交易所:数智一体化助力交易所数字化转型
- 判断一个数是不是Sky数
- AUTOSAR架构的CAN通讯学习(一)——整体概述
热门文章
- 12年经验老程序员的5次转型
- shopify 结账_是自我结账的机器邪恶化身
- ar面部识别_增强现实(AR)结合人脸识别技术在手机产品的应用
- 百度的搜索下拉菜单数据接口
- android native 相册,React Native手动实现调用原生相机相册(Android端)
- 学习QT之模型(Model)
- JS高级—call(),apply(),bind()
- B站与快手之间,还差了一个YY?
- 现代电子技术与计算机应用分析的论文提纲,计算机及应用论文提纲范文大全 计算机及应用论文提纲如何写...
- AXURE RP8 - 实战手册 网站和APP原型制作案例精粹