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

【STM32F769I-DISC1】驱动ST7789LCD

[复制链接]
lugl 发布时间:2025-3-3 13:53

Stm32f769驱动LCD

【前言】

由于开发板没有配LCD屏,手上没有这个接口的LCD屏,刚好手上有个ST7789的屏,是4线SPI接口的,因此先把这个屏驱动起来。

【硬件接口定义】

1、查找屏的资料其定义如下:

image.png

2、再查找开发板的原理图,使用他的接口CN9、CN13来对接LCD屏,其接口图如下所示:

image.png

3、结合屏与开发板,定义引脚如下:

/*

LCD_PWR:PJ3

LCD_RST:PJ4

LCD_WR: PH6

LCD_CS: PA11

LCD_SCK PA12

LCD_SDA PB15

*/

4、首先偿试使用模拟SPI先来验证屏的工作是否正常。定义几个宏函数,用于驱动的时序产生。

define LCD_PWR(n) (n ? HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_3, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_3, GPIO_PIN_RESET))

define LCD_RST(n) (n ? HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_4, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_4, GPIO_PIN_RESET))

define LCD_WR(n) (n ? HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, GPIO_PIN_RESET))

define LCD_CS(n) (n ? HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET))

/*

LCD_SDA:PB15

LCD_SCK:PA12

*/

define LCD_SDA(n) (n ? HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET))

define LCD_SCK(n) (n ? HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET))

5、初始化GPIO

/**

函数名称 : lcd_gpio_init

函数功能 : lcd gpio初始化

输入参数 : 无

返回值 : 无

备注 : 无

**/

void lcd_gpio_init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

__HAL_RCC_GPIOJ_CLK_ENABLE();

__HAL_RCC_GPIOH_CLK_ENABLE();

/Configure GPIO pin : PA11 12 /

GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/Configure GPIO pins : PB15 /

GPIO_InitStruct.Pin = GPIO_PIN_15;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/Configure GPIO pin : PH 6 /

GPIO_InitStruct.Pin = GPIO_PIN_6;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);

/Configure GPIO pin : PJ 3 PJ4 /

GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11 | GPIO_PIN_12, GPIO_PIN_SET);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, GPIO_PIN_SET);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_SET);

}

6、其余的驱动移植正点原子的驱动,具体代码见附件

7、添加测试,在main.c中添加LCD初始与显示测试代码:

lcd_init();

lcd_show_string(10, 0, 108, 12, (uint8_t *)"STM32F767LCD", 24, 1);

lcd_show_chinese(72, 32, pandora_ch, 32, 4, 1);

8、测试效果:

image.png

源文件:

收藏 评论2 发布时间:2025-3-3 13:53

举报

2个回答
KEY1 回答时间:5 天前

就这?搞个界面出来

lugl 回答时间:5 天前

KEY1 发表于 2025-3-5 00:42
就这?搞个界面出来

别急别急,先把LCD搞亮,接下来再搞LVGL或者touchGFX

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版