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.h和sdram_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博客