RT-Thread使用SDRAM+LTDC驱动正点原子4.3寸RGB屏(一)

RT-Thread版本:4.1.0

RT-Thread Studio版本:2.2.8

开发板:正点原子阿波罗F429IGT6

踩了一个多星期的坑终于爬上来了!总体来说RT-Thread的lcd驱动做的还是不错的,代码量比较少,比CubeMX配置起来简单的多,下边跟着我做就可以,我会把代码仓库放在文章最后边,免费下载!!!如果文章对你有帮助请点赞加收藏,话不多说直接开始! 

一.新建RT-Thread工程

二.CubeMX配置

基础配置

基础配置不再赘述

配置SRAM

下边参数不用管,RT-Thread会配置好

配置LTDC

CubeMX自动分配的引脚不对,需手动重新分配,并把pin速度调到最快

不生成独立的.c/.h

生成代码,关闭cubemx

三.向工程中添加驱动文件

新版RT-Thread Studio生成的代码不需要再添加drv_lcd.c和drv_sdram.c,但是需要添加lcd_port.hsdram_port.h,

lcd_port.h位置在:

D:/RT-ThreadStudio/repo/Extract/RT-Thread_Source_Code/RT-Thread/4.1.0/bsp/stm32/stm32f429-atk-apollo/board/ports

sdram_port.h位置在:

D:/RT-ThreadStudio/repo/Extract/RT-Thread_Source_Code/RT-Thread/4.1.0/bsp/stm32/stm32f429-fire-challenger/board/ports

把这两个文件全部复制到rtt_sdram_ltdc_rgb\drivers\include目录下

这时候编译就不会出问题

四.修改lcd_port.h

由于lcd_port.h是用的野火的5寸RGB,跟正点原子的对不上,所以需要修改一下头文件的一些宏定义:

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2019-01-08     zylx         first version
 */

#ifndef __LCD_PORT_H__
#define __LCD_PORT_H__

/* fire 5 inch screen, 800 * 480 */
#define LCD_WIDTH           800
#define LCD_HEIGHT          480
#define LCD_BITS_PER_PIXEL  16
#define LCD_BUF_SIZE        (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8)
#define LCD_PIXEL_FORMAT    RTGRAPHIC_PIXEL_FORMAT_RGB565

#define LCD_HSYNC_WIDTH     1
#define LCD_VSYNC_HEIGHT    1
#define LCD_HBP             88
#define LCD_VBP             32
#define LCD_HFP             40
#define LCD_VFP             13

#define LCD_BACKLIGHT_USING_GPIO
#define LCD_BL_GPIO_NUM     GET_PIN(B, 5)//背光灯为PB5
//#define LCD_DISP_GPIO_NUM   GET_PIN(D, 4)
/* fire 5 inch screen, 800 * 480 */

#endif /* __LCD_PORT_H__ */

五.增加LTDC初始化函数

1.打开rtt_sdram_ltdc_rgb\cubemx\Src\stm32f4xx_hal_msp.c,

2.复制 HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)并复制在drv_lcd.c里

3.重命名函数为MX_LTDC_MspInit并做一些小修改:

static void MX_LTDC_MspInit(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
    PeriphClkInitStruct.PLLSAI.PLLSAIN = 60;
    PeriphClkInitStruct.PLLSAI.PLLSAIR = 2;
    PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);

    __HAL_RCC_LTDC_CLK_ENABLE();

    __HAL_RCC_GPIOI_CLK_ENABLE();
    __HAL_RCC_GPIOF_CLK_ENABLE();
    __HAL_RCC_GPIOH_CLK_ENABLE();
    __HAL_RCC_GPIOG_CLK_ENABLE();
    /**LTDC GPIO Configuration
    PI9     ------> LTDC_VSYNC
    PI10     ------> LTDC_HSYNC
    PF10     ------> LTDC_DE
    PH9     ------> LTDC_R3
    PH10     ------> LTDC_R4
    PH11     ------> LTDC_R5
    PH12     ------> LTDC_R6
    PG6     ------> LTDC_R7
    PG7     ------> LTDC_CLK
    PH13     ------> LTDC_G2
    PH14     ------> LTDC_G3
    PH15     ------> LTDC_G4
    PI0     ------> LTDC_G5
    PI1     ------> LTDC_G6
    PI2     ------> LTDC_G7
    PG11     ------> LTDC_B3
    PI4     ------> LTDC_B4
    PI5     ------> LTDC_B5
    PI6     ------> LTDC_B6
    PI7     ------> LTDC_B7
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
    HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
    HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
    HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
}

4.将初始化代码放入stm32_lcd_init函数里

5.修改宏定义打开测试历程

6.屏蔽背光灯代码

六.RT-Thread Setting配置

保存关闭

编译下载

终端输入测试命令,屏幕会红绿蓝循环刷新

教程到此结束,如果对你有帮助请点赞收藏!

代码仓库:godmial/rtt_sdram_ltdc_rgb: RT-Thread使用SDRAM+LTDC驱动正点原子4.3寸RGB屏 (github.com)

VIP大佬帮点点 

RT-Thread使用SDRAM+LTDC驱动正点原子4.3寸RGB屏资源-CSDN文库

参考链接:

RT-Thread-RT Thread Studio RGB屏幕之 SDRAM配置RT-Thread问答社区 - RT-Thread

RT-Thread-RT Thread Studio RGB屏幕之 LTDC 驱动篇RT-Thread问答社区 - RT-Thread

正点原子H743+4.3RGB屏幕使用CUBEMX移植_stm32h743 lcd cubemx 正点原子-CSDN博客

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值