你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

[NUCLEO-C031C6评测] 驱动LCD 第二步 初始化屏幕

[复制链接]
dvacos 发布时间:2024-3-28 15:59

认识屏幕引脚

image.png

驱动屏幕要涉及MOSI SCLK CS Reset RS(DC) 引脚,作用分别是:

MOSI:数据脚,主机数据发送从机接收

SCLK:时钟脚

CS:片选脚,选择要通讯得引脚

Reset:屏幕复位脚

RS(DC):命令、数据区分脚

以上每个引脚都有不同的作用,需要互相配合起来才能正常驱动LCD屏幕。

需要控制引脚

RS(DC)用于区分写命令或者数据,写寄存器时,需要将RS(DC)脚拉低,写数据的时候需要拉高。

Reset是拉高复位,按照LCD初始化参数的时序拉高拉低就可以了。

LEDK是背光脚,给高或者给低电平就可以驱动,但是这样背光是在全功率运行,一段时间后屏幕回发烫,所以正常使用需要串接电阻限流,或者使用PWM调光。

逻辑驱动

由上文可知,除了SPI的3个引脚外,我们只需在控制Reset跟Rs脚。

Reset的逻辑是上电默认拉低,之后先拉高120毫秒,再拉低50毫秒,后面持续拉高。

  HAL_GPIO_WritePin(LCD_REST_GPIO_Port, LCD_REST_Pin, GPIO_PIN_SET);
    HAL_Delay(50);
  HAL_GPIO_WritePin(LCD_REST_GPIO_Port, LCD_REST_Pin, GPIO_PIN_RESET);
    HAL_Delay(20);
  HAL_GPIO_WritePin(LCD_REST_GPIO_Port, LCD_REST_Pin, GPIO_PIN_SET);
    HAL_Delay(120);

Rs的逻辑是上电默认拉低,在发送数据前拉低,发送后拉高,,也就是说:

发送命令(寄存器) Rs低

发送数据 Rs高

所以我们需要单独发送寄存器字节,拉高RS后,再不断的发送数据。

代码如下,重复的把整套初始化参数给发送完毕后就可以正常初始化完屏幕。

    for(int i=0;i<21;i++){

        HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_PIN_RESET);

        HAL_SPI_Transmit(&hspi1,addr,1,100);

        HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_PIN_SET);

        for(int j=0;j<len ;j++){
            HAL_SPI_Transmit(&hspi1,para[j],1,100);
        }   

        HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET);

        HAL_Delay(delay_ms);
    }  

如何判断初始化成功?

有的屏幕参数会在初始化成功之后默认进入调试模式,就是老式电视花白的画面,如下

image.png

有的没有进入测试模式的代码,就需要我们去刷纯色来判断初始化是否成功。

本次使用的屏幕是565颜色素的,我们只需要把对应的颜色数发出去即可,红色对应的是565颜色编码是0xf800。

下图是一些颜色对应的565颜色数代码。

image.png

屏幕分辨率是240×296,所以我们要要填充完240×296个像素,所以循环240×296次,0xf800就可以填充完整个屏幕的颜色。

如下图,就是刷纯红色的效果。

image.png

至此,我们完成了驱动屏幕的第二步初始化屏幕

收藏 评论0 发布时间:2024-3-28 15:59

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版