思澈科技-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显示正常不会出现读写超时,屏幕正常显示



相关推荐
LYS_06182 小时前
寒假学习(11)(HAL库2+模数电11)
学习
晚霞的不甘2 小时前
Flutter for OpenHarmony手势涂鸦画板开发详解
前端·学习·flutter·前端框架·交互
妙团团3 小时前
React学习之自定义tab组合组件
javascript·学习·react.js
2501_933907213 小时前
如何选择西安优质小程序开发服务与本凡码农合作?
科技·微信小程序·小程序
GAOJ_K13 小时前
滚珠花键的无预压、间隙调整与过盈配合“场景适配型”
人工智能·科技·机器人·自动化·制造
星火开发设计15 小时前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
Gorgous—l15 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
Hello_Embed16 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus