文章目录
- 一、简介
- 二、通用配置
-
- [2.1 脚本链接 SConscript](#2.1 脚本链接 SConscript)
- [2.2 屏幕驱动代码 xxx.c](#2.2 屏幕驱动代码 xxx.c)
- [2.3 THE_LCD_ID](#2.3 THE_LCD_ID)
- [2.4 Timing & Registers](#2.4 Timing & Registers)
- [2.5 LCDC配置](#2.5 LCDC配置)
- [2.6 LCD_Init](#2.6 LCD_Init)
- [2.7 驱动回调函数](#2.7 驱动回调函数)
- [2.8 屏幕注册声明](#2.8 屏幕注册声明)
- 三、外置流程
-
- [3.1 工程选择](#3.1 工程选择)
- [3.2 peripherals 创建](#3.2 peripherals 创建)
- [3.3 链接脚本 SConscript](#3.3 链接脚本 SConscript)
- [3.4 Kconfig.proj](#3.4 Kconfig.proj)
- [3.5 menuconfig选择](#3.5 menuconfig选择)
- 四、内置流程
-
- [4.1 Kconfig配置](#4.1 Kconfig配置)
- [4.2 Kconfig_lcd配置](#4.2 Kconfig_lcd配置)
- [4.3 menuconfig选择](#4.3 menuconfig选择)
- 五、现象
一、简介
思澈科技内置外置屏幕添加流程,这里以SF32LB52-LCD_N16R8为例
内置:所有工程下都可在menuconfig中选中加入的屏幕
外置:特定工程下加入的屏幕驱动
本文展示了如何添加新的屏幕驱动模组
屏幕参数:
驱动 IC: st7796
接口:8080
分辨率:480 * 320

二、通用配置
屏幕驱动的配置属于通用流程,在内置和外置中都是一样的。
2.1 脚本链接 SConscript
c
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd + '/../common', cwd]
group = DefineGroup('Drivers', src, depend = ['LCD_USING_ST7796_8080'], CPPPATH = CPPPATH)
--------------------------------------/* 修改成自定义的屏幕名称,避免和其他屏幕冲突 */
Return('group')
2.2 屏幕驱动代码 xxx.c
这里的C文件就是你的屏幕驱动代码,能不能点亮屏幕显示就在这里。这里的屏幕驱动也需要结合数据手册或买屏幕时商家给的屏幕驱动代码来编写。
参考文档:其中部分函数是必须的必须的屏幕初始化函数,这里的代码不同的驱动芯片都会有一定差别,要对不同的寄存器写入不同的值,一般购买屏幕时商家会给出。也可以参考芯片数据手册来编写。
2.3 THE_LCD_ID
这个可以自定义配置,主要用于屏幕在位检测


2.4 Timing & Registers
时序和寄存器,这些都需要按照数据手册中给的来配置,否则可能导致屏幕无法正常显示

2.5 LCDC配置
LCDC外设配置:
LCDC_INTF_DBI_8BIT_B:指的是屏幕接口类型,这里只8位并口接口TYPEB 说明,其他接口参照文档 屏幕模组选项

2.6 LCD_Init
屏幕驱动初始化
屏幕驱动关键函数之一,需要按照数据手册或现有驱动例程写入屏幕驱动寄存器
2.7 驱动回调函数

2.8 屏幕注册声明


三、外置流程
前期的屏幕驱动配置完成后,就是内置、外置来使得屏幕可以在menuconifg被选中,并进行编译
3.1 工程选择
首先需要找到一个合适的基础工程,这里选择文档中推荐的
rt_driver工程

3.2 peripherals 创建
在
rt_driver下创建一个peripherals用来放置用户设备,这里也可以直接参考SDK/customer/peripehrals并在此目录下创建屏幕的驱动芯片代码,以及必要的链接脚本文件,如下:

3.3 链接脚本 SConscript
无需修改,将代码加入工程脚本
c
# for module compiling
import os
from building import *
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
if GetDepend(['BSP_USING_RTTHREAD']):
if not GetDepend(['BSP_USING_PC_SIMULATOR']):
if not GetDepend(['BSP_USING_BUILTIN_LCD']):
# include all subfolder
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
Return('objs')
3.4 Kconfig.proj
将相关屏幕驱动通过这个脚本加入menuconfig中可配置选中
代码配置说明如下
配置参数可参考文档
c
#APP specific configuration.
config CUSTOM_MEM_MAP
bool
select custom_mem_map
default y
comment "------------Project configuration-----------"
if !BSP_USING_BUILT_LCD
<!-- 屏驱添加 -->
config LCD_USING_ST7796_8080
bool
default n
<!-- menuconfig选项 -->
choice
prompt "Custom LCD driver"
default LCD_TFT_ST7796_8080 <!-- 默认使用屏驱 -->
config LCD_TFT_ST7796_8080 <!-- -->
bool "4.0 rect DBI Video TFT LCD(480x320)" <!-- 屏驱说明,选择的时候显示的文字 -->
select LCD_USING_ST7796_8080 <!-- 选中的屏驱,要和注册的一样 -->
select BSP_LCDC_USING_DBI <!-- 屏幕驱动接口类型,前面有说明 -->
endchoice
<!-- 屏幕分辨率宽 -->
config LCD_HOR_RES_MAX
int
default 480 if LCD_TFT_ST7796_8080
<!-- 屏幕分辨率高 -->
config LCD_VER_RES_MAX
int
default 320 if LCD_TFT_ST7796_8080
<!-- 屏幕DPI值,数据手册或计算得 -->
config LCD_DPI
int
default 315 if LCD_TFT_ST7796_8080
endif
3.5 menuconfig选择
完成Kconfig.proj后即可在menuconfig中选择
menuconfig中多出如下选项
当使用外置屏幕时需要将原有内置屏幕驱动关闭,或在
proj.conf中添加# CONFIG_BSP_USING_BUILTIN_LCD is not set

关闭原屏幕驱动


四、内置流程
与外置不同,内置屏幕驱动添加在
SDK/customer/peripherals下,这里也包含了各种内置的驱动代码将通用的屏幕驱动代码加入
4.1 Kconfig配置
此文件在
SDK/customer/peripherals下添加驱动声明,这里需要添加屏幕驱动的声明,触摸和背光驱动也在这里添加
需要保证添加的声明与驱动代码中注册的相同

4.2 Kconfig_lcd配置
此文件在
SDK/customer/boards下这里添加的配置就与外置流程的Kocnfig.proj一样
添加屏幕选项、添加屏幕参数




4.3 menuconfig选择
打开menuconfig,在原有LCD屏幕选择中会多出一个我们自己配置的屏幕选项,可以选中,并编译

五、现象
当配置选项完成,且屏幕驱动的编写无误,编译通过下载使用后可以出现如下
可以读取到屏幕ID,LOG显示正常不会出现读写超时,屏幕正常显示



