思澈科技-SF32屏幕模组添加

文章目录

  • 一、简介
  • 二、通用配置
    • [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

完成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一样

添加屏幕选项、添加屏幕参数




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

五、现象

当配置选项完成,且屏幕驱动的编写无误,编译通过下载使用后可以出现如下

可以读取到屏幕ID,LOG显示正常不会出现读写超时,屏幕正常显示



相关推荐
绿算技术5 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
MartinYeung55 小时前
[论文学习]隐私保护联邦特徵选择与差分隐私的的工程实践框架
学习
qeen876 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
Flandern11116 小时前
Pull Requests(PR)
学习·github·pr
Litluecat7 小时前
2026年6月6日科技热点新闻
人工智能·科技·热点·每日
Litluecat7 小时前
2026年6月7日科技热点新闻
科技·新闻·每日·速览
nashane7 小时前
HarmonyOS 6学习:JsCrash“闪退”法医指南——从FaultLog堆栈还原崩溃现场的终极手册
学习·华为·harmonyos
for_ever_love__7 小时前
UI学习:UICollectionView瀑布流
学习·ui·ios·objective-c·cocoa
AOwhisky7 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
_李小白8 小时前
【android opencv学习笔记】Day 32:直线检测之霍夫变换
android·opencv·学习